home > theory > math >

三維旋轉筆記:歐拉角/四元數/旋轉矩陣/軸角-記憶點整理

author:zhoulujun    hits:

在看《歐拉角、旋轉矩陣、四元數合輯 》,就之前所學做點筆記,以便以后再次復習。坐標系我們為了能夠科學的反映物體的運動特性,會在特定

在看《歐拉角、旋轉矩陣、四元數合輯 》,就之前所學做點筆記,以便以后再次復習。

先復習先基本概念

坐標系

我們為了能夠科學的反映物體的運動特性,會在特定的坐標系中進行描述,經常要用到以下幾種坐標系:

  1. 大地坐標系統

  2. 地心固定坐標系統

  3. 本地北東地坐標系統

  4. 機載北東地坐標系統

  5. 機體軸坐標系統

其中3、4、5都是我們建模、設計控制律時經常使用的坐標系,描述物體(剛體)位姿信息的6個自由度信息都是在這三個坐標系中產生的。

機體軸坐標系示意圖

機體軸坐標系的原點固連于飛行器重心,X軸指向機頭,Z軸指向機腹,X軸和Z軸都位于縱向對稱面內,而Y軸指向機身右側,與X、Z軸構成右手系,該坐標系我們用body的首字母b表示。

機載NED坐標系的原點也位于飛行器重心,其X軸指向橢球模型地理北極,Y軸指向橢球模型地理東方,Z軸沿橢球面法線向下,在絕大多數理解上都可以理解成通常的北向、東向、地向,通常該坐標系用n表示。

本地NED坐標系與機載NED坐標系唯一的不同就是原點坐標位于地面上任意一點,在分析物體的旋轉運動時一般不會用到。

旋轉關系

描述清楚姿態信息的方式有三種:歐拉角、旋轉矩陣、四元數

歐拉角

歐拉角是歐拉引入用來描述剛體姿態的三個角。歐拉角有靜態和動態兩種,靜態的是繞靜止的慣性坐標系三個軸進行旋轉,而動態的在旋轉過程中旋轉坐標軸會發生變化,除了第一次旋轉是繞慣性系的坐標軸進行之外,后續兩次旋轉都是動態的,并且前面旋轉的角度對后面的旋轉軸是有影響的,按照不同的軸順序進行旋轉得到的歐拉角也是不同的,旋轉變換可以歸結為若干個沿著坐標軸旋轉的組合,組合個數不超過三個并且兩個相鄰的旋轉必須沿著不同坐標軸,總共有12種旋轉方式,分別是XYZ、XZY、XYX、XZX、YXZ、YZX、YXY、YZY、ZXY、ZYX、ZXZ、ZYZ。雖然存在12種旋轉方式,但是每一種旋轉方式都存在萬向鎖現象。

航空領域通常采用的旋轉方式是ZYX順序,下圖是一架飛機按照ZYX組合進行旋轉產生歐拉角的過程,其中,ψ為偏航角,θ為俯仰角,φ為滾轉角。

航空領域通常采用的旋轉方式是ZYX順序

旋轉矩陣

旋轉矩陣反映了一個坐標系中的坐標在另一個坐標系中表示的轉換關系。矩陣的乘法,本質是一種運動—矩陣的實質就是將坐標整體線性變換——矢量的前移相當于坐標系的后移。這里推薦閱讀《透析矩陣,由淺入深娓娓道來—高數-線性代數-矩陣

關于平面向量的逆時針旋轉: 

已知任意一個向量OA=(x,y),把向量OA繞其起點O沿逆時針方向旋轉α角得到向量OB=(xcosα-ysinα,xsiaα+ycosα)。推導如下:

20170928205627767154890.png20170928205627856595825.png

旋轉矩陣公式機載NED坐標系到機體軸坐標系的歐拉轉換矩陣是
歐拉ZYX(ψ為偏航角,θ為俯仰角,φ為滾轉角,{B}是繞著{B}的軸旋轉的)變換拆解。只要θ≠±90°,歐拉角可以描述清楚任何剛體的姿態以及角運動信息

三維笛卡爾直角坐標系歐拉旋轉俯仰角為±90°公式

若使用X-Y-Z固定角法對姿態進行描述,首先將坐標系{B}和一個已知參考坐標系{A}重合。先將{B}繞XA旋轉γ角,再繞YA旋轉ψ角,最后繞ZA旋轉θ角。({B}是繞著{A}的軸旋轉的)

[公式]

