1. 程式人生 > 實用技巧 >旋轉矩陣相關數學理論

旋轉矩陣相關數學理論

旋轉矩陣是姿態的一種數學表達方式,或者籠統說變換矩陣是一種抽象的數學變數。其抽象在於當你看到資料,根本無法斷定其正確性;往往只有轉換為較為直觀的尤拉角,然後大概目測估算(總不能拿著量角器去測量精度吧)。

我們知道,姿態的數學形式有旋轉矩陣(滿足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
12
13 >> atan2(-1, -1) * 180 / pi 14 15 ans = 16 17 -135 18 19 >>

順在在這裡用Eigen驗證下:

二、尤拉旋轉

參考:

(臺大機器人學之運動學——林沛群)

https://www.bilibili.com/video/BV1v4411H7ez?p=3