三維剛體運動伟骨,由平移和旋轉(zhuǎn)構(gòu)成。平移簡單燃异,旋轉(zhuǎn)就麻煩些了携狭。這一章的重點就是描述旋轉(zhuǎn),設(shè)計核心概念為:旋轉(zhuǎn)矩陣回俐,變換矩陣逛腿,四元數(shù)以及歐拉角稀并。
一、旋轉(zhuǎn)矩陣
1单默、向量的內(nèi)積碘举、外積及其幾何意義
(1)內(nèi)積a.b = |a|*|b|*cos,結(jié)果是一個數(shù)值而非向量搁廓,幾何上表示向量間的投影關(guān)系
(2)外積a x b = a^b引颈,結(jié)果是一個垂直于a,b向量構(gòu)成的平面的向量,大小為|a|*|b|*sin境蜕,很容易注意到线欲,其大小是a與b圍成的三角形的面積,所以我們也把這樣的結(jié)果叫做有向面積汽摹。顯然李丰,根據(jù)外積的值能推斷出a到b的旋轉(zhuǎn)角度,所以我們也可以用外積表示向量的旋轉(zhuǎn)逼泣。
2趴泌、坐標系間的歐式變換
歐拉變換公式:a' = Ra + t
a'----物體位姿相對新坐標系的位姿
R----旋轉(zhuǎn)矩陣,它是歐拉變換的關(guān)鍵
a----物體相對原坐標系的位姿
t----物體的平移
3拉庶、旋轉(zhuǎn)矩陣的性質(zhì):
(1)它是一個行列式為1的正交矩陣(與其轉(zhuǎn)置矩陣相乘結(jié)果為單位矩陣)嗜憔,反之行列式為1的正交矩陣也一定是旋轉(zhuǎn)矩陣
(2)特殊正交群:SO(n) = {R|R*R' = I,det(R) = 1},其中R為一個nxn矩陣氏仗,R'是其轉(zhuǎn)置矩陣吉捶,det(R)為其行列式。SO(n)就是n維空間中旋轉(zhuǎn)矩陣的集合皆尔,當然我們討論最多的就是SO(3)呐舔。
(3)有了旋轉(zhuǎn)矩陣,我們描述相機位姿時慷蠕,可以直接聊矩陣了珊拼,而無需從基(坐標系)開始。體現(xiàn)在歐拉變換公式上流炕,公式右邊的R和t都是絕對量澎现,只有輸入值(向量a)是一個相對量。就是說每辟,我們用R和t兩個參數(shù)剑辫,就完整的描述了坐標變換關(guān)系。
4渠欺、變換矩陣:如果坐標系經(jīng)過多次變換妹蔽,那么對應(yīng)的歐拉變換式就會變得越來越復(fù)雜,所以我們引入了變換矩陣。這是一個數(shù)學技巧讹开,它將旋轉(zhuǎn)和平移都放入同一個矩陣(變換矩陣)中盅视,使得多次變換對應(yīng)的歐拉變換式依然是齊次的:C=T2*B = T2*T1*A捐名。
二旦万、Eigen實踐
本節(jié)講eigen的用法。這里有一份代碼比較注釋比較詳細镶蹋,就不寫那么多了成艘。我就在這里留點簡介吧
1、eigen是一個流行的矩陣工具庫贺归,有了它淆两,我們在進行矩陣、向量的計算時拂酣,就方便得多
2秋冰、作為一個軟件工具庫,它有個特點就是婶熬,只有h文件而沒有.a剑勾、.so等二進制文件,所以在CMakeLists.txt中赵颅,我們只需要引入eigen庫的頭文件目錄(include_directories虽另,但更好的方式還是find_package),而無須鏈接庫文件饺谬。
3捂刺、在mac上的使用步驟:
(1)先執(zhí)行l(wèi)ocate eigen3查看是否安裝,ubuntu也可執(zhí)行此命令
(2)homebrew安裝eigen
(3)CMakeLists.txt中添加include_directories("/usr/include/eigen3")募寨,ubuntu中也是這個默認路徑族展。不同人默認路徑可能不同,用find_package最好拔鹰。
三苛谷、旋轉(zhuǎn)向量與歐拉角:
1、意義:利用向量外積的定義格郁,方向表示旋轉(zhuǎn)方向(右手定則)腹殿,大小表示旋轉(zhuǎn)角度大小。
2例书、旋轉(zhuǎn)向量與旋轉(zhuǎn)矩陣之間有一個換算關(guān)系锣尉,背下來。
3决采、歐拉角:偏航-俯仰-滾轉(zhuǎn)自沧,很容易理解
四、四元數(shù):
1、意義:對照復(fù)數(shù)來理解拇厢,實際上乘以虛數(shù)部分爱谁,就是旋轉(zhuǎn);
2孝偎、四元數(shù)與旋轉(zhuǎn)的對應(yīng)關(guān)系访敌,背下來;
3衣盾、四元數(shù)的運算法則寺旺,只能理解加記憶了;
4势决、四元數(shù)與旋轉(zhuǎn)向量阻塑、旋轉(zhuǎn)矩陣的對應(yīng)關(guān)系;
五果复、實踐:visualizeGeometry
這里遇到的麻煩主要是pangolin的導入
1陈莽、跟著github地址上的步驟編譯
2、執(zhí)行sudo make install指令虽抄,成功后在/usr/local/include中生成了pangolin目錄走搁,將該目錄添加到header search paths中,要報錯极颓,沒解決
3朱盐、果斷將跟著github上的https://github.com/gaoxiang12/slambook/tree/master/ch3/visualizeGeometry方式,使用cmake編譯菠隆,運行成功1铡!