3

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

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

4

2 回答 2

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
于 2013-11-18T12:06:57.283 回答
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);
于 2014-10-31T14:01:58.813 回答