【问题标题】:icp transformation matrix interpretationicp变换矩阵解释
【发布时间】:2013-09-28 03:59:38
【问题描述】:

我正在使用 PCL 从 ICP (getTransformationMatrix()) 中获取转换矩阵。 以没有旋转的平移运动为例,得到的结果是

0.999998         0.000361048   0.00223594     -0.00763852
-0.000360518     1             -0.000299474   -0.000319525
-0.00223602      0.000298626   0.999998       -0.00305045
       0         0             0              1

如何从矩阵中找到转换? 我们的想法是查看估计和实际运动之间的误差

【问题讨论】:

    标签: opencv point-cloud-library


    【解决方案1】:

    我没有使用你在这里引用的库,但我很清楚你提供的结果是一个齐次变换,即左上角的 3x3 矩阵 (R) 是旋转矩阵,右边的 3x1 (T)是翻译:

    M1 = [  **[** [R], [T] **], [** 0 0 0 1 **]**  ] 
    

    请参阅此处的“矩阵表示”部分: http://en.wikipedia.org/wiki/Kinematics

    使用这种表示法,您可以通过乘以变换矩阵来获得连续变换后的最终点。

    如果你有一个点 p0 转换 n 次你得到点 p1 为:

    P0 = [[p0_x], [p0_y], [p0_z], [1]]
    P1 = [[p1_x], [p1_y], [p1_z], [1]]
    M = M1*M2*...*Mn
    P1 = M*P0
    

    【讨论】:

      【解决方案2】:

      tROTA 是带有平移和旋转的矩阵:

      auto trafo = icp.getFinalTransformation();
      
      Eigen::Transform<float, 3, Eigen::Affine> tROTA(trafo);
      
      float x, y, z, roll, pitch, yaw;
      
      pcl::getTranslationAndEulerAngles(tROTA, x, y, z, roll, pitch, yaw);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-12-22
        • 1970-01-01
        • 2018-09-18
        • 1970-01-01
        • 1970-01-01
        • 2019-02-13
        相关资源
        最近更新 更多