萬向鎖

         在3維中常用的歐拉角座標定向系統是用繞三個軸旋轉的角度來表示物體的朝向(Rx,Ry,Rz)(注意三個軸是針對物體座標系的)。如圖1,物體處於世界座標系(Xw,Yw,Zw)原點,此時物體座標系(Xl,Yl,Zl)和世界座標系重合(這裏我使用右手座標系。你也可以使用左手座標系,無所謂,一樣)。此時,規定物體的朝向爲(0,0,0)。


圖1:物體的初始朝向

現在開始旋轉物體,先繞物體座標系x軸(Xl)旋轉30度(這裏我規定沿着軸向軸的負方向看去,順時針旋轉爲正。你也可以自己規定,無所謂,遵守規定即可),注意,此時的物體座標系已經發生變化,見圖2,


圖2:物體繞物體座標系x軸(Xl)旋轉30度

然後再繞Yl軸旋轉90度,此時,你會發現Zl軸已經和了世界座標系X軸共軸。見圖3。

圖3:物體繞物體坐標系y軸(Yl)旋轉90度

好了,此時使用歐拉角來表示當前物體的方向的話,其座標應該是(30,90,0),對應旋轉順序是Xl->Yl->Zl。然而,有意思的是如果再繼續旋轉,現在按照Zl旋轉-40度,發現什麼了?咦,怎麼感覺已經繞過這個軸旋轉過一次了,雖然軸向相反?^_^,anyway,最後的座標應該是(30,90,-40),見圖4。

圖4:物體繞物體座標系z軸(Zl)旋轉-40度

好了,回到剛纔的疑惑上,既然感覺兩次旋轉是繞同一軸,如果我一開始考慮全部繞該軸的旋轉呢?即先繞Xl旋轉30-(-40)=70度,然後再繞Yl旋轉90度。^_^怎麼樣,已經到達和上次旋轉的效果了吧。這說明什麼?歐拉角座標(30,90,-40)和(30-(-40),90,0)等同。甚至座標(Rx1,90,Rz1)和(Rx2,90,Rz2)相同,只需滿足Rx1-Rz1=Rx2-Rz2。當Rx1-Rz1=Rx2時,Rz2==0,即在這種情況下任何再繞Zl軸的旋轉,都可以使用先繞Xl軸來做到。或者從另一個角度來說,物體現在本質上只能繞兩個軸的旋轉!即少了一個旋轉自由度!這就是3維中的萬向節死鎖現象。

概括起來可以這麼說,繞着物體座標系中某一個軸,比如y軸的+(-)90度的某次旋轉,使得這次旋轉的前一次繞物體座標系x軸的旋轉和這次旋轉的後一次繞物體座標系z軸的旋轉的兩個旋轉軸是一樣(一樣的意思是指在世界座標系中,兩次旋轉軸是共軸的但方向相反),從而造成一個旋轉自由度丟失。

實際上,使用3個量來表示3維空間的朝向的系統都會遭遇這個問題,除非用4個量來表示,如四元數。

2維的情況下歐拉角系統的萬向節死鎖導致瞭望遠鏡不能跟蹤飛行器的位置,用某人的話就是在某種座標系統下,空間中連續的的位置,不能用連續的座標值來表示。看看3維情況下是不是也是這樣?是不是不能跟蹤飛行器的朝向?

舉例:飛行器開始的方向是如圖1所示,對應歐拉角座標(0,0,0)。現在飛行器按照繞Xl 30度,然後繞Yl 40度,最後繞Zl 50度的順序旋轉,對應地,歐拉角座標來跟蹤的話是(30,40,50)。最後飛行器的朝向是如圖5所示。

圖5:座標(30,40,50)對應的朝向

現在,飛行器又開始繞Xl軸轉個1度。那麼現在,歐拉座標相應地變成(31,40,50)來跟蹤,這個座標對應的飛行器的朝向對嗎?實際上是對的,沒有問題,一切OK。

換個情況,飛行器從圖1初始位置按照繞Xl 30度,然後繞Yl 90度,最後繞Zl -40度的順序旋轉,對應地,歐拉角座標來跟蹤的話是(30,90,-40),最後飛行器的朝向是如圖4所示。現在,飛行器又開始繞Xl軸轉個1度。那麼現在,歐拉座標相應地變成(31,90,-40)來跟蹤,對嗎?比劃看看,使用這個座標,飛行器肯定對不上了!萬向節死鎖還是那麼討厭。

這也是爲什麼3維的情況下,歐拉角插值不適合用來表示旋轉插值(等角速度)的原因。使用四元數插值吧,可以參考:http://www.cnblogs.com/soroman/archive/2006/09/19/509597.html

發佈了2 篇原創文章 · 獲贊 17 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章