歐拉角與萬向節死鎖(圖文版)

2021-01-14 泰鬥


萬向節死鎖(Gimbal Lock)問題上文中曾經說過,歐拉旋轉的順規和軸向定義,自然造就了「萬向節死鎖」問題。本文主要來探索它自然形成的原因。##陀螺儀首先,我們來了解Gimbal 究竟是個什麼玩意兒。下面來自維基百科中關於Gimbal的一段引述:---平衡環架(英語:Gimbal)為一具有樞紐的裝置,使得一物體能以單一軸旋轉。由彼此垂直的樞紐軸所組成的一組三隻平衡環架,則可使架在最內的環架的物體維持旋轉軸不變,而應用在船上的陀螺儀、羅盤、飲料杯架等用途上,而不受船體因波浪上下震動、船身轉向的影響。


Gimbal


上圖就是一個Gimbal裝置了,它是一個陀螺儀。中間有一根豎軸,穿過一個金屬圓盤。金屬圓盤稱為轉子,豎軸稱為旋轉軸。轉子用金屬製成,應該是了增加質量,從而增大慣性。豎軸外側是三層嵌套的圓環,它們互相交叉,帶來了三個方向自由度的旋轉。看著不停轉來轉去,有點暈,接下來看兩個靜態的。這兩張圖來自百度百科。


陀螺儀


中文注釋:


陀螺儀


其中Gimbal只代表陀螺儀裝置中的平衡環,顯然維基百科上將它解釋成「平衡環架」更為合理。##Pitch、Yaw、Roll在解釋陀螺儀的工作原理之前,我先介紹一些轉動的術語。在飛行器的航行中,進行XYZ三個方向旋轉的旋轉有專業的術語,見下圖:


Pitch、Yaw、Roll


沿著機身右方軸(Unity中的+X)進行旋轉,稱為pitch,中文叫俯仰。沿著機頭上方軸(Unity中的+Y)進行旋轉,稱為Yaw,中文叫偏航。沿著機頭前方軸(Unity中的+Z)進行旋轉,稱為Roll,中文叫桶滾。##陀螺儀的工作原理我們知道陀螺儀使用來測量平衡和轉速的工具,在載體高速轉動的時候,陀螺儀始終要通過自我調節,使得轉子保持原有的平衡,這一點是如何做到的?帶著這個問題,我們來看一下這個古老而又神秘的裝置的工作原理。為了解釋清楚問題,我自己畫了一個簡單的陀螺儀示意圖。(金屬圓盤我就省略了,醜點兒也就別管了。。)


陀螺儀示意圖


這裡,我把三個Gimbal環用不同的顏色做了標記,底部三個軸向,RGB分別對應XYZ。假設現在這個陀螺儀被放在一艘船上,船頭的方向沿著+Z軸,也就是右前方。- 現在假設,船體發生了搖晃,是沿著前方進行旋轉的搖晃,也就是桶滾。由於轉子和旋轉軸具有較大的慣性,只要沒有直接施加扭矩,就會保持原有的姿態。由於上圖中綠色的活動的連接頭處是可以靈活轉動的,此時將發生相對旋轉,從而出現以下的情形:


桶滾平衡


- 再次假設,船體發生了pitch搖晃,也就是俯仰。同樣,由於存在相應方向的可以相對旋轉的連接頭(紅色連接頭),轉子和旋轉軸將仍然保持平衡,如下圖:


俯仰平衡


- 最後假設,船體發生了yaw搖晃,也就是偏航,此時船體在發生水平旋轉。相對旋轉發生在藍色連接頭。如下圖:


偏航平衡


最終,在船體發生Pitch、Yaw、Roll的情況下,陀螺儀都可以通過自身的調節,而讓轉子和旋轉軸保持平衡。##陀螺儀中的萬向節死鎖現在看起來,這個陀螺儀一切正常,在船體發生任意方向搖晃都可以通過自身調節來應對。然而,真的是這樣嗎?假如,船體發生了劇烈的變化,此時船首仰起了90度(這是要翻船的節奏。。。。),此時的陀螺儀調節狀態如下圖:


死鎖開始


此時,船體再次發生轉動,沿著當前世界坐標的+Z軸(藍色軸,應該正指向船底)進行轉動,那麼來看看發生了什麼情況。


死鎖的陀螺儀


