三維空間剛體運動的描述方式:旋轉矩陣、變換矩陣、四元數和尤拉角
在slam 中相機可以看成三維空間的剛體,相機的位置是指相機在空間中的哪乙個地方,二姿態則是指相機的朝向。結合起來可以說「相機正處於(0,0,0)點出,朝向正前方」。
axb = a^b (外積)
—「^」該符號表示a為反對稱矩陣;
外積只對三維向量存在定義,能夠使用外積表示向量的旋轉
歐式變換:剛體運動保證了同乙個向量在各個座標系下的長度和夾角都不會發生變化。
設某個單位正交基(e1,e2,e3)經過一次旋轉,變成了(e1』,e2』,e3』),對於同乙個向量a,它在兩個座標系下的座標為[a1,a2,a3]^t,和[a1』,a2』,a3』]t,根據歐式變換的定義可知:
經過數學變換可知:
將中間的矩陣定義為r,稱為旋轉矩陣。旋轉矩陣可以描述兩個座標系之間的旋轉(即可以描述相機的旋轉)。
為什麼要引入齊次座標?座標系經過多次旋轉平移變換後,旋轉矩陣和平移向量使得數學表示式過於複雜。
將旋轉矩陣和平移向量寫在乙個矩陣中,該矩陣t稱為變換矩陣。
座標系的旋**任意的旋轉都可以用乙個旋轉軸和乙個旋轉角來刻畫。
旋轉向量(李代數):乙個向量其方向與旋轉軸一致,長度等於旋轉角,這個向量稱為旋轉向量(或軸角axisangle).
乙個三維向量即可描述旋轉,乙個旋轉向量和乙個平移向量即可描述一次變換。
旋轉向量和旋轉矩陣之間如何轉換?
假設乙個旋轉軸為n,角度為θ
\theta
θ的旋轉,顯然,它對應的旋轉向量為θ
\theta
θn。旋轉向量 到旋轉矩陣的過程有羅德里格斯公式表明:
旋轉矩陣到旋轉向量的過程
關於轉軸n,由於旋轉軸上的向量在旋轉後不發生改變,說明
轉軸n是矩陣r特徵值1對應的特徵向量。
四元數能夠表達三維空間的旋轉
旋轉向量
假設某個旋轉是繞某單位向量n=[nx,ny,nz]^t,進行了角度為θ
\theta
θ的旋轉,那麼使用四元數可表示為:
相反的,可以從單位四元數中計算出對應的旋轉軸與夾角:
在四元數中,任意的旋轉都可以為兩個互為相反數的四元數表示。
假設乙個空間三維點p=[x,y,z],以及乙個軸角n,$\theta$指定的旋轉。
把三維空間點用乙個虛四元數來描述
使用四元數表示旋轉
2.旋轉後的點即可表示為這樣的乘積
三維空間剛體旋轉
剛體 運動過程中不會產生形變的物體,運動過程中同乙個向量的長度和夾角都不會發生變化。剛體變換也稱為歐式變換。旋轉矩陣 四元數旋轉向量 尤拉角安裝方式 eigen庫只有標頭檔案,沒有.so和.a二進位制檔案,所以在cmakelists.txt中只需要新增標頭檔案路徑,並不需要使用target link...
SLAM學習(三) 三維空間剛體運動(實踐)
庫 上篇文章主要寫了三維剛體運動的一些理論知識。這部分實踐主要介紹使用eigen來表示矩陣 向量,隨後引申至旋轉矩陣和變換矩陣的計算。在實踐之前,您需要安裝eigen庫,網上有很多安裝教程,相信難不倒大家,然後就廢話少說,直接上 檔名 eigenmatrix.cpp include using na...
slam十四講(一)三維空間剛體運動
外積的方向垂直於這兩個向量,大小為 a b sin a,b 是兩個向量張成的四邊形的有向面積。且外積可以表達旋轉矩陣。其中這個為反對稱矩陣,寫作a 我們把中間的陣拿出來,定義成乙個矩陣 r。這個矩陣由兩組基之間的內積組成,刻畫了旋轉前後同乙個向量的座標變換關係。只要旋轉是一樣的,那麼這個矩陣也是一樣...