方法二,這里提到了SVD算法 c; N0 H8 O. t) b/ v( [: o
通過實際的坐標點例子,來直觀解釋通過SVD求對應(yīng)的坐標系關(guān)系。 ![]() 已知四個點在坐標系A(chǔ)中的坐標為: (0, 0, 0); (1,0,0); (1,1,0); (0,1,0) 可得矩陣A為
' c) {6 p/ ?/ ~9 P2 y" ^ " ^; W, k& W5 Z$ c2 H/ R9 C
矩陣A這四個點在坐標系B中的坐標為: (2,2, 2); (3,2,2); (3,3,2); (2,3,2) 可得矩陣B為 6 F2 h+ U+ o0 z F) S# W
![]()
# d$ o- }$ i1 Q& w0 O矩陣B步驟一:求兩個數(shù)據(jù)集的質(zhì)心![]() 根據(jù)上述公式,可得質(zhì)心為 ![]() ![]() 步驟二:將兩個數(shù)據(jù)集的質(zhì)心移動至同一個點,即只存在于一個旋轉(zhuǎn)的轉(zhuǎn)換關(guān)系。 對應(yīng)坐標系中的點同時減去質(zhì)心,計算后的矩陣A和B分別為
/ L" @! S5 y7 s g+ T# o : w# d8 o r( k0 s9 v2 M& Z$ `7 G. A
計算后的矩陣A
# z0 f8 v8 u$ [. k* P9 |![]()
5 F- c- w2 a) M* I9 a9 b; h計算后的矩陣B備注:此處的矩陣A和矩陣B一樣,因為舉得例子較為特殊,只存在平移關(guān)系。計算過程通用。 步驟三:通過SVD算法計算旋轉(zhuǎn)和平移關(guān)系。 定義一個3X3的矩陣,將矩陣A的每一行數(shù)據(jù)與矩陣B進行點乘,會產(chǎn)生四組3X3的矩陣,將這四組數(shù)據(jù)求和,得到最終的3X3的矩陣,就是我們需要用SVD算法來進行奇異值分解的矩陣H。 ![]() ![]() 上述公式中,顏色相同的框內(nèi)數(shù)據(jù)進行點乘,構(gòu)成3X3的矩陣a1,a2,a3,a4。 矩陣H = a1 + a2 + a3 + a4。計算結(jié)果如下 ![]() 通過SVD算法分解該矩陣,這里直接通過MATLAB接口調(diào)用,具體原理在前面的章節(jié)中已描述。 ![]() 步驟四:計算旋轉(zhuǎn)和平移關(guān)系 根據(jù)上述求出的u1和v1,可求得旋轉(zhuǎn)矩陣R為 將該旋轉(zhuǎn)矩陣轉(zhuǎn)為歐拉角則Rx = 0, Ry = 0, Rz = 0。根據(jù)公式 得平移矩陣為![]() 總結(jié):如果在實際項目中,需要獲取多臺設(shè)備間的關(guān)系,如機器人相對于產(chǎn)品間的關(guān)系,或者機床相對于產(chǎn)品的關(guān)系,則該方法較為實用。注意:在實際的選擇參考點時,不要在一條線上選點。如上述選的四個點,要求不能共線。要不然會減少有效數(shù)據(jù)。 ) c1 A8 j& U6 R6 @3 R4 w* } U
|