現在,轉子不平衡了,陀螺儀的三板斧不起作用了。它失去了自身的調節能力。那麼這是為什麼呢?之前陀螺儀之所以能通過自身調節,保持平衡,是因為存在可以相對旋轉的連接頭。在這種情況下,已經不存在可以相對旋轉的連接頭了。那麼連接頭呢?去了哪裡?顯然,它還是在那裡,只不過是,連接頭可以旋轉的相對方向不是現在需要的按著+Z軸方向。從上圖中,我們清楚地看到:- 紅色連接頭:可以給予一個相對俯仰的自由度。- 綠色連接頭:可以給予一個相對偏航的自由度。- 藍色連接頭:可以給予一個相對偏航的自由度。沒錯,三個連接頭,提供的自由度只對應了俯仰和偏航兩個自由度,桶滾自由度丟失了。這就是陀螺儀上的「萬向節死鎖」問題。##用小程序來重現萬向節死鎖問題首先,預設一下接下來的歐拉角變化順序。見下圖:


預設歐拉旋轉


上圖中,紅色框內的部分的列表,記錄了接下來歐拉角的增長變化過程。即它會從(0,0,0)變化到(90,0,0),再變化到(90,90,0),再變化到(90,180,0),再變化到(90,180,90),再變化到(90,180,180)。下圖是變化的過程演示。


YZ軸死鎖


現在可以看到:- 當先執行X軸旋轉90度,此時在執行Pitch(俯仰)變化。- 再在Y軸進行變化0-180度,此時在執行相對自身的Roll(桶滾)變化。- 再在Z軸進行變化0-180度,此時仍在執行相對自身的Roll(桶滾)變化。這裡所說的俯仰、桶滾、偏航都是相對自己局部坐標系的。這與上述的陀螺儀中出現的問題是一樣的,萬向節死鎖。也就是儘管歐拉角在XYZ三個軸向進行進動(持續增長或者減少),但是影響最終的結果,只對應了兩個軸向。##死鎖的過程解析在《Unity中歐拉旋轉》一文中我曾提到,是歐拉角順規和軸向的定義方式,造就了「萬向節死鎖」問題的自然形成。通過上述的例子,這裡作個詳細解釋。首先我們知道,由於Unity中歐拉旋轉的順規的定義,圍繞Z軸的進動最先執行,所以,Z軸是「嚴格保護」的一個軸,就是說,當先沿著Z軸進行進動時,無論此時的XY是什麼值,最終的結果,圍繞Z軸的進動始終造成相對自身執行桶滾變化。然而X、Y軸就不同了,我們先不考慮Y軸,假設其一直為0,先說X軸。如果Z軸也是保持為0,那麼圍繞X軸進動,最終的影響是預期的俯仰變化。如下圖:


YZ為0的X進動


然而當Z軸為90度時,圍繞X軸進動變成了偏航變化,如下圖:


Z先進動90的X進動


也就是說,歐拉角的X軸進動造成最後的變化結果,受到到了預先執行的Z軸進動的影響,它仍然會造成某個相對自身的軸向的變化,但是結果不唯一;同樣,歐拉角的Y軸進動,則受到了Z軸和X軸的影響,結果更加不唯一。然而,以上的過程執行,都是嚴格遵守歐拉角的順規和軸向定義的。某些時刻,這種不確定的結果,就可能造成某個軸向自由度的丟失。就拿下圖來說:


YZ軸死鎖


歐拉角Z軸的進動,最先執行,造成桶滾,這個沒問題。歐拉角Y軸的進動,最後執行,造成沿著歐拉旋轉前的Y軸旋轉,這也是根據定義執行。然而現在這種沿著Y軸的旋轉,同樣也被映射到了物體的桶滾變化。##總結總結來說,歐拉角的「萬向節死鎖」問題,是由於歐拉旋轉定義本身造成的。這種圍繞選旋轉前固定軸的先Z、再X、再Y的旋轉操作,與其最終所預期的三個軸向可以旋轉的結果並非一定是一對一的映射。某些情況下是多對一的映射,造成一些旋轉自由度的缺失,也就是「死鎖」。##建議對於寫代碼來說,你直接去改變Transform的歐拉角顯然是不合適的,通過本文也可以看到,這種結果幾乎是不可預測的。但是某些情況下,卻是可以預期的,就是你僅僅在一個軸向進動,其它兩個軸向保持為0,此時有效,並且直接修改歐拉角的代碼效率應該是比較高的。