這兩種方法得到的最終旋轉矩陣一致,即有對偶關系,記這樣得到的旋轉矩陣為:[r11,r21,r31;r12,r22,r32,r13,r23,r33]

[公式]=>[公式] 

其中atan2(y,x)表示在計算arctan(y/x)時,根據x和y的符號判別角度所在象限。注意當ψ=90°時 ,θ=0o,Ψ=90o,γ=atan2(r12,r22)

四元數

四元數是由愛爾蘭數學家Hamilton發明的。四元數是由1個實數加上3個復數組合而成,通常可以表示成w+xi+yj+zk或者(w,(x,y,z)),其中w、x、y、z都是實數,而i^2 = j^2 =k^2 = -1, i^0 = j^0 = k^0 = 1。那復數與四元數之間的關系、以及如何從復數這樣一個概念擴展到四元數呢?

空間中的子空間:一般而言,空間(維度>2)都存在更低維的子空間,比如二維空間中一維子空間,也就是直線;三維空間中的一維子空間和二維子空間,也就是直線和面。當超過三維的概念我們就很難去想象是什么樣子,但四維空間一定會存在三維子空間或二維子空間。我們這里會加一個前綴超(hyper)來形容這些空間,比如高維空間中的平面我們稱為超平面。

空間和子空間的映射:我們將二維空間表示為(x,y),當y=0時,其實可以看成是一維的,只不過它表示成(x,0)這種形式。推到四維,(w,x,y,z),當w=0時,(0,x,y,z)就是一個三維子空間,這也是為什么我們可以用單位四元數對三維向量進行操作,其實我們是將三維向量映射到四維的三維子空間(w=0,這種形式也成純四元數),然后對其進行旋轉,最終得到的向量結果依然是這個三維子空間中的,因而可以映射回三維空間。

廣義球:這里的球是廣義上的。我們在二維平面上,廣義球其實指代circle,三維空間上就是我們認知上的球,稱為two-sphere,而四維空間中廣義球其實是一個超球(hyper-sphere),又稱為three-sphere。單位向量其實就是廣義球上面的點,而單位四元數也就是three-sphere上面的點。

約束與特征向量:空間中的一點由x, y, z等參數來表示,一般來說參數的數量與維數相等,二維空間的點用{x, y}參數,四維空間的點用{x, y, z, w}參數。但是對于空間的點加以約束,則該會減少參數的數量,比如三維空間的點在某一單位球面上,原本三個參數{x, y, z}才能表達的點現在只需要兩個參數{u, v}就可以表達。如果{u, v}是單位向量,也可以稱{u, v}是{x, y, z}的特征向量。

四元數特性

  • 四元數(以后不特指四元數=單位四元數)是四維空間中一個超球上面的點,滿足w2+x2+y2+z2=1;而純四元數是四維空間在w=0時的一個子空間的點,形式為{0, q},特別注意的是純四元數與四元數是不同的概念。

  • 四元數是復數虛部擴展的結果,復數的虛部為1個,而四元數虛部有3個,且兩兩互相正交,其中實部是cosθ/2,而虛部為一個単位軸乘以sinθ/2。

  • 四元數自由度并沒有四個維度,由于存在w2+x2+y2+z2=1這個約束,它的自由度其實只有3,且每個四元數可以對應一個特征向量,即n。但請記住四元數并不是與特征向量一一對應的,后文會有說。

由于四元數存在于四維空間,所以如何利用低維信息去理解高維信息就顯得尤為重要。我們這里先用三維舉個例子,三維的球用代數表示為x2+y2+z2=1,雖然球上面的點是由x,y,z三個參數來確定,但實際上我們只需要兩個。假設取x和z表示,其中y可以通過x和z進行求解。那么,我們將y軸信息給隱去,只看投影平面,如下圖所示。這張圖的意思是,整個球在XOZ平面上投影是一個圓,當球面一點投影在圓上時,y=0;投影的位置位于圓內時,則分別兩種情況,y>0處于北半球,y<0處于南半球。所以我們僅通過投影后的圓即可還原出整個球體。

讓我們推廣到四維,w2+x2+y2+z2=1中取x、y和z來表示超球。如下圖所示,四維空間投影到三維超平面(w=0)可能是一個two-sphere。當投影點在整個two-sphere的邊緣時,w一定為0,值得一提的是在這個空間內的四元數是一個純四元數。當投影點落在two-sphere的內部時,也分為兩種情況,w>0和w<0。但是我們可以發現這兩種情況下對應的特征向量是一樣的,所以我們將旋轉矩陣向四元數轉換時,是有兩個對應值的,四元數的范圍是2倍覆蓋于3D旋轉(2:1 mapping)。


