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