相關焦點

  • 剛體運動學-最通俗易懂的理解萬向節死鎖
    在網上看了很多所謂的通俗易懂的理解萬向節死鎖的文章,甚至動畫。
  • 一文詳解四元數、歐拉角、旋轉矩陣、軸角如何相互轉換
    [5]給出了從XYZ順規提取歐拉角的方法、步驟、思路,[1]則給出了全部12種順規的歐拉角提取公式,但是沒有給一些細節注意事項。所以總結一下,根據[1]、[5]、[7]《Real Time Rendering 3rd Edition》4.2.2和自己的推導,從ZXY順規旋轉矩陣提取歐拉角的公式是([1]原文下標似乎有點小問題):注意到一點,注意到矩陣的每一個元素都是pitch angle
  • 三維旋轉:歐拉角、四元數、旋轉矩陣、軸角之間的轉換
    [5]給出了從XYZ順規提取歐拉角的方法、步驟、思路,[1]則給出了全部12種順規的歐拉角提取公式,但是沒有給一些細節注意事項。所以總結一下,根據[1]、[5]、[7]《Real Time Rendering 3rd Edition》4.2.2和自己的推導,從ZXY順規旋轉矩陣提取歐拉角的公式是([1]原文下標似乎有點小問題):
  • 頭條 | 一文詳解四元數、歐拉角、旋轉矩陣、軸角如何相互轉換
    [5]給出了從XYZ順規提取歐拉角的方法、步驟、思路,[1]則給出了全部12種順規的歐拉角提取公式,但是沒有給一些細節注意事項。所以總結一下,根據[1]、[5]、[7]《Real Time Rendering 3rd Edition》4.2.2和自己的推導,從ZXY順規旋轉矩陣提取歐拉角的公式是([1]原文下標似乎有點小問題):注意到一點,注意到矩陣的每一個元素都是pitch angle
  • 多體動力學裡的歐拉角解析
    下面三張動圖形象的表示了歐拉角的旋轉方式。第一張是繞x軸旋轉pitch,第二張繞y軸旋轉yaw,第三張是繞z軸旋轉roll。廣義上來說,歐拉角共有24種方案,在車輛工程中通用的歐拉角為「3-2-1」。
  • 組合導航科普(4):什麼是歐拉角?
    其中,歐拉角將姿態描述分解為三個連續的轉動過程,每次旋轉所圍繞的軸與前後旋轉所圍繞的軸正交。  歐拉角常用於描述載體的姿態,通常是載體坐標系相對於對應的當地導航坐標系的姿態。假設載體坐標系的坐標軸定義如下(符合右手準則):y軸為前向(即正常航行的方向),z軸為天向(即向上方向),x軸為右向。
  • [飛控]剛體運動學-歐拉角模型
    剛體運動學模型研究的是與力無關的過程,只研究位置、速度、姿態、角速度等參量,常以質點為模型。為什麼呢?因為,我們傳感器只能測量機體角速度,但是我們控制需要知道姿態變化率。如果有了機體角速度與姿態變化率的關係,我們就可以通過傳感器數據得到姿態。我們之前反覆提過,姿態有很多種表達,所以你在全權老師的書上也會看到不同形式的剛體運動學模型。
  • (加餐)歐拉角及矩陣旋轉
    我們進一步分析Vmicrodoppler結構,也就需要引入歐拉角(Euler Angles)Euler Angles剛體運動中,繞某個軸的旋轉運動由旋轉軸及旋轉角度確定,並且角速度與旋轉軸同向。定義為歐拉角,給定一組旋轉次序,歐拉角是描述改組次序下旋轉(內旋)的有利工具。一個典型的旋轉例子如圖3所示,變換步驟為Step1,Step2,,Step3。
  • 「飛控」姿態誤差(一)-歐拉角做差
    而且歐拉角是有隱藏條件的,就是旋轉順序,同樣是三個角 (10,20.30) ,x-y-z,y-x-z順序可是兩個不同的旋轉,如果我不告訴你它的旋轉順序,那其實它就是沒用的三個數,因為它根本就沒法還原成旋轉。但是我就沒見過有對控制器做先後順序處理的,roll,pitch,yaw的控制器都是同時啟動,沒有順序之分。所以,憑什麼姿態誤差可以用歐拉角相減!!!
  • 萬向集團魯冠球:演繹鄉企十年神話
    1979年,萬向嘗試著專業生產進口汽車的萬向節,馬上就感到了技術上的巨大壓力。通過聘請技術廠長,引進技術人員,更新設備等一系列措施,萬向在全國56家萬向節生產企業檢查評比中奪得了冠軍,成了國家萬向節定點生產專業廠之一。這極大地增強了魯冠球及其同事們的自信心。
  • MEMS陀螺儀需組合其他傳感器使用 歐拉角和四元數表述飛行姿態
    MEMS陀螺儀需組合其他傳感器使用 歐拉角和四元數表述飛行姿態 據金良介紹,無人機飛行狀況輸出值有四元素、歐拉角、方向餘弦矩陣三個,其中四元素的優勢在於方便計算差值,但遺憾的是很難直接表示旋轉,而方向餘弦矩陣的係數太多,因此很難插值;歐拉角雖然相對而言表達更加簡單,不過,其存在萬向鎖的問題。
  • 萬向自由新體驗:全面轉變你的清潔方式 戴森Omni-glide萬向吸塵器...
    今日,戴森Omni-glide萬向吸塵器於上海重磅發布。作為戴森迄今最靈活、最輕的吸塵器,戴森Omni-glide萬向吸塵器顛覆了傳統單向吸塵清潔方式,在使用戴森首款萬向軟絨滾筒吸頭的同時,採用了全新的直線機身設計配合點按式電源開關,全方位地轉變你的清潔方式。針對現代都市緊湊的生活空間和複雜的家居布局,戴森Omni-glide萬向吸塵器可在不挪動地面障礙物的情況下實現萬向清潔,並可讓你自由變換手持姿勢,深入打掃家具底部及縫隙等狹小空間。
  • 戴森發布Omni-glide萬向吸塵器,搭配首款萬向軟絨滾筒吸頭
    戴森Omni-glide萬向吸塵器於上海重磅發布。作為戴森迄今最靈活[1]、最輕[2]的吸塵器,戴森Omni-glide萬向吸塵器顛覆了傳統單向吸塵清潔方式[3],在使用戴森首款萬向軟絨滾筒吸頭[4]的同時,採用了全新[5]的直線機身設計配合點按式電源開關,全方位地轉變你的清潔方式。
  • 萬向錢潮控股股東繼續增持
    中國證券網訊(記者 孔子元)萬向錢潮6日晚間公告,萬向集團公司根據2017年6月28日披露的增持計劃,於2017年7月14日至2017年8月4日期間,增持公司股份27,531,546股,佔公司總股本的1%。
  • 支付寶高級Java現場面試37題:頁鎖+死鎖+集群+雪崩+負載等
    死鎖,死鎖原因    5. 頁鎖、樂觀鎖、悲觀鎖?    6. 樂觀鎖如何保證線程安全?    7. 用過線程池嗎,對應的好處,如何用?    8. 兩個10G的文件,裡面是一些url,內存只有1G,如何將這兩個文件合併,找到相同的url?
  • 萬向區塊鏈蘇州研究院正式成立
    江蘇省委常委、蘇州市委書記許昆林,江蘇省商務廳廳長趙建軍為獅山商務創新區揭牌蘇州市委副書記、市長李亞平,省發改委副主任唐曉東為獅山金融服務業集聚區授牌萬向區塊鏈董事長兼總經理肖風博士應邀出席了活動,並與蘇州高新區黨工委副書記、區委副書記宋長寶共同啟動
  • 全新清潔方式來襲,戴森Omni-glide萬向吸塵器國內首發
    今日,戴森Omni-glide萬向吸塵器於上海重磅發布。作為戴森迄今最靈活、最輕的吸塵器,戴森Omni-glide萬向吸塵器顛覆了傳統單向吸塵清潔方式,在使用戴森首款萬向軟絨滾筒吸頭的同時,採用了全新的直線機身設計配合點按式電源開關,全方位地轉變你的清潔方式。針對現代都市緊湊的生活空間和複雜的家居布局,戴森Omni-glide萬向吸塵器可在不挪動地面障礙物的情況下實現萬向清潔,並可讓你自由變換手持姿勢,深入打掃家具底部及縫隙等狹小空間。