方法二,這里提到了SVD算法 / B9 [1 {4 }! c5 c
通過實際的坐標點例子,來直觀解釋通過SVD求對應的坐標系關系。 ![]() 已知四個點在坐標系A中的坐標為: (0, 0, 0); (1,0,0); (1,1,0); (0,1,0) 可得矩陣A為 % ~% E3 c5 l6 P/ X% } h
![]()
! V: J! R! R$ N7 @0 P矩陣A這四個點在坐標系B中的坐標為: (2,2, 2); (3,2,2); (3,3,2); (2,3,2) 可得矩陣B為
1 }0 ?! m* S5 T![]()
' e; d- ~& B. |9 e3 S矩陣B步驟一:求兩個數據集的質心![]() 根據上述公式,可得質心為 ![]() ![]() 步驟二:將兩個數據集的質心移動至同一個點,即只存在于一個旋轉的轉換關系。 對應坐標系中的點同時減去質心,計算后的矩陣A和B分別為
- x4 m6 d/ e) f$ K2 p0 C6 q $ o! k; X: r2 o3 D2 L \
計算后的矩陣A. b+ F9 O" K9 W4 B$ p1 A. k
7 G- g5 x$ S- f% r. ^
計算后的矩陣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。根據公式 得平移矩陣為![]() 總結:如果在實際項目中,需要獲取多臺設備間的關系,如機器人相對于產品間的關系,或者機床相對于產品的關系,則該方法較為實用。注意:在實際的選擇參考點時,不要在一條線上選點。如上述選的四個點,要求不能共線。要不然會減少有效數據。
4 [* r5 m; ^; ~. W' k |