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