方法二,这里提到了SVD算法
6 L! ^ w, \1 \# E6 ~4 K通过实际的坐标点例子,来直观解释通过SVD求对应的坐标系关系。  已知四个点在坐标系A中的坐标为: (0, 0, 0); (1,0,0); (1,1,0); (0,1,0) 可得矩阵A为 2 A4 [' [* d# P( [( P
4 U" h8 t* ]- U+ D; z
矩阵A这四个点在坐标系B中的坐标为: (2,2, 2); (3,2,2); (3,3,2); (2,3,2) 可得矩阵B为 0 I* r9 l' s3 J" [" ~
O0 o" e9 T: i" k" t6 }1 C
矩阵B步骤一:求两个数据集的质心 根据上述公式,可得质心为   步骤二:将两个数据集的质心移动至同一个点,即只存在于一个旋转的转换关系。 对应坐标系中的点同时减去质心,计算后的矩阵A和B分别为
; }; p4 C7 H% g * Z& j' S2 U$ ?5 z# M& b1 P7 E, @
计算后的矩阵A
' r; [$ W/ A( }1 C( _/ |* M ( s* B# V+ f, L& {, F1 @
计算后的矩阵B备注:此处的矩阵A和矩阵B一样,因为举得例子较为特殊,只存在平移关系。计算过程通用。 步骤三:通过SVD算法计算旋转和平移关系。 定义一个3X3的矩阵,将矩阵A的每一行数据与矩阵B进行点乘,会产生四组3X3的矩阵,将这四组数据求和,得到最终的3X3的矩阵,就是我们需要用SVD算法来进行奇异值分解的矩阵H。   上述公式中,颜色相同的框内数据进行点乘,构成3X3的矩阵a1,a2,a3,a4。 矩阵H = a1 + a2 + a3 + a4。计算结果如下  通过SVD算法分解该矩阵,这里直接通过MATLAB接口调用,具体原理在前面的章节中已描述。  步骤四:计算旋转和平移关系 根据上述求出的u1和v1,可求得旋转矩阵R为 将该旋转矩阵转为欧拉角则Rx = 0, Ry = 0, Rz = 0。根据公式 得平移矩阵为 总结:如果在实际项目中,需要获取多台设备间的关系,如机器人相对于产品间的关系,或者机床相对于产品的关系,则该方法较为实用。注意:在实际的选择参考点时,不要在一条线上选点。如上述选的四个点,要求不能共线。要不然会减少有效数据。
5 i+ N# G- x2 n5 v7 [5 G( F |