Slam筆記I
阿新 • • 發佈:2020-03-29
# 視覺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