Gimbal Lock - 萬向鎖

環架鎖定(Gimbal lock),也稱為萬向鎖,是使用動態歐拉角表示三維物體的旋轉時會出現的問題。
發生的情況為:利用旋轉矩陣計算旋轉時,如果一旦選擇 ±90°作為第二次的旋軸,就會導致第一次旋轉和第三次旋轉等價,整個旋轉表示系統被限制在只能繞第一次的旋軸旋轉,丟失了一個表示維度。

gimbal_lock




歐拉角(Euler Angle)

歐拉角是瑞士數學家萊昂哈德·歐拉(Leonhard Euler)用來描述剛體在三維空間中取向的方法。簡單來說,就是任何一個物體的取向,都可以用3個有次序的旋轉角度來表示。

歐拉在三維空間中定義了一個靜止不動的參考系,即慣性系。還定義了一個運動的坐標系,即物體坐標系。慣性係與物體坐標系的區別在於,當物體取向發生改變之後,物體坐標係也隨之改變,而慣性系卻不變。

例如,我們認為北極星的位置對於地球上的任意觀察點都是不變的,因此可以看作一個靜止的參考系。而基於公路上一輛行駛的汽車的坐標系,因為汽車的轉彎而不斷改變,是一個物體坐標系。

歐拉角的三個旋轉是繞物體坐標系的三個軸複合形成。為何不使用慣性系?因為物體坐標系在數學處理上是簡單的。
為了描述一架飛機的取向,定義航偏角為 yaw, 俯仰為 pitch, 橫滾為 roll。假如分別使用矩陣 I1, I2, I3 來表示這三個角度,那麼飛機繞自身先轉 yaw 角,再繞 pitch 角,最後繞 roll 角的結果可用 I3 * I2 * I1 來表示。瞭解旋轉矩陣 (Rotation Matrix)

通常來說,一個物體的取向用歐拉角來表示是簡單有效的。但是在某種特殊的情況下,歐拉角將失效,形成所謂的 “萬向節死鎖”。




萬向節死鎖的例子

一個簡單直觀的例子是砲塔模型。假設地面上的一個砲塔有兩個旋轉軸:
Y 垂直於地面,使砲塔可以平行地面360度旋轉(正北設為0度);
X 平行於地面,使砲口可以繞著它上下90度旋轉(平行地面使設為0度)。
現在,天空中的任意一點就可以使用兩個坐標的度數來表示了!

這時,一架敵機從正東面飛來,我們轉動砲塔對準它,目前的坐標是(10,90)。因為飛機飛行方向不變,所以 Y 固定為90,而 X 由於飛機距離的接近而增大。當飛機恰好飛到砲塔頂端時,即 X 的角度也達到 90 度時,飛機忽然向南飛行!我們必須立即改變砲塔朝向,否則即將都丟失目標。但是我們發現,無論是轉動 X 軸還是 Y 軸,我們都無法讓砲塔轉向南方了,即砲塔在此時丟失了一個自由度!

為什麼不把Y轉動到180度的位置繼續跟踪呢?注意此時砲塔的狀態: 砲口已經對準砲台的正上方, 平行於 Y 軸,無論 Y 軸怎樣轉動,砲口都改變不了朝向的, 即砲台的物體坐標係不會變化了。
能轉動的只有X軸,但是這樣一來,砲口又回到東面了。

歐拉角的萬向節死鎖就是這樣:我們依次繞物體坐標系的 X軸、Y軸、Z軸旋轉,當Y軸旋轉了90度之後,Z就會指向原來的X軸。這樣一來,我們事實上只繞了 X軸 和 Y軸 兩個軸旋轉,第三根軸的自由度就丟失了! (值得指出的是,我們在描述的時候使用的是世界坐標系的x, y, z軸,但是旋轉的時候卻是使用物體的)

萬向鎖的一個有趣實驗是當先把飛機 Yaw 45度,再 Pitch 90度,與先 Pitch 90度,再 Roll 45度的結果完全相同。這個現像也叫歐拉角的別名現象(同一個慣性系下同一個值有不同的表示方法),這也是很糟糕的。



萬向鎖發生的原因

在靜態歐拉角中,由於旋轉軸不會改變,所以不會有萬向鎖的情況發生。

但在動態歐拉角時,因為旋轉軸會隨著旋轉而改變,才導致萬向鎖的發生,以旋轉矩陣來說,它是有旋轉順序的,假設其旋轉軸的順序為 X, Y, Z,在對 Y 軸的旋轉為 90 度時,對 X 軸的旋轉,與對 Z 軸的旋轉,其實是同一軸,說明如下:
1、先對 X 軸旋轉時,沒有問題,直接旋轉
2、接著對 Y 軸旋轉 90 度,因為旋轉 的關係,改變了 X 與 Z 軸,而使得其軸對調,也就是說現在 Z 軸 與 一開始 的 X 軸對齊
3、再對 Z 軸旋轉,因為步驟2的關係,Z 軸的軸向被改成將一開始的 X 軸對齊,所以現在對 Z 軸旋轉,與一開始對 X 軸旋轉所造成的影響是相同的




Reference

萬向節鎖(Gimbal Lock)的理解
有關萬向節死鎖(Gimbal Lock)的問題

文字內容 或 影像內容 部份參考、引用自網路,如有侵權,請告知,謝謝。
創作者介紹
創作者 silverwind1982 的頭像
silverwind1982

拾人牙慧

silverwind1982 發表在 痞客邦 留言(0) 人氣()