方法二,這里提到了SVD算法 * Q5 F6 m2 A% |9 k
通過實際的坐標點例子,來直觀解釋通過SVD求對應的坐標系關系。 ![]() 已知四個點在坐標系A中的坐標為: (0, 0, 0); (1,0,0); (1,1,0); (0,1,0) 可得矩陣A為
9 `+ l; O, j- v2 |6 H: @0 E![]()
- _9 R) ^" i7 `! L8 ] t! c矩陣A這四個點在坐標系B中的坐標為: (2,2, 2); (3,2,2); (3,3,2); (2,3,2) 可得矩陣B為 5 n& D1 g8 L9 o5 L5 {9 b
: ]! s' n7 j) O0 a$ n8 L
矩陣B步驟一:求兩個數據集的質心![]() 根據上述公式,可得質心為 ![]() ![]() 步驟二:將兩個數據集的質心移動至同一個點,即只存在于一個旋轉的轉換關系。 對應坐標系中的點同時減去質心,計算后的矩陣A和B分別為 1 p0 t1 F. g. v d2 h
![]()
+ `* z) U9 s9 p& w# P! K# V計算后的矩陣A
* Y7 \- |/ u4 @, a: M![]()
- x* t {' I8 `8 O- L計算后的矩陣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。根據公式 得平移矩陣為![]() 總結:如果在實際項目中,需要獲取多臺設備間的關系,如機器人相對于產品間的關系,或者機床相對于產品的關系,則該方法較為實用。注意:在實際的選擇參考點時,不要在一條線上選點。如上述選的四個點,要求不能共線。要不然會減少有效數據。
% ?8 ~! d# N7 n |