旋轉矩陣相關數學理論
阿新 • • 發佈:2020-09-07
旋轉矩陣是姿態的一種數學表達方式,或者籠統說變換矩陣是一種抽象的數學變數。其抽象在於當你看到資料,根本無法斷定其正確性;往往只有轉換為較為直觀的尤拉角,然後大概目測估算(總不能拿著量角器去測量精度吧)。
我們知道,姿態的數學形式有旋轉矩陣(滿足RTR=E)、尤拉角、旋轉向量(角軸)、四元數(norm(x y z w) = 1)等。今天這裡要討論的是旋轉矩陣相關理論基礎。
旋轉矩陣常用於以下三種場景:
- 描述一個frame(座標系)相對於另一個frame間的位姿;(如:描述相鄰兩幀間的相機運動)
- 描述一個point從一個frame變換到另一個frame;(其實點沒動,只是在兩個frame觀測時,座標不一樣而已;如:;路標點點P在不同相機座標系下座標值不同,但在世界座標系下是固定的)
- 描述一個point在同一個frame中的運動;(這裡的點是運動了的,在VSLAM中應用較少)
繞三個軸的旋轉矩陣請按以下形式進行記憶,可能有些地方是下面的轉置形式。
(本部落格和大多數論文資料一樣,都是左乘原則)
一、固定旋轉(Fix Angles)
所謂固定旋轉,就是按照物體外部固定軸旋轉。這種旋轉在工程中很常見,用的相對多一些(相對於下面的尤拉旋轉),例如:旋轉次序為X-Y-Z,那麼旋轉矩陣的形式為:RZRYRX。如下圖,其實沒什麼好說。
已經旋轉矩陣,怎麼求解尤拉角呢?下圖便是一種比較好的求解辦法。我們知道,順時針旋轉180°和逆時針旋轉180°是等效的,所以求解出來的尤拉角其取值範圍最好是:
[0°,180°] or [0°,-180°]或者[-90°,90°],這裡採用的後者。下圖中的atan2是matlab中的api,我們在這裡簡單驗證下其與tan的區別:可以看到,當一個點在第三象限,如(-1, -1),在尤拉角中,其角度為:-135°,但是atan(-1/-1)算出來是45°,顯然是錯的。
1 >> atan(1) * 180 / pi 2 3 ans = 4 5 45 6 7 >> atan2(1, 1) * 180 / pi 8 9 ans = 10 11 45 1213 >> atan2(-1, -1) * 180 / pi 14 15 ans = 16 17 -135 18 19 >>
順在在這裡用Eigen驗證下:
二、尤拉旋轉
參考:
(臺大機器人學之運動學——林沛群)
https://www.bilibili.com/video/BV1v4411H7ez?p=3