icp变换矩阵解释

时间:2013-09-23 09:43:36

标签: opencv point-cloud-library

我正在使用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

如何从矩阵中找到变形? 我们的想法是看到煽动和真实运动之间的错误

2 个答案:

答案 0 :(得分:0)

我没有使用你在这里提到的库,但我很清楚你提供的结果是同质变换,即左上角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

答案 1 :(得分:0)

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);