基本運算規律

對于四元數的運算法則,我們要清楚的有以下幾個,假設有兩個四元數分別為q1=(w1,(x1,y1,z1))和q2=(w2,(x2,y2,z2)),令v1 = (x1,y1,z1),v2= (x2,y2,z2),則

四元數的姿態表示

了解了四元數的基本運算規律后,我們來看下它如何表征姿態,假設存在一根旋轉軸u,有一個繞u軸旋轉σ角度的這么一個旋轉存在,那這時候代表這個旋轉的四元數是這樣子的:q=[cos(σ/2),u·sin(σ/2)]。其中u是旋轉軸的單位向量,q是一個單位四元數。

那上述這個四元數有什么用呢,它對任何向量施加以下算子運算后可以得到該向量繞u軸旋轉σ角度后的向量:w=qvq*

其實四元數表征旋轉關系,跟旋轉矩陣的表示方法類似,只不過它只需要4個元素,而旋轉矩陣需要9個元素。

四元數相比其他形式變換的優點:

  • 解決萬向節死鎖(Gimbal Lock)問題

  • 僅需存儲4個浮點數,相比矩陣更加輕量

  • 四元數無論是求逆、串聯等操作,相比矩陣更加高效

現在主流游戲或動畫引擎都會以縮放向量+旋轉四元數+平移向量的形式進行存儲角色的運動數據。看看旋轉矩陣和四元數

首先將坐標系{B}和一個已知參考坐標系{A}重合,將{B}繞單位矢量 [公式] 旋轉θ角。旋轉矩陣

[公式] =>[公式] 

其中vθ=1-cosθ

Def. 設$i^2=j^2=k^2=ijk=-1$,將ijk表示為直角坐標系,稱q=t+xi+yj+zk為一般四元數,其共軛復數 q=t-xi-yj=zk=?·(t2+x2+y2+z2)=-(q+iqi+jqj+kqk)/2

設q0=cos(θ/2) ,q1=kxSin(θ/2),q2=kysin(θ/2),,q3=kzsin(θ/2),那么:q02 + q12 + q32 = 1,且

[公式]

具體查看《機器人運動學:旋轉,D-H表示法與雅可比矩陣


歐拉角、旋轉矩陣、四元數之間相互轉換

先回顧一下這三個角運動的微分方程。


歐拉角角運動方程:

歐拉角角運動方程:

旋轉矩陣角運動方程:

旋轉矩陣角運動方程

四元數角運動方程:

四元數角運動方程:

推薦閱讀《歐拉角、旋轉矩陣、四元數角運動微分方程

四元數轉旋轉矩陣

已知四元數:q=(q1,q2,q2,q3)

旋轉矩陣為(利用羅德里格斯公式即可):

旋轉矩陣轉四元數

已知旋轉矩陣:[r11,r21,r31;r12,r22,r32,r13,r23,r33]

則求解四元數時根據的方法就是從四元數轉旋轉矩陣的公式中得到:

求解四元數時根據的方法就是從四元數轉旋轉矩陣的公式上式中是無法確定正負號的

四元數轉歐拉角

已知四元數:q=(q1,q2,q2,q3)

歐拉角為:

但是當β角度為90度時,四元數反向計算歐拉角時會出現奇點,是無法計算的。

因為這時候簡化后的四元數是這樣的:[.707·cos[(α-λ)/2],.707·[(α-λ)/2],.707·cos[(α-λ)?],.707·cos[(α-λ)?]]

所以atan2中后面那一項就變成了0:1-2×(q12^2+q22)=0
這時候我們通常令α=0,然后解出歐拉角的值。

歐拉角轉四元數:

已知歐拉角:α、β、γ

四元數為:


學習文章:

歐拉角、旋轉矩陣、四元數合輯 

歐拉角、旋轉矩陣、四元數角運動微分方程

機器人運動學:旋轉,D-H表示法與雅可比矩陣

四元數——基本概念

三維旋轉:歐拉角、四元數、旋轉矩陣、軸角之間的轉換

https://www.zhihu.com/question/47736315/answer/236808639

https://zhuanlan.zhihu.com/p/25936257





轉載本站文章《三維旋轉筆記:歐拉角/四元數/旋轉矩陣/軸角-記憶點整理》, 請注明出處:http://www.qsexmk.tw/html/theory/math/2019_0912_8149.html