欧拉角、万向节死锁理解
歐拉角、萬向節死鎖理解
- 歐拉角理解
- 舉例講解
- 順規、內旋與外旋
- 順規
- 內旋與外旋
- 總結
- 東北天坐標系
- 數學表示
- 公式推導
- 舉例計算
- 萬向節死鎖理解
- 說明
- 形象表示
- 數學表示
歐拉角理解
舉例講解
歐拉角用三次獨立的繞確定的軸旋轉角度來表示姿態。如下圖所示
經過三次旋轉,旋轉角度分別為α\alphaα、β\betaβ 和 γ\gammaγ,由初始的xyzxyzxyz坐標系得到了最終的x′′′y′′′z′′′x'''y'''z'''x′′′y′′′z′′′坐標系。這就是歐拉角來表示姿態的方法。
如圖所示為航空航天中常用的歐拉角,圖中的ψ\psiψ、θ\thetaθ和?\phi? 對應于上圖中的α\alphaα、β\betaβ 和 γ\gammaγ。
航空航天中常用的歐拉角順規、內旋與外旋
上面所舉的例子中,旋轉的順序是按照 z?y?xz-y-xz?y?x 的順序來進行旋轉的,并且每一次旋轉都是繞自身軸(運動軸)進行的, 這只是歐拉角的一種表示方式。歐拉角共有12種表示方式。
順規
順規即歐拉角三次轉動的順序規定,歐拉角一共有12種順規
三個軸只用兩個的:Proper Euler angles (z?x?z, x?y?x, y?z?y, z?y?z, x?z?x, y?x?y)
三個軸全都用的:Tait-Bryan angles (x?y?z, y?z?x, z?x?y, x?z?y, z?y?x, y?x?z)
上文舉例所用的 z?y?xz-y-xz?y?x 是三個軸都用的一種順規,即 先繞zzz軸旋轉,再繞yyy軸旋轉,最后繞xxx軸旋轉。
內旋與外旋
根據繞旋轉軸的不同,可以分為內旋和外旋。
內旋 Intrinsic rotations:繞運動軸
外旋 Extrinsic rotations:繞固定軸
上文所舉的例子每次旋轉都是繞上一次旋轉所新產生的坐標軸旋轉的(這句話有點繞),比如第二次旋轉繞的是y′′y''y′′而不是固定的坐標軸yyy。所以是繞運動軸,即內旋。
- 如下圖所示,每一次旋轉都是繞藍色的固定軸旋轉
- 如下圖所示,每一次旋轉都是繞紅色(第一張圖)、綠色(第二張圖)、紫色(第三張圖)的運動軸旋轉
這里圖片應引用了臺大林沛群老師講解的機器人運動學。
在繞軸旋轉的時候,順規有12種,內外旋有2種,但是一般情況下,歐拉角都是說的繞自身軸(運動軸)旋轉,即 內旋 。所以歐拉角共有 1×12=121\times12=121×12=12 種表示方式。
總結
首先說一個很有意思卻很不直觀的結論:三次繞固定軸旋轉的最終姿態和以相反順序三次繞運動軸旋轉的最終姿態相同。
一般情況下,每一個領域有自己默認的歐拉角定義,也就是24種的其中之一。比如經典力學中使用zxzzxzzxz,量子力學使用的是zyzzyzzyz,航空航天使用zyxzyxzyx或zxyzxyzxy。所以在跨行業或者跨模塊協作的時候,一定要問清楚對方是哪一種歐拉角。
東北天坐標系
我在調一款九軸姿態傳感器的時候,看到這樣的表述:
這里面東北天坐標系是指,旋轉前的xyzxyzxyz坐標軸與東北天這三個方向是對應的,即xxx軸指向東方,yyy軸指向北方,zzz軸指向天空。
或者這么理解:當計算出的歐拉角的 α=0,β=0,γ=0\alpha=0,\beta=0,\gamma=0α=0,β=0,γ=0 的時候,xxx軸指向東方,yyy軸指向北方,zzz軸指向天空。如下圖所示
數學表示
公式推導
以 z?y?xz-y-xz?y?x 順規和繞自身軸(運動軸)旋轉為例,介紹一下歐拉角與旋轉矩陣的關系。
規定:
先繞 zzz 軸旋轉 α\alphaα ; 再繞 yyy 軸旋轉 β\betaβ ; 再繞 xxx 軸旋轉 γ\gammaγ
用 ccc 表示 coscoscos ,用 sss 表示 sinsinsin
繞 zzz 軸旋轉 α\alphaα 所產生的旋轉矩陣為
R1=[cα?sα0sαcα0001]R_1=\begin{bmatrix} c\alpha & -s\alpha & 0 \\ s\alpha & c\alpha & 0 \\ 0 & 0 & 1 \end{bmatrix} R1?=???cαsα0??sαcα0?001????
繞 yyy 軸旋轉 β\betaβ 所產生的旋轉矩陣為
R2=[cβ0sβ010?sβ0cβ]R_2=\begin{bmatrix} c\beta & 0 & s\beta \\ 0 & 1 & 0 \\ -s\beta & 0 & c\beta \end{bmatrix} R2?=???cβ0?sβ?010?sβ0cβ????
繞 xxx 軸旋轉 γ\gammaγ 所產生的旋轉矩陣為
R3=[1000cγ?sγ0sγcγ]R_3=\begin{bmatrix} 1 & 0 & 0 \\ 0 & c\gamma & -s\gamma \\ 0 & s\gamma & c\gamma \end{bmatrix} R3?=???100?0cγsγ?0?sγcγ????
繞自身軸(運動軸)轉動時,先轉動的放在前面,求得旋轉矩陣為
RZYX=R1R2R3=[cαcβcαsβsγ?cγsαsαsγ+cαcγsβcβsαcαcγ+sαsβsγcγsαsβ?cαsγ?sβcβsγcβcγ]\begin{aligned} R_{ZYX} &=R_1 R_2 R_3 \\ &=\begin{bmatrix} c\alpha c\beta & c\alpha s\beta s\gamma - c\gamma s\alpha& s\alpha s\gamma + c\alpha c\gamma s\beta \\ c\beta s\alpha & c\alpha c\gamma + s\alpha s\beta s\gamma & c\gamma s\alpha s\beta - c\alpha s\gamma \\ -s\beta & c\beta s\gamma & c\beta c\gamma \end{bmatrix} \end{aligned}RZYX??=R1?R2?R3?=???cαcβcβsα?sβ?cαsβsγ?cγsαcαcγ+sαsβsγcβsγ?sαsγ+cαcγsβcγsαsβ?cαsγcβcγ?????
舉例計算
假設先對 zzz 軸旋轉 45°45°45° ,再對 yyy 軸旋轉 30°30°30° ,最后對 xxx 軸旋轉 60°60°60°
計算得到最終結果為
RZYX=R1R2R3=[0.61240.30620.17680.61240.65970.176800.750.4330]\begin{aligned} R_{ZYX} &=R_1 R_2 R_3 \\ &=\begin{bmatrix} 0.6124 & 0.3062 & 0.1768 \\ 0.6124 & 0.6597 & 0.1768 \\ 0 & 0.75 & 0.4330 \end{bmatrix} \end{aligned}RZYX??=R1?R2?R3?=???0.61240.61240?0.30620.65970.75?0.17680.17680.4330?????
萬向節死鎖理解
說明
歐拉角表示姿態的時候,會出現萬向節死鎖的情況
當我使用傳感器(維特智能WT901c-485)讀取角度的時候,在ZYXZYXZYX的順規下,當pitch角度為90或-90的時候,roll和yaw角度會亂飄,這就是遇到了萬向節的死鎖。
不同的順規死鎖的情況不一樣,本文僅以ZYXZYXZYX說明死鎖的情況。
形象表示
我們以手機為例,說明一下萬向節死鎖的情況
注意,歐拉角表示姿態時,只能旋轉三次,這是理解死鎖的前提!
首先這是一個手機,我們對其建立坐標系,平行于手機長邊是 XXX 軸,平行于手機短邊是 YYY 軸,垂直于桌面是 ZZZ 軸。我們按照 ZYXZYXZYX 的順規,對手機進行旋轉
這時候重點來了!!!
我們發現,這樣旋轉過后,手機的長邊是與桌面(地面)垂直的,手機的短邊是與桌面(地面)平行的。并且,無論第一步轉 ZZZ 軸轉了多少度,第三步轉 XXX 軸轉了多少度,手機長邊與短邊都是這個狀態。
這就是歐拉角表示角度時的“萬向節死鎖”現象,按理說歐拉角可以表示三個自由度,即三個方向的旋轉。但是在這種情況下,只要β=±90°\beta=\pm90°β=±90°,無論 α\alphaα與γ\gammaγ怎么取值,手機最終的長邊都會與地面垂直,這就好像少了一個自由度,只有2個自由度,所以稱之為“萬向節死鎖”。
那么為什么會出現這種情況呢?
一種感性的理解是這樣:我們在第二步旋轉的時候,將旋轉后的 X′′X''X′′ 軸與旋轉之前的 Z′Z'Z′ 軸重合(這個我在上面旋轉演示的時候加粗說明了)。
而第一步旋轉是繞 Z′Z'Z′ 軸旋轉的,第三步旋轉是繞 X′′X''X′′ 軸旋轉的,所以兩軸重合意味著兩次旋轉繞的是同一個軸,所以說,三個自由度變為了兩個自由度。
數學表示
接下來我們從數學的角度來理解一下死鎖為什么會發生,結合上文的形象表示,理解起來更容易。
我們在上文已經求了在 ZYXZYXZYX 順規下的旋轉矩陣為
RZYX=R1R2R3=[cαcβcαsβsγ?cγsαsαsγ+cαcγsβcβsαcαcγ+sαsβsγcγsαsβ?cαsγ?sβcβsγcβcγ]\begin{aligned} R_{ZYX} &=R_1 R_2 R_3 \\ &=\begin{bmatrix} c\alpha c\beta & c\alpha s\beta s\gamma - c\gamma s\alpha& s\alpha s\gamma + c\alpha c\gamma s\beta \\ c\beta s\alpha & c\alpha c\gamma + s\alpha s\beta s\gamma & c\gamma s\alpha s\beta - c\alpha s\gamma \\ -s\beta & c\beta s\gamma & c\beta c\gamma \end{bmatrix} \end{aligned}RZYX??=R1?R2?R3?=???cαcβcβsα?sβ?cαsβsγ?cγsαcαcγ+sαsβsγcβsγ?sαsγ+cαcγsβcγsαsβ?cαsγcβcγ?????
現在把 β=90°\beta=90°β=90° 帶進去看一下旋轉矩陣有什么結果,此時旋轉矩陣變成了這樣。
RZYX=R1R2R3=[0?s(α?γ)c(α?γ)0c(α?γ)s(α?γ)?100]\begin{aligned} R_{ZYX} &=R_1 R_2 R_3 \\ &=\begin{bmatrix} 0 & -s(\alpha - \gamma)& c(\alpha-\gamma) \\ 0 & c(\alpha-\gamma) & s(\alpha-\gamma) \\ -1 & 0 & 0 \end{bmatrix} \end{aligned}RZYX??=R1?R2?R3?=???00?1??s(α?γ)c(α?γ)0?c(α?γ)s(α?γ)0?????
可以發現,此時的 α\alphaα 和 γ\gammaγ 其實是一個變量 α?γ\alpha-\gammaα?γ,這也從另一個角度說明了在這種情況下,少了一個自由度,所以出現了“萬向節死鎖”。
總結
以上是生活随笔為你收集整理的欧拉角、万向节死锁理解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 常用时间汇总
- 下一篇: 一次 JDBC 与 MySQL 因 “C