依据imu姿态角计算z轴倾角_1. 姿态的表示方法
剛體的姿態(tài)(attitude)有很多種表示方法,關(guān)于這個話題有一篇十分出名的綜述[1],也是這篇文章的主要資料來源。這篇文章從二維旋轉(zhuǎn)開始,會討論旋轉(zhuǎn)矢量、旋轉(zhuǎn)矩陣、四元數(shù)、歐拉角等旋轉(zhuǎn)的表示方法。在開始討論前,需要明確的一點是剛體的姿態(tài)具有三個自由度,但使用三個參數(shù)對姿態(tài)進行全局的、沒有奇異性的描述已經(jīng)被證明是不可能的[2],這也是近來IMU姿態(tài)估計的方法大多使用四元數(shù)或旋轉(zhuǎn)矩陣的原因。
相比在三維空間中的旋轉(zhuǎn),二維旋轉(zhuǎn)十分直觀且易于理解。二維旋轉(zhuǎn)指將二維平面上的一個向量
(起點為原點)繞原點旋轉(zhuǎn)一個角度 ,得到一個新的向量 。角度 可以完全描述這個旋轉(zhuǎn)操作,因此是最直接的二維旋轉(zhuǎn)的表示方法。但需要注意的是,因為角度具有周期性,任何相差 的整數(shù)倍的兩個角度所代表的旋轉(zhuǎn)是相同的(只考慮旋轉(zhuǎn)的結(jié)果),所以表示角度的空間不是實數(shù)集 ,而是一個商空間 。這個商空間可以和平面上的單位圓做一一對應:
,也就是說,我們可以認為單位圓上的每一個點,對應了一個獨特的旋轉(zhuǎn)操作,這也是二維旋轉(zhuǎn)的第二種表示方法。最后,如果我們把旋轉(zhuǎn)后得到的向量寫成坐標的形式,可以得到: (1)其中
被稱為二維旋轉(zhuǎn)矩陣,可以和 作一一對應,是二維旋轉(zhuǎn)的第三種表示方法。旋轉(zhuǎn)矩陣是行列式為1的正交矩陣,也就是說它的每個列向量都是單位向量,每兩個列向量都是互相正交(垂直)的。2. 旋轉(zhuǎn)矢量(rotation vector)
三維旋轉(zhuǎn)和二維旋轉(zhuǎn)的不同是:二維旋轉(zhuǎn)永遠繞著垂直于平面的軸旋轉(zhuǎn),但三維旋轉(zhuǎn)可以繞三維空間內(nèi)的任意一根軸旋轉(zhuǎn)。根據(jù)歐拉旋轉(zhuǎn)定理,任何一個三維旋轉(zhuǎn)可以表示為繞一根轉(zhuǎn)軸
旋轉(zhuǎn)一個角度 ,在這里我們約定轉(zhuǎn)軸 用單位向量表示。因此最直接的三維旋轉(zhuǎn)的表示方法就是單位向量 和角度 ,這種方法被稱為歐拉軸-角(axis-angle)。為了一些計算上的方便,我們可以把軸和角相乘,得到一個三維空間內(nèi)的一般向量 ,很容易驗證 和歐拉軸-角是一一對應的,這也就是三維旋轉(zhuǎn)的另一種表示方法,即所謂的旋轉(zhuǎn)矢量。需要注意的是,和二維旋轉(zhuǎn)的角度表示法類似,旋轉(zhuǎn)矢量也具有周期性:任何方向相同,長度相差 的整數(shù)倍(可以將負的長度理解為方向相反的向量)的兩個旋轉(zhuǎn)矢量表示相同的旋轉(zhuǎn)。因此如果考慮獨特的旋轉(zhuǎn),我們可以把旋轉(zhuǎn)矢量限制在半徑為 的三維球體內(nèi)。如果在三維空間內(nèi)一個向量
經(jīng)過旋轉(zhuǎn)矢量 所表示的旋轉(zhuǎn)操作后得到 ,那么它們兩者有以下關(guān)系(Rodrigues' rotation formula): (2)最后需要說明的是,當
時,旋轉(zhuǎn)矢量 的導數(shù)會出現(xiàn)無窮大的情況,這也是旋轉(zhuǎn)矢量表示方法的奇異點。3. 旋轉(zhuǎn)矩陣(rotation matrix)
類似于二維旋轉(zhuǎn),
和 的關(guān)系也可以用矩陣的形式來表示: (3)其中
被稱為旋轉(zhuǎn)矩陣,也是 IMU 姿態(tài)表示中最常用到的方法。表示三維旋轉(zhuǎn)的旋轉(zhuǎn)矩陣 是一個3×3,行列式為 1 的正交矩陣,也就是說它的每個列向量都是單位向量,每兩個列向量互相正交(垂直)??梢宰C明兩個旋轉(zhuǎn)矩陣的乘積還是旋轉(zhuǎn)矩陣,所以全部旋轉(zhuǎn)矩陣構(gòu)成一個“群”,也就是著名的 SO(3) 群,其中群的乘法就是矩陣的乘法。需要注意的是,矩陣的乘法是不交換的,也就是說一般情況下 ,這意味著連續(xù)進行的兩個旋轉(zhuǎn)如果交換順序,那么旋轉(zhuǎn)的結(jié)果也會不同。旋轉(zhuǎn)矩陣可以由旋轉(zhuǎn)矢量計算得到:
(4)其中
表示叉積矩陣,也就是對任意向量 , ,它的表達式為: (5)最后需要說明的是,(4)可以寫成指數(shù)矩陣的表達形式:
,其中指數(shù)矩陣指: 。4. 單位四元數(shù)(unit quaternion)
四元數(shù)是對復數(shù)數(shù)系的進一步拓展,由四個實數(shù)表示:
。三個虛數(shù)單位服從以下的運算規(guī)則: , , , 。三維旋轉(zhuǎn)可以用單位四元數(shù)表示,即 的四元數(shù)。四元數(shù)有以下幾種常見的運算:(i) 乘法:
(ii) 冪:
(iii) 共軛:
(iv) 逆:
對于單位四元數(shù),它的逆運算和共軛運算的結(jié)果是一樣的。需要注意的是,與旋轉(zhuǎn)矩陣類似,四元數(shù)的乘法也是不交換的。
表示一個三維旋轉(zhuǎn)的單位四元數(shù)可以由旋轉(zhuǎn)矢量
計算得到: (6)將
代入上式可以得到 ,這意味著 和 表示相同的三維旋轉(zhuǎn)。這是單位四元數(shù)一個非常重要的性質(zhì),它和三維旋轉(zhuǎn)并不是一一對應的,而是 2 比 1 的對應關(guān)系。與旋轉(zhuǎn)矩陣類似,(6)也可以用指數(shù)函數(shù)的形式表示:如果將三維向量 寫為一個實部為 0 的四元數(shù) ,那么 ,其中四元數(shù)的指數(shù)函數(shù)為 。四元數(shù)也可以和旋轉(zhuǎn)矩陣之間互相轉(zhuǎn)換,具體公式可以通過歐拉軸-角表示法(4) 和 (6) 間接得到。最后,與旋轉(zhuǎn)矩陣類似,一個向量
經(jīng)過單位四元數(shù) 所表示的旋轉(zhuǎn)操作后,得到的 也有很簡單的形式: (7)5. 歐拉角(Euler angles)
歐拉角大概是最常用到的姿態(tài)表示方法了,它的思路是把一個三維旋轉(zhuǎn)分解為三個繞坐標軸的旋轉(zhuǎn)。歐拉角使用時最令人困惑的地方在于它的不同定義方法:根據(jù)三個坐標軸的不同順序,可以有12種定義方法;根據(jù)坐標軸是慣性坐標系(extrinsic)還是體坐標系(intrinsic),可以有2種定義方法。因此,一共有24種可能的方法來定義歐拉角,而且這些定義方式?jīng)]有一種是通用的,因此每次使用歐拉角時一定要說明是哪種定義。在量子力學中,最常用的歐拉角是體坐標系 z-x'-z'';我個人比較喜歡的一種歐拉角是體坐標系 z-y'-x'',其中三個旋轉(zhuǎn)角度也叫作yaw(航向角),pitch(俯仰角)和roll(橫滾角)。
體坐標系歐拉角z-x-z,xyz是原始坐標系,XYZ是旋轉(zhuǎn)后的坐標系體坐標系歐拉角z-y-x,xyz是原始坐標系,XYZ是旋轉(zhuǎn)后的坐標系歐拉角可以很方便地轉(zhuǎn)化為旋轉(zhuǎn)矩陣,其中繞三個坐標軸的旋轉(zhuǎn)分別可以轉(zhuǎn)化為如下的旋轉(zhuǎn)矩陣:
(i) 繞x軸旋轉(zhuǎn)
(ii) 繞y軸旋轉(zhuǎn)
(iii) 繞z軸旋轉(zhuǎn)
對于用慣性坐標系定義的歐拉角,可以按坐標軸順序?qū)⒁陨先齻€基本旋轉(zhuǎn)矩陣左乘;而用體坐標系定義的歐拉角,則需按坐標軸順序右乘。例如體坐標系 z-y'-x'' 歐拉角所對應的旋轉(zhuǎn)矩陣是:
(8)因為三維旋轉(zhuǎn)具有三個自由度,所以歐拉角是所有姿態(tài)的表示方法中需要用到參數(shù)最少的一種,也就是只用到三個參數(shù)。但是這樣的簡化也帶來了一些不方便的地方,在這里我們討論歐拉角的兩個缺點。第一個是歐拉角具有周期性,但和旋轉(zhuǎn)矢量不同,它的周期性很不直觀。以體坐標系 z-y'-x'' 歐拉角為例,它三個角度的范圍是:
, , 。這三個角度不僅以 為周期,而且通過 的公式可以驗證: , , 與 , , 表示的是相同的三維旋轉(zhuǎn)。這樣非常規(guī)的周期性在實踐中有時難以察覺,而且也使歐拉角本身的含義變得難以理解。歐拉角的第二個缺點是“臭名昭著”的自鎖現(xiàn)象(gimbal lock):即當俯仰角 時,第三步中的 x-軸與第一步中的 z-軸重合,因此第一步繞 z-軸的旋轉(zhuǎn)和第三步繞 x-軸的旋轉(zhuǎn)實際上是一樣的,導致歐拉角損失了一個自由度。在自鎖點附近,橫滾角 及航向角 的導數(shù)會趨向于無窮大,這也是歐拉角表示方法的奇異點。在使用卡爾曼濾波器時,這樣的性質(zhì)可能會使方差的計算十分不準確,我們會在后面討論卡爾曼濾波器的文章中詳細介紹這個問題。6. 旋轉(zhuǎn)和姿態(tài)的關(guān)系
在上面的討論中,旋轉(zhuǎn)矢量、旋轉(zhuǎn)矩陣、四元數(shù)、歐拉角指的都是在三維空間中旋轉(zhuǎn)一個向量的操作,那么這個操作和剛體的姿態(tài)有什么關(guān)系?這個問題可以用旋轉(zhuǎn)矩陣回答:假設旋轉(zhuǎn)矩陣
將一個坐標系 xyz 旋轉(zhuǎn)到 x'y'z'(將坐標軸理解為三維向量),那么如果一個向量在 xyz 坐標系中由坐標 表示,在 x'y'z' 坐標系中由坐標 表示,這兩個坐標有如下的關(guān)系: (9)在IMU中,我們計算的
是將一個向量在體坐標系(x'y'z')里的坐標轉(zhuǎn)為在慣性坐標系(xyz)中的坐標,那么這個旋轉(zhuǎn)矩陣 的另外一層含義是將慣性坐標系旋轉(zhuǎn)到體坐標系的旋轉(zhuǎn)操作。如果我們將
代入(9)可以得到: 的第一列是體坐標系的x-軸在慣性坐標系里的坐標;類似的, 的第二、三列分別是體坐標系的 y-軸和 z-軸在慣性坐標系里的坐標。因為的 逆和它的轉(zhuǎn)置相等,所以 的第一、二、三行分別是慣性坐標系的 x-軸、y-軸、z-軸在體坐標系里的坐標。7. 總結(jié)
剛體的姿態(tài)一般可以用四種方法表示:旋轉(zhuǎn)矢量、旋轉(zhuǎn)矩陣、四元數(shù)和歐拉角。剛體的姿態(tài)有三個自由度,在四種表示方法中,旋轉(zhuǎn)矢量和歐拉角用了三個參數(shù);四元數(shù)用了四個參數(shù)和一個約束條件(長度為1);旋轉(zhuǎn)矩陣用了九個參數(shù)和六個約束條件(矩陣的正交性)。旋轉(zhuǎn)矢量和歐拉角都具有奇異性,也就是說在某種姿態(tài)下,它們的導數(shù)會趨向無窮大;四元數(shù)沒有奇異性,但它和姿態(tài)是2比1的對應關(guān)系;只有旋轉(zhuǎn)矩陣既沒有奇異性,而且和姿態(tài)是一一對應的。在IMU姿態(tài)估計中,可以使用旋轉(zhuǎn)矩陣、四元數(shù)或歐拉角對角速度進行積分,并設計濾波器。在乘法擴展卡爾曼濾波器中(MEKF),是用四元數(shù)進行積分,用旋轉(zhuǎn)矢量表示姿態(tài)誤差及估計姿態(tài)的協(xié)方差矩陣。
總結(jié)
以上是生活随笔為你收集整理的依据imu姿态角计算z轴倾角_1. 姿态的表示方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 黑鲨被爆拖欠员工离职补偿金:CEO 微博
- 下一篇: 西门子plm_西门子的Teamcente