什么是歐拉角(Eular Angles)?
歐拉角是瑞士數(shù)學(xué)家萊昂哈德·歐拉(Leonhard Euler)用來描述剛體在三維空間中取向的方法。簡單來說,就是任何一個物體的取向,都可以用3個有次序的旋轉(zhuǎn)角度來表示。
歐拉在三維空間中定義了一個靜止不動的參考系,即慣性系。還定義了一個運動的坐標系,即物體坐標系。慣性系與物體坐標系的區(qū)別在于,當物體取向發(fā)生改變之后,物體坐標系也隨之改變,而慣性系卻不變。
例如,我們認為北極星的位置對于地球上的任意觀察點都是不變的,因此可以看作一個靜止的參考系。而基于公路上一輛行駛的汽車的坐標系,因為汽車的轉(zhuǎn)彎而不斷改變,是一個物體坐標系。
歐拉角的三個旋轉(zhuǎn)是繞物體坐標系的三個軸復(fù)合形成。為何不使用慣性系?因為物體坐標系在數(shù)學(xué)處理上是簡單的。為了描述一架飛機的取向,定義航偏角為yaw, 俯仰為pitch, 橫滾為roll。假如分別使用矩陣I1, I2, I3來表示這三個角度,那么飛機繞自身先轉(zhuǎn)yaw角,再繞pitch角,最后繞roll角的結(jié)果可用I3*I2*I1來表示。 有關(guān)矩陣,看這里 。
通常來說,一個物體的取向用歐拉角來表示是簡單有效的。但是在某種特殊的情況下,歐拉角將失效,形成所謂的“萬向節(jié)死鎖”。
一個簡單直觀的例子是炮塔模型。假設(shè)地面上的一個炮塔有兩個旋轉(zhuǎn)軸:Y垂直于地面,使炮塔可以平行地面360度旋轉(zhuǎn)(正北設(shè)為0度);X平行于地面,使炮口可以繞著它上下90度旋轉(zhuǎn)(平行地面使設(shè)為0度)。現(xiàn)在,天空中的任意一點就可以使用兩個坐標的度數(shù)來表示了!
這時,一架敵機從正東面飛來,我們轉(zhuǎn)動炮塔對準它,目前的坐標是(10,90)。因為飛機飛行方向不變,所以Y固定為90,而X由于飛機距離的接近而增大。當飛機恰好飛到炮塔頂端時,即X的角度也達到90度時,飛機忽然向南飛行!我們必須立即改變炮塔朝向,否則即將都丟失目標。但是我們發(fā)現(xiàn),無論是轉(zhuǎn)動X軸還是Y軸,我們都無法讓炮塔轉(zhuǎn)向南方了,即炮塔在此時丟失了一個自由度!
為什么不把Y轉(zhuǎn)動到180度的位置繼續(xù)跟蹤呢?注意此時炮塔的狀態(tài): 炮口已經(jīng)對準炮臺的正上方, 平行于Y軸,無論Y軸怎樣轉(zhuǎn)動,炮口都改變不了朝向的, 即炮臺的物體坐標系不會變化了。能轉(zhuǎn)動的只有X軸,但是這樣一來,炮口又回到東面了。
歐拉角的萬向節(jié)死鎖就是這樣:我們依次繞物體坐標系的X軸、Y軸、Z軸旋轉(zhuǎn),當Y軸旋轉(zhuǎn)了90度之后,Z就會指向原來的X軸。這樣一來,我們事實上只繞了X軸和Y軸兩個軸旋轉(zhuǎn),第三根軸的自由度就丟失了!(值得指出的是,我們在描述的時候使用的是世界坐標系的x, y, z軸,但是旋轉(zhuǎn)的時候卻是使用繞物體的)
萬向鎖的一個有趣實驗是當先把飛機Yaw 45度,再Pitch 90度,與先Pitch 90度,再Roll 45度的結(jié)果完全相同。 這個現(xiàn)象也叫歐拉角的別名現(xiàn)象(同一個慣性系下同一個值有不同的表示方法),這也是很糟糕的。
正因為歐拉角在三維空間中有死鎖的問題,所以科學(xué)家尋找了新的表示空間取向的方法。以后再詳細說明。
理解:萬向節(jié)死鎖是由于旋轉(zhuǎn)后產(chǎn)生自由度丟失而產(chǎn)生的問題。解決辦法是通過四元數(shù)