歐拉角和四元數都可以用來描述物體的姿態。歐拉角的萬向節死鎖理解稍微奇怪。四元數原理的理解較為復雜。歐拉角和四元數之間可以做轉換。這里收集了若干資料已做備忘。
萬向節死鎖(Gimbal Lock) :
歐拉角中的萬向節死鎖(Gimbal Lock)是一個重點和難點,理解了它對理解為何使用四元數替代歐拉角有很好的幫助作用。而炮台的火炮跟蹤飛行中的飛機引起的萬向節死鎖就是一個非常直觀的例子。如下圖所示。
坐標軸的紅色表示x軸,綠色表示y軸,藍色表示z軸;而繞着x,y,z軸旋轉形成的角度分別稱為roll,pitch,yaw,逆時針為正方向。
現在假設地面上有一個火炮,炮膛可以上下移動(pitch),還可以360度旋轉(yaw)。假設火炮的跑堂開始與x軸重合,這時前方有一架飛機飛來,飛機在飛行的過程中,炮膛一直對准着飛機。開始飛機出現在x軸正前方pithch為45度的位置,即炮膛此時的姿態為1.(pitch,yaw)=(-45度,0)。接着飛機飛行到火炮的正上方,即炮膛此時的姿態為2.(pitch,yaw)=(-90度,0)。接着飛機突然向y軸的負方向飛行,飛行至炮膛姿態為3. (pitch,yaw)=(-70度,-90度)的位置。注意,為了讓炮膛繼續對准飛機,火炮必須馬上旋轉底部,使得偏航角yaw為-90度,然后才能讓炮膛往下移動至pitch為-70度。
理想的情況是:炮膛在正前方位置時,緊接着向下移動炮膛值pitch為-70度,這樣整個過程炮膛的運動是連續的。但事實上並非如此,而是:如果同時轉動炮膛的pitch和yaw,炮膛會出現炮膛晃動的現象。試想在2.(pitch,yaw)=(-90度,0)和3. (pitch,yaw)=(-70度,-90度)位置插值。我們會得到:
(-90度,0)
(-85度,22.5度)
(-80度,45度)
(-75度,67.5度)
(-70度,-90度)
從z軸向下方觀察炮膛口的運動軌跡,如下圖所示,炮膛運行的軌跡是一條曲線(而非直線),因此炮膛整個過程是晃動的,而這不是我們想要。這就是我們常說的萬向節死鎖現象(Gimbal Lock)
這是什么原因導致GinmbalLock呢?原因是同一個位置點的姿態擁有兩種不同表達引起的,具體地,當炮膛轉動至-90或者90度時候,就會出現炮膛的姿態可以用(pitch,yaw)=(-90度,0)表示,也可以用(pitch,yaw)=(-90度,-90),前者是炮膛先轉動pitch后轉動yaw,而后者是先轉動yaw后轉動pitch。而在時間連續的情況下,對這兩點間進行插值自然會導致運動的不連續出現。
以下是一個老外講解Gimbal Lock的視頻:
歐拉角:
1. 歐拉角基本概念
2.歐拉角的萬向節死鎖(萬向節死鎖的理解,不錯)
3.萬向節死鎖視頻講解(萬向節死鎖的視頻講解,老外)
4. 關於萬向節死鎖(Gimbal Lock)(萬向節死鎖的一個解釋,還好)
5. 萬向節死鎖實驗講解視頻(老外很用心去解釋死鎖的概念)
四元數資料:
1. 徹底搞懂四元數(這里有四元數的理解,旋轉矩陣,歐拉角,四元數)
2. Understanding Quaternions 中文翻譯《理解四元數》(從原理上直接進行解釋)
3. 四元數與歐拉角之間的轉換(轉換公式的計算)