技術(shù)文章
微分幾何在機器人領(lǐng)域的應(yīng)用(二)深入理解三維空間變換
閱讀:2169 發(fā)布時間:2019-4-11空間幾何變換
空間中的幾何變換分為多類,,從簡單,到逐漸復(fù)雜的變換,,分別有如下幾種:
1. 等距變換(Isometries),。等距變換下點到點的歐式距離保持不變。剛體變換是典型的等距變換,。
2. 相似變換(Similarity),。在等距變換的基礎(chǔ)上加上一個各向同性的縮放。矩陣表示上需要在旋轉(zhuǎn)矩陣部分乘以一個非零系數(shù)s,。
3. 仿射變換(Affine),。是一個非奇異的線性變換加上一個平移向量組成的變換,。
4. 投影變換(Projective)。任意非奇異的4×4矩陣所構(gòu)成的變換,。
變換的分類和特征如下圖所示,。
三維剛體的空間變換屬于種情況。如果物體不變形,,那么剛體變換涵蓋物理世界中的所有情況,。剛體變換包含三個平移自由度和三個旋轉(zhuǎn)自由度,總共6個自由度,。應(yīng)用剛體變換,,點到點的距離保持不變,同時矢量的點積和叉積保持不變,。平移自由度易于理解,,故本文重點討論旋轉(zhuǎn)分量,即旋轉(zhuǎn)矩陣R,。
旋轉(zhuǎn)矩陣
在理解高維理論時,,我們一般采用降維的方式理解,,由易到難,。首先回到二維空間的變換。二維平面中,,剛體變換有三個自由度,,x, y 和旋轉(zhuǎn)角θ。用矩陣的形式表示:
其中
分別為旋轉(zhuǎn)矩陣和平移向量,??梢钥吹叫D(zhuǎn)矩陣只有一個自由度,因其只有一個變量θ,。
旋轉(zhuǎn)矩陣R的性質(zhì):
1. 旋轉(zhuǎn)矩陣的逆矩陣是它的轉(zhuǎn)置矩陣,,故旋轉(zhuǎn)矩陣是正交矩陣。(如果不理解逆矩陣和轉(zhuǎn)置矩陣,,請首先惡補線性代數(shù)),。
2. 一個矩陣是旋轉(zhuǎn)矩陣,當(dāng)且僅當(dāng)它是正交矩陣,,且它的行列式是1,。正交矩陣的行列式是±1。讀者可思考行列式為-1的情況對應(yīng)什么變換,。
二維旋轉(zhuǎn)矩陣可用旋轉(zhuǎn)角唯yi表示,。正角表示逆時針旋轉(zhuǎn)。
如下圖表示的是當(dāng)θ=20°的情況,。
二位旋轉(zhuǎn)矩陣的許多性質(zhì)在三維空間中同樣滿足,。
讓我們回到三維空間,。旋轉(zhuǎn)可以有三個旋轉(zhuǎn)組合而成。在右手(笛卡爾)坐標系下分別繞x,,y,, z軸旋轉(zhuǎn)。其旋轉(zhuǎn)矩陣分別對應(yīng)為
任意旋轉(zhuǎn)矩陣可寫作一定角度下的三個矩陣的乘積,。
注意:矩陣乘法不符合交換律,!故順序不同,得到的旋轉(zhuǎn)矩陣并不相同,。
歐拉角
航空領(lǐng)域,,一般定義飛機前后軸為x軸,沿x軸旋轉(zhuǎn)的角度一般稱為Roll,,中文稱作翻滾角,;兩翼方向稱作Pitch,中文稱作俯仰角,;垂直地面的方向是航向角(Yaw),,如下圖所示。作者覺得中文翻譯很符合愿意,,更易于理解,。可以記住在駕駛飛機時,,如何操縱翻滾角,,俯仰角,航向角,。Roll,,Pitch,Yaw,,又稱作歐拉角,。習(xí)慣上,三個歐拉角的方向是z-y-x,,使用時需要特別重要,,歐拉角順序錯了,旋轉(zhuǎn)矩陣也會發(fā)生變化,。
程序?qū)崿F(xiàn):
程序使用基于C++的Eigen庫[3],。注意,Eigen庫是一個僅包含頭文件的基礎(chǔ)矩陣庫,,沒有靜態(tài)或動態(tài)庫,。使用時僅需要把相關(guān)的目錄include就可以了。
再次注意:三個歐拉角的順序,!
李群和李代數(shù)
三維旋轉(zhuǎn)矩陣是直觀的表示方法,,但旋轉(zhuǎn)矩陣有9個變量,,只有3個自由度,故信息是冗余的,。旋轉(zhuǎn)矩陣在工程使用更好的表達方法,。根據(jù)定義,所有的剛體變換屬于一個群(李qun,,Lie Group),。剛體變換又稱作特殊歐式變換(special Euclidean transformation),通常寫作SE(3),。李群中的變換滿足如下特性,。詳細性質(zhì)可參見李群和李代數(shù)的資料。如果只限于3D視覺或機器人學(xué),,只需記住其主要特性:
?封閉性
?相關(guān)性
?單位矩陣
?可逆
剛體變換的組合和逆變換均屬于剛體變換,。
單純的旋轉(zhuǎn)變換稱作特殊正角變換(special orthogonal transformation),通常寫作SO(3),。旋轉(zhuǎn)矩陣都是正交矩陣,。
李代數(shù)通過指數(shù)映射,將旋轉(zhuǎn)矩陣的9個變量轉(zhuǎn)換為3個變量,,結(jié)合三個平移向量,,總共6個變量,對應(yīng)6個自由度,。李代數(shù)表示法在三維重建(SFM),、VR,、SLAM等位姿估計領(lǐng)域應(yīng)用的較多,。李代數(shù)有基于Eigen的Sophus庫[4]可使用,方便完成指數(shù)映射,。
羅德里格斯旋轉(zhuǎn)公式
(Rodriguez’s Rotation Formula)
旋轉(zhuǎn)矩陣有一個更有效的表達方法,,即由一個單位向量和一個旋轉(zhuǎn)角生成。每一個旋轉(zhuǎn)矩陣均可轉(zhuǎn)化為向量和角(又稱軸-角)的表達方式,。根據(jù)公式,,單位向量用表示,旋轉(zhuǎn)的角度是θ,,那么相應(yīng)的旋轉(zhuǎn)矩陣是:
此矩陣可簡化為如下公式:
具體點符號定義可參見相關(guān)文獻,。單純環(huán)繞x,y或z軸旋轉(zhuǎn)而成的旋轉(zhuǎn)矩陣是羅德里格斯公式的特殊形式,。讀者可以把上式中的單位向量替換為(0,0,1)進行驗證,。雖然公式復(fù)雜,但程序?qū)嵺`比較方便,。利用Eigen庫中的Eigen::AngleAxisf(旋轉(zhuǎn)向量)可以直接獲得,。
四元數(shù)(Quternions)
四元素可看作一種特殊的復(fù)數(shù),,由一個實部和三個虛部構(gòu)成。四元素的表示方法同旋轉(zhuǎn)矩陣,、歐拉角表示方法是等價的,。根據(jù)羅德里格斯旋轉(zhuǎn)公式,任何一個旋轉(zhuǎn)都可以表達成軸角的表達法,。四元素可以更方便的表達出旋轉(zhuǎn)軸和旋轉(zhuǎn)角,。單位歐拉向量可表示為:
根據(jù)歐拉公式的擴展,四元素可表示為
四元素分為實部和虛部,,實部只跟旋轉(zhuǎn)角有關(guān),。虛部有單位向量和旋轉(zhuǎn)角共同計算得來。
四元數(shù)的求逆可采用復(fù)數(shù)的共軛(即虛部取反)方式求得
同時,,四元數(shù)更易于做線性插值(Slerp),。實際實驗中,使用四元素做旋轉(zhuǎn)矩陣的計算更加方便,。使用Eigen庫時,,四元素的使用更為方便。
總結(jié)
剛體的空間變換由平移和旋轉(zhuǎn)兩部分組成,。平移部分易于理解,,旋轉(zhuǎn)部分一般由直觀的3×3矩陣表示。
旋轉(zhuǎn)矩陣有很多特性(正交矩陣,、單位矩陣),,但其由9個元素,但只有3個自由度,,故數(shù)學(xué)上的表示是冗余的,。
在機器人領(lǐng)域,使用多的除旋轉(zhuǎn)矩陣外,,還有旋轉(zhuǎn)向量,、歐拉角、四元素等,。
本文的幾乎所有變換都容易實現(xiàn),,可直接使用三方庫如Eigen[3],類似的還要OpenCV等,。但如要深入理解,,hao自己實戰(zhàn)。
思考:二維空間剛體變換有3個自由度,,三維有6個自由度,,四維空間呢?n維空間呢,?
參考文獻:
1. Multiple View Geometry in Computer Vision (2nd Edition), Richard Hartley and Andrew Zisserman.
2. An Invitationto 3-D Vision From Images to Models, Yi Ma, Jana Kosecka, Stefano Soatto and Shankar Sastry.
3. Eigen, eigen.tuxfamily.org/.
本文屬于純原創(chuàng)文章,,轉(zhuǎn)載請注明杭州藍芯科技有限公司