方向余弦矩陣(DCM)簡介
——定向運動學簡介——
1 前言
這篇文章是翻譯Starlino_DCM_Tutorial.pdf而來,
鏈接為:http://www.starlino.com/dcm_tutorial.html,各位看官可以對照着原文看,翻譯不盡人意之處,請各位輕拍!
這篇文章主要是介紹無人機方向余弦矩陣相關的知識,另外增加了定向運動學的主題。文章先通過一些理論介紹,然后結合一些實際的例子展開討論。該文章的算法是通過融合陀螺儀和加速度計數據,利用方向余弦矩陣(DCM、Direction Consine Matrix)的方法,以估計設備在空間中的方位。
符號說明:向量以粗體文本標記 - 例如,“v”是向量,“v”是標量。
2 DCM矩陣
通常來說,定向運動學處理的問題為計算本體坐標系相對全局坐標系的相對方位。我們將本體坐標系定義為Oxyz,另外一個全局坐標系定義為OXYZ,兩坐標系的具有相同的原點O,如圖 1所示。本體坐標系的x、y、z軸對應的單位向量分別為i,j,k;全局坐標系X、Y、Z軸對應的單位向量分別為I,J,K。
圖1坐標系定義
因此,通過定義,全局坐標系下的單位向量I,J,K表示形式可寫為:
IG = {1,0,0} T, JG={0,1,0} T , KG = {0,0,1} T
相應的,本體坐標系下的單位向量i,j,k表示形式可寫為:
iB = {1,0,0} T, jB={0,1,0} T , kB = {0,0,1} T
現在讓我們看看是否可以在全局坐標系下表示向量i,j,k。讓我們以向量i為例,寫出它在全局坐標系下的坐標:
iG = {ixG , iyG , izG} T
作為示例,讓我們分析X坐標軸的分量ixG,它的值為i向量投影到全局坐標系下X軸上的長度。
ixG = |i| cos(X,i) = cos(I,i)
其中,|i|為單位向量i的范數(長度),cos(I,i)為向量I與i形成的夾角余弦,由於I與i均為單位向量,上式又可寫成:
ixG = cos(I,i) = |I||i| cos(I,i) = I.i
其中,I.i為I與i的標量(點)乘積,為了計算標量積I.i。標量積在哪個坐標系中測量這些矢量並不重要,只要他們在同一個系統中表示,因為旋轉不改變矢量的夾角。因此:I.i = IB.iB = IG.iG = cos(IB.iB) = cos(IG.iG) ,為了表示簡便,本文一下部分將忽略I.i , J.j , K.k以及 cos(I,i), cos(J,j), cos(K,k)的上標。類似地,我們可以得出iyG = J.i , izG=K.i 。
所以現在我們可以將全局坐標系中的向量i寫為:iG= { I.i, J.i, K.i}T
此外,類似的可以得出jG= { I.j, J.j, K.j} T , kG= { I.k, J.k, K.k} T
現在本體坐標系下的 i, j, k在全局坐標系下有一套完整的表示,我們可以將這些向量組成一個方便的矩陣:
Eq.1. 1
該矩陣為方向余弦矩陣,很明顯,它是由本體坐標系和全局坐標系單位向量所有可能組合的角度的余弦組成。
類似的,在本體坐標系中表示全局坐標系統的單位向量 IB, JB, KB本質上是對稱的,並且可以簡單的將I, J, K和 i, j, k交換實現,其結果是:
IB= { I.i, I.j, I.k}T , JB= { J.i, J.j, J.k}T , KB= { K.i, K.j, K.k}T
組成矩陣的形式為:
Eq.1. 2
現在很容易注意到DCMB = (DCMG)T或者DCMG = (DCMB)T,換句話說,兩個矩陣是可以相互轉換,我們將會在后面使用這一重要屬性。
另外,我們可以發現DCMB. DCMG = (DCMG)T .DCMG = DCMB. (DCMB)T = I3 ,其中I3是一個3*3的單位矩陣,換句話說DCM是正交的Eq.1. 3
其中, iGT. iG = | iG|| iG|cos(0) = 1 iGT. jG = 0
DCM矩陣(通常也稱為旋轉矩陣)在定向運動學中具有很高的重要性,因為它定義了一個坐標系相對於另一個坐標系的旋轉。如果我們知道任意向量在本體坐標系中的坐標,那么久可以利用DCM矩陣確定它在全局坐標系中的坐標,反之亦然。
現在假設在本體坐標系中的向量rB= { rxB, ryB, rzB} T,讓我們通過已知的旋轉矩陣 DCMG確定其在全局坐標系中的坐標rG = { rxG , ryG , rzG } T。
先從第一個坐標分量rxG開始,rxG = | rG| cos(IG,rG) ,
根據定義,旋轉是這樣的變換,其不改變向量的尺度,並且不改變經過相同旋轉的兩個向量之間的角度,因此如果我們在不同的旋轉坐標系中表示一些向量,則向量之間的范數和角度將不改變:| rG| = | rB| , | IG| = | IB| = 1 並且cos(IG,rG) = cos(IB,rB) 。根據這一屬性可得出:
rxG = | rG| cos(IG,rG) = | IB || rB| cos(IB,rB) = IB. rB = IB. { rxB, ryB, rzB} T
上式代入IB= { I.i, I.j, I.k}T
rxG = IB. rB = { I.i, I.j, I.k}T . { rxB, ryB, rzB} T = rxB I.i + ryB I.j + rzB I.k
以相同的方式,可以表示出:
ryG = rxB J.i + ryB J.j + rzB J.k
rzG = rxB K.i + ryB K.j + rzB K.k
最后,讓我們以一個更緊湊的矩陣形式寫:
Eq.1. 4
因此,DCM矩陣可以用於將在一個坐標系B中表示的任意向量rB轉換為旋轉的坐標系G。
相同的邏輯,可以證明逆邏輯可以表示為:
Eq.1. 5
最后:
DCMB rG = DCMB DCMG rB = DCMGT DCMG rB = I3 rB = rB
3 角速度
到目前為止,我們已經有一個方法來定義一個坐標系相對於另一坐標系的方向旋轉矩陣,DCM矩陣,它允許我們使用Eq.1.4和Eq.1.5容易地來回轉換全局和本體坐標系。在本節中,我們將旋轉矩陣作為時間的函數進行分析,這將有助於我們建立更新基於角速率的DCM矩陣的規則。
假設任意一旋轉向量r,並將其關於時間t的關系定義為 r(t)。現在考慮很小的時間間隔dt,並做出如下符號:r = r (t) , r’= r (t+dt) 和dr = r’ – r:
圖2 r(t)
假設非常小的時間間隔內dt→0,矢量r以單位矢量u為旋轉軸旋轉了角度dθ到r’, u單位矢量垂直於由r和r’形成的平面,由於u為單位矢量,所以|u| = 1並且與 r x r’同向,我們可以通過如下推導得出:
u = (r x r’) / |r x r’| = (r x r’) / (|r|| r’|sin(dθ)) = (r x r’) / (|r|2 sin(dθ)) Eq.2. 1
因為旋轉並不會改變一個矢量的長度,所以有| r’| = |r|。
矢量r的線速度向量可以定義為:
v = dr / dt = ( r’ – r) / dt Eq.2. 2
請注意,由於我們的dt→0因此向量r和dr之間的角度(我們稱之為α)可以從由r,r’和dr構成的等腰三角形中找到。
α = (π – dθ) / 2 ,由於 dθ→0,所以α→π/2,同時v⊥r。
現在我們可以定義角速率矢量,表示角度θ 的變化速率以及旋轉軸,定義如下:
w = (dθ/dt ) u Eq.2. 3
將Eq.2.1代入上式可得:
w = (dθ/dt ) u = (dθ/dt ) (r x r’) / (|r|2 sin(dθ))
當dθ→0時,代入上式可得:
w = (r x r’) / (|r|2 dt) Eq.2. 4
將r’ = r + dr代入上式,又由於dr/dt = v , r x r = 0 ,我們可推導出:
w = (r x (r + dr)) / (|r|2 dt)
= (r x r + r x dr)) / (|r|2 dt)
= r x (dr/dt) / |r|2
w = r x v / |r|2 Eq.2. 5
上式建立了由已知線速度 v推導角速度的過程,通過矢量的叉乘特性,很容易推導出:
v = w x r Eq.2. 6
4 陀螺儀及角速度矢量
三軸MEMS陀螺儀是一個能感應裝置軸運動的裝置,如果我們將該裝置應用於本體坐標系中,然后分析一類全局坐標系(地球坐標系)的矢量,例如指向天的矢量K 或者指向北的矢量I,對於設備內的觀察者來說,這些向量將圍繞着設備中心旋轉。假設 wx , wy , wz分別為軸 x, y , z的對應的陀螺儀的角速度速輸出,單位為rad/s。如果我們以規則的小時間間隔dt查詢陀螺儀,則陀螺儀輸出告訴我們的是在該時間間隔期間,地球圍繞陀螺儀的x軸旋轉角度為dθx = wxdt,圍繞y軸旋轉角度為dθy = wydt並且關於z軸旋轉角度 dθz = wzdt。這些旋轉矢量可以用角速率矢量表征:
wx = wx i = {wx , 0 , 0 }T , wy = wy j = { 0 , wy , 0}T , wz = wz k = { 0 , 0, wz }T
其中, i,j,k 分別對應着本地坐標系各軸的方向向量。每個軸的旋轉將會產生一定的線性位移,線性位移可表示為:
dr1 = dt v1 = dt (wx x r) ; dr2 = dt v2 = dt (wy x r) ; dr3 = dt v3 = dt (wz x r)
將三個線性位移相加可得:
dr = dr1 + dr2 + dr3 = dt (wx x r + wy x r + wz x r) = dt (wx + wy + wz) x r
有此產生的線速度可表示為:
v=dr/dt=(wx + wy + wz) x r = w x r這里引入w = wx+wy+wz= {wx , wy , wz }
上式類似於式Eq.2.6, 並且表明由角旋轉矢量wx , wy , wz表征的軸x,y,z的三個小旋轉的組合等效於由角旋轉矢量w = wx + wy + wz = {wx , wy , wz }。請注意,我們強調這些都是小旋轉,因為一般來說,當你結合大旋轉,旋轉的順序執行變得重要,你不能簡單地得出上述結論。我們的主要假設是,讓我們通過使用Eq.2.6從線性位移到旋轉的dt非常小,因此旋轉dθ和線性位移dr也很小。實際上,這意味着陀螺儀查詢間隔dt越大,我們的累積誤差越大,我們稍后將處理這個誤差。
5 基於6DOF或9DOF IMU傳感器的DCM濾波算法
在本文的上下文中,6DOF設備是由3軸陀螺儀和3軸加速度計組成的IMU設備。9DOF設備是3軸陀螺儀,3軸加速度計和3軸磁力計的IMU設備。現在將基於右手定則的全局坐標系固定於地球,向量I指向北,向量 K指向天,向量J指向西。
圖3全局坐標系定義
另外,定義連接到我們的IMU設備的本體坐標系如下:
圖4本體坐標系定義
我們已經確立了陀螺儀可以測量角速度矢量的事實。讓我們看看加速度計和磁力計的測量結果將如何進入我們的模型。
加速度計是能感應重力的設備,重力矢量指向地心,與KB矢量相反。如果加速度計的三軸輸出為A = {Ax , Ay , Az } ,假設無外力引起的加速度,並且誤差已得到糾正,我們就可以確定KB= –A。磁強計類似於加速度計,可以感應北向磁場指向,猶如加速度計輸出並不完美並且時常需要糾正和初始校准。如果糾正后的3軸磁場輸出為M = {Mx , My , Mz },根據我們的假設的模型 IB指向北,因此有 IB = M。確認IB和KB后便可計算出JB = KB x IB。
因此根據加速度計和磁強計的輸出便能給出DCM矩陣,表示為 DCMB或者DCMG。
DCMG = DCMBT = [IB, JB, KB]T
到目前為止,你可能會問自己,如果加速度計和磁力計在任何時間點能給出DCM矩陣,為什么我們需要陀螺儀?陀螺儀實際上是一個比加速度計和磁力計更精確的設備,它用於“微調”加速度計和磁力計返回的DCM矩陣。
單靠陀螺儀並不能得到設備的方向,即不知道北在哪里和天的指向,但這些可以使用加速度計和磁力計確定,而是如果我們知道在時間t的設備的指向,表示為DCM矩陣DCM(t),我們可以使用陀螺儀找到更精確的指向DCM(t + dt)。如果直接從加速度計和磁力計估計讀數,其在形式上包含大量的噪聲,包括外部(非重力)慣性力(即加速度)或不是由地球磁場引起的磁力。
基於上述事實,需要尋求一種能夠組合三種設備的輸出數據的算法,用於最有效地估計設備在全局坐標系下的方位,下面我們將直接介紹該算法。
將使用到的DCM如下所示:
如果直接讀取DCM的行,我們將得到向量 IB, JB, KB,我們將主要討論向量KB (可以通過加速度計估計)和向量IB (可以通過磁力計估計),向量JB 可由 JB = KB x IB簡單計算獲得。
假設 t0時刻我們知道本體坐標系下指向天的矢量,記為 KB0,假設此時陀螺儀的輸出我們也確定,記為 w = {wx , wy , wz }。經過一小段時間后,我們想知道指向天定矢量的位置,假設記為KB1G。通過Eq.2.6我們可以得出:
KB1G ≈ KB0 + dt v = KB0 + dt (wg x KB0) = KB0 + ( dθg x KB0)
其中, dθg = dt wg
顯然,估計KB的另外一種方法是通過加速度計輸出計算,我們這里記為KB1A 。現實情況是,通過陀螺儀輸出估計與通過加速度輸出估計的值將會不一致。
現在,我們可以用反向的方式,估計角速度 wa或角位移dθa =dt wa,通過加速度計的輸出KB1A 以及Eq.2.5:
wa = KB0 x va / | KB0|2其中va = (KB1A – KB0) / dt
其中va = (KB1A – KB0) / dt, 幾乎等於為KB0的線速度,並且| KB0|2 = 1。
從而可得出:
dθa = dt wa = KB0 x (KB1A – KB0)
估計由KB1A和 KB1G組成的KB1方法的基本想法首先是將 dθ看作為dθa與 dθg的加權平均:dθ = (sa dθa + sg dθg) / (sa + sg),稍后將討論權重,它們很快地被實驗確定,以便實現期望的響應和噪聲抑制。
然后,對KB1的推導類似於如何計算KB1G:
KB1 ≈ KB0 + ( dθ x KB0)
同樣, dθ 可以用來以相同的方式計算DCM矩陣的其他元素:
IB1 ≈ IB0 + ( dθ x IB0)
JB1 ≈ JB0 + ( dθ x JB0)
三個向量彼此附接,並且均與由相同小的時間間隔 dt產生的角位移dθ叉乘轉化而來。簡而言之,這就是我們通過先前時刻 t0估計的矩陣DCM0,推導出 t1時刻的DCM1 算法。它是以相同的小時間間隔dt的遞歸應用,並且可以在任何時間遞推出DCM矩陣。該DCM矩陣不會隨着時間漂移太多,因為它被加速度計固定在指定的絕對位置;同時,不會由於外部加速度計太大噪聲兒產生大漂移,因為DCM矩陣又使用了速率脫落的數據進行更新。
到目前為止,我們並沒有提到一個關於磁力計的詞,其中一個原因是它並不是在所有的IMU單元中都有,上面的算法我們可以不使用它,但是該方法的結果指向會有一定的漂移,或許可以通過引入一個虛擬的指北磁力計,以保障模型的穩定性。
下面將會講如何集成磁力計的輸出到我們的算法中,事實證明,過程非常的簡單,因為磁力計類似於加速度計,唯一的區別是磁力計估計的不是天的指向 KB,而是估計指北向量 IB。遵循我們對加速度計所做的相同的邏輯,我們可以根據更新的磁力計讀數確定角位移為:
dθm = dt wm = IB0 x (IB1M – IB0)
將上式並入加權平均公式可得:
dθ = (sa dθa + sg dθg + sm dθm) / (sa + sg + sm)
同樣,可通過dθ 求得: DCM1
IB1 ≈ IB0 + (dθ x IB0)
KB1 ≈ KB0 + (dθ x KB0)
JB1 ≈ JB0 + (dθ x JB0)
實際上,在將 KB1和IB1再次校正為垂直單位矢量之后,我們將計算JB1 = KB1 x IB1,注意,我們的所有邏輯都是近似的,並且取決於dt是否足夠小,dt越大,誤差越大。
因此,如果向量IB0, JB0, KB0形成了有效的DCM矩陣,換句話說,它們彼此正交並且是單位向量,我們不能對關於 IB1, JB1, KB1的計算公式得出保證向量的正交性或長度,但是如果dt很小,我們不會得到太大的誤差,我們需要做的是在每次迭代之后對它們進行校正化。
首先,讓我們看看如何確保兩個向量再次正交。讓我們考慮“幾乎正交”的兩個單位矢量a和b,換句話說,這兩個矢量之間的角度接近90°,但不是精確的90°。我們要尋找一個與a正交並且在由向量a和b形成的平面中的向量b',這一向量很容易找到,如圖 5所示。首先通過叉乘的規則我們找到向量 c = a x b,c肯定垂直於a與b形成的平面。然后通過叉乘c與a得到b’ = c x a,因此,b’是我們正在尋找的與a正交的校正矢量,並且屬於由a和b形成的平面。
圖5向量正交化
通過三角定律的公式,我們可以推導出:
b’ = c x a = (a x b) x a = –a (a.b) + b(a.a) = b – a (a.b) = b + d
在上面的場景中,我們認為矢量a是固定的,並且我們推導出了與a正交的校正矢量b'。我們可以考慮相對稱的問題——通過固定的矢量b,並找到經校正的向量a'。
a’ = a – b (b.a) = a – b (a.b)
第三種場景,我們想同時校正兩個向量,我們認為它們都有同樣的錯誤,所以直觀的講,上述兩種場景的兩個向量都應該用半校正。
a’ = a – b (a.b) / 2
b’ = b – a (a.b) / 2
圖6向量半正交化
我們定義Err= (a.b)/2
可得出a’ = a – Err * b b’ = b – Err * a
請注意,我們並不能證明a'和b'是正交的,但是我們提出了直觀的推理,即如果我們應用上述校正變換,a'和b'之間的角度將接近90°。
現在回到DCM矩陣的更新,我們在將DCM矩陣重新引入下一個循環之前應用以下糾正措施:
Err = ( IB1 . JB1 ) / 2
IB1’ = IB1 – Err * JB1
JB1’ = JB1 – Err * IB1
IB1’’ = Normalize[IB1’]
JB1’’ = Normalize[JB1’]
KB1’’ = IB1’’ x JB1’’
其中,Normalize[a] = a / |a|
因此,最后我們校正的矩陣DCM1 可以從IB1’’, JB1’’, KB1’’的組合得到。
<完>