1. 程式人生 > >Slam筆記I

Slam筆記I

# 視覺Slam筆記I ## 第二講-三位空間剛體運動 ### 點與座標系: #### 基礎概念: - 座標系:左手系和右手系。右手系更常用。定義座標系時,會定義世界座標系,相機座標系,以及其他關心物件的座標系。空間中任意一點可由空間的基的線性表出。 - 加減法:用座標描述更方便。 - 內積:點乘得數,即![image-20200329010953972](https://img2020.cnblogs.com/blog/1653121/202003/1653121-20200329170222529-2114621247.png) - 外積:叉乘得向量,即![image-20200329011111261](https://img2020.cnblogs.com/blog/1653121/202003/1653121-20200329170222270-770937940.png)右手系下,得到按照右手定則獲取的向量。 - 座標系間的變換:![](https://img2020.cnblogs.com/blog/1653121/202003/1653121-20200329170335875-750438570.png) 通過平移(向量的加減)和旋轉(有多種描述方式,見下) - 2D情況:二維座標點表示位置+一個旋轉角表示朝向。 - 3D情況:三維座標點表示位置+一個旋轉角(角度間的變換使用旋轉,旋轉方式有多種,見下)。 #### 旋轉矩陣:(描述旋轉的第一種方式) 座標系` (e_1,e_2,e_3)`經過旋轉變成` (e'_1,e'_2,e'_3)`,在三維空間中,向量` a`保持不動,那麼如何表出它在` (e'_1,e'_2,e'_3)`下的座標: 1. 線性表出法向量` a`座標:兩座標系實質是分別用兩組不同的基去表示同一個點,則兩者的線性組合是相等的:![image-20200329012910587](https://img2020.cnblogs.com/blog/1653121/202003/1653121-20200329170221484-1779902232.png) 2. 左右兩邊同時左乘` (e_1,e_2,e_3)`的轉置,得到:![image-20200329013036243](https://img2020.cnblogs.com/blog/1653121/202003/1653121-20200329170221119-898891393.png) - R即為**旋轉矩陣**。 - 性質: - R是一個正交矩陣(矩陣的逆即矩陣的轉置,或轉置×本身即為一個單位矩陣)。 - R的行列式值為1。 - 滿足上述性質的矩陣都可以稱為**旋轉矩陣**,使用集合表示:![](https://img2020.cnblogs.com/blog/1653121/202003/1653121-20200329170651861-705219474.png) ,又稱特殊正交群SO(3)。 - 固定表示方式(下標順序):![image-20200329013817705](https://img2020.cnblogs.com/blog/1653121/202003/1653121-20200329170220514-918749510.png)且滿足矩陣關係:![image-20200329013839175](https://img2020.cnblogs.com/blog/1653121/202003/1653121-20200329170220218-414824988.png)。 **因此,空間中不同座標系下點座標的變換可以使用:![image-20200329014154282](https://img2020.cnblogs.com/blog/1653121/202003/1653121-20200329170219973-1404548592.png)即旋轉+平移的形式完全描述** - 理論依據:尤拉定理,剛體在三維空間中的一般運動,可分解為剛體上方某一點的平移,以及繞經過此點的旋轉軸的轉動。 但是,這種表示方式在多次進行變換時會有不便(![image-20200329015145398](https://img2020.cnblogs.com/blog/1653121/202003/1653121-20200329170219757-340880812.png)),因此使用增廣的方式進行表示: ![image-20200329015201203](https://img2020.cnblogs.com/blog/1653121/202003/1653121-20200329170219459-1835174472.png) - 其中,![image-20200329015312728](https://img2020.cnblogs.com/blog/1653121/202003/1653121-20200329170218900-59795731.png)稱為變換矩陣,![image-20200329015328058](https://img2020.cnblogs.com/blog/1653121/202003/1653121-20200329170218661-1733472125.png)的形式稱為齊次座標。 - 齊次座標性質:齊次座標乘上任意非0常數時仍表達同一座標![image-20200329155858830](https://img2020.cnblogs.com/blog/1653121/202003/1653121-20200329170218456-915073094.png) - 變換矩陣的集合:稱為特殊歐式群SE(3):![image-20200329160232459](https://img2020.cnblogs.com/blog/1653121/202003/1653121-20200329170218183-2013768993.png)![image-20200329160247758](https://img2020.cnblogs.com/blog/1653121/202003/1653121-20200329170217546-884245821.png) #### 旋轉向量和尤拉角: 旋轉矩陣在實際中更常用,但這些概念也是需要清楚的。 旋轉矩陣R是一個3×3的矩陣,有九個元素,但僅有三個自由度,也就是存在描述方式上的冗餘,那麼能否以更少的元素表達旋轉? 剛體旋轉存在一個轉軸(向量),還有轉過的角度,於是想用**角度乘以向量**(單位化過後)的形式去描述旋轉。 ###### 旋轉向量 - 一個向量,方向為旋轉軸方向,長度為轉過的角度。(單位向量乘角度大小) - 又稱角軸/軸角。 - **羅德里格斯公式**可以將旋轉向量(**n**,theta)轉換成旋轉矩陣R:![image-20200329161622677](https://img2020.cnblogs.com/blog/1653121/202003/1653121-20200329170217285-2097009988.png) - 旋轉矩陣R也可以轉換成旋轉向量(**n**,theta):![image-20200329161720658](https://img2020.cnblogs.com/blog/1653121/202003/1653121-20200329170217044-840283389.png)**n**是特徵向量。 ###### 尤拉角 - 將旋轉分解成三個方向上的轉動,常用順序為yaw-pitch-roll(也就是繞Z-Y-X方式轉,注意 ,不同地方在繞Z轉之後,所繞的Y軸可能是原來的Y軸,也可能是轉動後的Y軸) - ![image-20200329162256923](https://img2020.cnblogs.com/blog/1653121/202003/1653121-20200329170216451-384389405.png) - 萬向鎖(Gimbal Lock):尤拉角存在奇異性(特定值下,旋轉的自由度減1) - ![image-20200329162950598](https://img2020.cnblogs.com/blog/1653121/202003/1653121-20200329170215169-536753520.png)在pitch方向旋轉完畢後,roll方向旋轉和yaw方向旋轉是重合的。由此,尤拉角不適合插值或迭代,故不常用。 #### 四元數: 吸取了旋轉矩陣和旋轉向量、尤拉角的優點,是一種優秀的描述方式。 - 2D情況下,可以用單位複數表達旋轉: $$ z=x+iy=\rho e^{i\theta} $$ - 用z乘以i,相當於旋轉了90度(![](https://img2020.cnblogs.com/blog/1653121/202003/1653121-20200329170424966-1252000154.png)),乘-i轉動-90度。 在三維情況下,四元數可作為擴充定義的複數 - 特點1:有三個虛部+一個實部![image-20200329164223218](https://img2020.cnblogs.com/blog/1653121/202003/1653121-20200329170213834-3271978.png) - 特點2:虛部之間存在關係:![image-20200329164245980](https://img2020.cnblogs.com/blog/1653121/202003/1653121-20200329170213577-1793938881.png) - 單位四元數可以表達三維空間的旋轉: ![image-20200329164406659](https://img2020.cnblogs.com/blog/1653121/202003/1653121-20200329170212901-542814285.png) - 四元數也能定義很多運算: ![image-20200329164506016](https://img2020.cnblogs.com/blog/1653121/202003/1653121-20200329170212544-541904140.png) - 四元數轉換成旋轉向量:![image-20200329165043809](https://img2020.cnblogs.com/blog/1653121/202003/1653121-20200329170211001-849218550.png) - 旋轉向量轉換成四元數:![image-20200329165108650](https://img2020.cnblogs.com/blog/1653121/202003/1653121-20200329170210434-912291140.png) - 用四元數表示旋轉: ![image-20200329165224736](https://img2020.cnblogs.com/blog/1653121/202003/1653121-20200329170209725-13993555