物體姿态
物體在三維空間中的姿态、旋轉,用旋轉矩陣、歐拉角、四元素來表示。
旋轉矩陣
旋轉矩陣定義
旋轉矩陣(英語:Rotation matrix)是在乘以一個向量的時候有改變向量的方向但不改變大小的效果并保持了手性的矩陣。(手性:左/右手坐标系)
- 二維旋轉矩陣表達式:
- 三維旋轉矩陣表達式:
旋轉矩陣優缺點
優點:旋轉軸任意選擇。
缺點:占用的記憶體空間大,計算量也大。
歐拉角
用來确定物體姿态,由章動角a、旋進角(即進動角)b和自轉角r組成,如:(a,r,b)。
歐拉角定義
-
靜态定義
對于在三維空間裡的一個參考系,任何坐标系的取向,都可以用三個歐拉角來表現。參考系又稱為實驗室參考系,是靜止不動的。而坐标系則固定于剛體,随着剛體的旋轉而旋轉。
參閱下圖。設定xyz-軸為參考系的參考軸。稱xy-平面與XY-平面的相交為交點線,用英文字母(N)代表。zxz順規的歐拉角可以靜态地這樣定義:
- a 是x-軸與交點線的夾角,
- b是z-軸與Z-軸的夾角,
- r是交點線與X-軸的夾角。
-
動态定義
我們也可以給予歐拉角兩種不同的動态定義。一種是繞着固定于剛體的坐标軸的三個旋轉的複合;另外一種是繞着實驗室參考軸的三個旋轉的複合。用動态的定義,我們能更了解,歐拉角在實體上的含義與應用。特别注意,以下的描述, XYZ坐标軸是旋轉的剛體坐标軸;而xyz坐标軸是靜止不動的實驗室參考軸。
A)繞着XYZ坐标軸旋轉:最初,兩個坐标系統xyz與XYZ的坐标軸都是重疊著的。開始先繞着Z-軸旋轉\alpha ,角值。然後,繞着X-軸旋轉\beta,角值。最後,繞着Z-軸作角值\gamma,的旋轉。
B)繞着xyz坐标軸旋轉:最初,兩個坐标系統xyz與XYZ的坐标軸都是重疊著的。開始先繞着z-軸旋轉\gamma,角值。然後,繞着x-軸旋轉\beta,角值。最後,繞着z-軸作角值\alpha ,的旋轉。
歐拉角公式
- 歐拉角轉為旋轉矩陣
- 歐拉角轉化為四元素
歐拉角優缺點
優點:直覺、容易了解,可以表示超過180度角度的旋轉。
缺點:存在萬向鎖(Gimbal Lock)的問題,關于萬向鎖這裡有個視訊說的很清楚。
四元素
四元素是一個高階複數。(聽起來就比較難了解,這裡推薦一個連結,從容易了解的角度介紹四元素,其中2/3維平面的旋轉解釋的很清楚)。
四元素定義
a + bi + cj + dk
四元素公式
- 四元素轉化為歐拉角
- 四元素轉化為旋轉矩陣
四元素優缺點
優點:不存在Gimbal Lock的問題
缺點:不容易了解,且單個四元素無法表示超過180度的旋轉。
總結
目前最理想的表示姿态的方式是四元素,下面是Oculars對傳感器的文章有提到:因為歐拉角存在Gimbal lock的問題,是以不使用歐拉角,而使用四元素來表示姿态。
Now turn to the problem of tracking a human head, which has three rotational degrees of freedom. The orientation of a D rigid body is often described by yaw, pitch, and roll angles. They are convenient for making figures like the one on the left, but later cause a lot of trouble due to numerical singularities (see gimbal lock) and a huge variety of alternative, incompatible definitions (see Euler angles–pronounced by Americans as “oiler angles”). We therefore use quaternions internally for representing orientation.
參考連結:
- wikipedia
- unity官方文檔
- understanding-quaternions