視覺SLAM之三維空間剛體運動描述
- 數(shù)學工具:旋轉(zhuǎn)矩陣,變換矩陣,四元數(shù),歐拉角
- 編程庫:Eigen庫
"旋轉(zhuǎn)矩陣"
既然是說剛體運動,首先剛體是什么?剛體指既有位置又有姿態(tài)(朝向)的物體;也就是說,要描述剛體的運動,就必須既要描述剛體的位置,還要描述剛體的姿態(tài)(朝向).
描述剛體運動,最重要的數(shù)學工具是線性代數(shù)中的點和向量.而要使用向量,必須要明白坐標和向量的關系.向量是線性空間中的一個對象,而描述這個對象的方法就是坐標.對于坐標和向量的關系,一個不準確的例子就是,把向量看做是線性空間的一個人,坐標是這個人的代號,那么,不管這個這個人叫什么代號,這個人本身沒有變化.為什么這個人有不同的代號?因為這個人在學校環(huán)境下,有學號,作為公民有身份證號等.回到線性代數(shù)的向量,不管坐標是什么,向量作為對象不會改變;為什么一個向量會有不同的坐標呢?是因為描述向量使用的參考系不同,也就是使用的基坐標不同,所以會有不同的坐標.比如:
其中為基坐標,
為向量
在這組基坐標下的坐標.所以,描述向量之前,必須先指定基坐標.
既然同一個向量會因為不同的基坐標而產(chǎn)生不同的坐標,那么這些坐標之間有事嗎關系呢?
有的,假設有基坐標組成的A坐標系和基坐標
組成的B坐標系,那么向量
的坐標分別為
和
.那么,因為向量
本身沒有變,因此有:
如果,在兩邊同時左乘那么就得到了兩個坐標之間的關系:
那么R就描述了兩個坐標之間的轉(zhuǎn)換,這個轉(zhuǎn)換只包括旋轉(zhuǎn),而不包括位移,因此R成為旋轉(zhuǎn)矩陣.
可以看到,旋轉(zhuǎn)矩陣是兩組基向量的向量積組成,通常情況下,基坐標都是單位正交向量,因此,旋轉(zhuǎn)矩陣一個單位正交矩陣,反過來,一個單位正交矩陣也可以作為一個旋轉(zhuǎn)矩陣,因此,把這一類矩陣有一個集合表示如下:
表示特殊正交群,其中
表示維度.這樣的旋轉(zhuǎn)矩陣有個很好的特點.因為旋轉(zhuǎn)矩陣是單位正交矩陣,因此,如果一個旋轉(zhuǎn)矩陣為
,那么和這個旋轉(zhuǎn)矩陣相反的旋轉(zhuǎn)矩陣就為
.
說完了旋轉(zhuǎn)矩陣,那么在SLAM中怎么應用呢?一般在SLAM中會定義一個世界坐標和一個相機坐標.世界坐標反應現(xiàn)實坐標,一般固定不懂,相機坐標是物體相對與相機的坐標,反應在相機拍攝的照片中.那么如何把圖片中的物體找到現(xiàn)實的位置呢?就是使用旋轉(zhuǎn)矩陣,通過世界坐標的基向量和相機坐標的基向量找到兩個坐標系下坐標的關系,然后就可以通過旋轉(zhuǎn)矩陣把照片中的物體的坐標找到現(xiàn)實的位置了.
齊次坐標和變換矩陣
旋轉(zhuǎn)矩陣就可以描述坐標在兩個坐標系中的關系了,但是這種關系只能描述矩陣的旋轉(zhuǎn),不能描述如果向量移動了,兩個坐標系中的坐標的關系.如果要加上位移,怎么表示呢?其實是需要在兩個坐標上同事加上位移就可以了,比如有一個位移,那么:
這樣就完成了物體的運動在兩個坐標系下的轉(zhuǎn)換.
但是這種表示有一個缺點,就是這種表示并不是線性的,比如:
那么從到
的變換表示為:
這樣造成多次運動后,轉(zhuǎn)換變得復雜,為了解決這個問題,引入了變換矩陣和齊次坐標.
所謂的齊次坐標,就是在原來的坐標上增加一個維度,由于原來的坐標在增加那個維度的數(shù)值可以有無數(shù)種,同時,一個低維坐標在高維中也有無數(shù)中表示方法,所以,增加維度后的坐標稱為齊次坐標,例如:
那怎么把齊次坐標變回原來的坐標呢?如下:
我們把稱為非齊次坐標,這樣坐標的前三個值就是原來的坐標了.
說明了齊次坐標,怎么使用齊次坐標來克服之前坐標變換是非線性的問題呢?把原來的坐標增加一個維度,值為1,那么可表示為:
那么稱為變換矩陣,這個矩陣把旋轉(zhuǎn)和位移統(tǒng)一了起來.那么
就可以表示為:
這樣,旋轉(zhuǎn)和位移的變換就稱為一個線性的運算.
同理,使用特殊歐式群表示這一類的變換矩陣為:
那么一個變換矩陣的反變換可以表示為:
說完了向量的坐標之間的關系,那么如果要找到兩個基坐標之間的關系怎么做呢?原理是相同的,只要兩邊同時右乘坐標,就得到了兩組基之間的關系.
向量基本運算
接著說一下向量的基本運算.
向量運算包括數(shù)乘,向量加法,向量減法,向量內(nèi)積,向量外積等.其中,數(shù)乘和向量四則運算屬于基本內(nèi)容.這里只簡單說向量的內(nèi)積和外積.
向量外積
向量的外積也叫做點積/點乘,公式為:
向量的內(nèi)積描述的是兩個向量之間的投影關系,內(nèi)積的結(jié)果是一個標量.
向量外積
向量的外積也叫作叉乘,公式為:
外積的結(jié)果是一個向量,這個向量垂直與和
組成的平面垂直;并且大小為:
外積只在三維向量中有定義.外積可以用來表征兩個向量的旋轉(zhuǎn),因為外積的正負可以表征向量的旋轉(zhuǎn)方向,大小可以計算旋轉(zhuǎn)的角度大小.而內(nèi)積只能計算角度大小,不能表示旋轉(zhuǎn)的方向.
視覺SLAM十四講