方法二,這里提到了SVD算法 6 {3 @) }, k! Q
通過實際的坐標點例子,來直觀解釋通過SVD求對應的坐標系關系。 ![]() 已知四個點在坐標系A中的坐標為: (0, 0, 0); (1,0,0); (1,1,0); (0,1,0) 可得矩陣A為
! G3 w2 w, ?- e) n4 K- H 7 p# f. Y6 U/ y- U7 H
矩陣A這四個點在坐標系B中的坐標為: (2,2, 2); (3,2,2); (3,3,2); (2,3,2) 可得矩陣B為
5 J; t1 k }, U; G0 A. y# M% |7 A![]()
9 E, a5 e; G* E$ i4 K矩陣B步驟一:求兩個數據集的質心![]() 根據上述公式,可得質心為 ![]() ![]() 步驟二:將兩個數據集的質心移動至同一個點,即只存在于一個旋轉的轉換關系。 對應坐標系中的點同時減去質心,計算后的矩陣A和B分別為
4 l1 S* ^% ?. b0 Q8 K. D% ?& c . I% H3 L; j7 P9 r: t& r0 V1 q
計算后的矩陣A9 }- |. {( S9 }; \' {! P% b6 ^1 ~9 `
![]()
& o& B/ r# Z$ b/ d, x! f, V計算后的矩陣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 d; D7 ?$ k& B5 M- }- R) B
|