旋轉(zhuǎn)矩陣
點(diǎn),向量,坐標(biāo)系
剛體不光有位置,還有自身的姿態(tài).位置是指剛體在空間中的哪個(gè)地方,姿態(tài)是指剛體的朝向.
歐式變換
相機(jī)運(yùn)動(dòng)是一個(gè)剛體運(yùn)動(dòng),它保證了同一個(gè)向量在各坐標(biāo)系下的長(zhǎng)度和夾角都不會(huì)發(fā)生變化,這種變換稱(chēng)為歐式變換.
假設(shè)有一組正交基為下某個(gè)向量的值為 ,
那么在下,這個(gè)向量的坐標(biāo)為
有
于是有
-
意思是
定義為
在上式中,我們把兩組基之間的內(nèi)積定義為矩陣,這個(gè)矩陣刻畫(huà)了旋轉(zhuǎn)前后同一個(gè)向量的坐標(biāo)變化關(guān)系,只要旋轉(zhuǎn)時(shí)一樣的,這個(gè)矩陣就是一樣的,因此我們把稱(chēng)為旋轉(zhuǎn)矩陣
另外,旋轉(zhuǎn)矩陣是一個(gè)行列式為1的正交矩陣,反之亦然.
旋轉(zhuǎn)矩陣的集合叫做特殊正交群群( Special Orthogonal Group) 定義如下:
上式中,是特殊正交群的意思,n為向量的維度,是單位矩陣.
綜上,通過(guò)旋轉(zhuǎn)矩陣,我們可以直接談?wù)搩蓚€(gè)坐標(biāo)系之間的旋轉(zhuǎn)變換,而不用再?gòu)幕_(kāi)始談起.也就是說(shuō)旋轉(zhuǎn)矩陣可以描述相機(jī)的旋轉(zhuǎn).
且由于旋轉(zhuǎn)矩陣為正交矩陣教馆,它的逆和轉(zhuǎn)置相同,故有
所以是的逆運(yùn)算.
綜上,向量,經(jīng)過(guò)一次旋轉(zhuǎn)(用描述)和一次平移t之后,得到的
其中t為平移向量.
變換矩陣與齊次坐標(biāo)
假設(shè)進(jìn)行兩次變換:和,滿(mǎn)足:
即向量a變成c為:
這樣的形式在多次變換后會(huì)過(guò)于復(fù)雜,引入齊次坐標(biāo)和變換矩陣重寫(xiě)式:
可以看到,我們?cè)谌S向量末尾加上了,使其變成了四維向量,稱(chēng)為齊次坐標(biāo).
稱(chēng)為變換矩陣:左上角為旋轉(zhuǎn)矩陣,右上角為平移
將的齊次坐標(biāo)用
有:
于是有
另外,在不致歧義的情況下,我們一般不區(qū)分齊次坐標(biāo)和非齊次坐標(biāo)的寫(xiě)法,也就是說(shuō),上式可以寫(xiě)成
對(duì)于變換T,具有特殊結(jié)構(gòu):左上角為旋轉(zhuǎn)矩陣,右上角為平移向量,左下角為0,右下角為1,這種矩陣又稱(chēng)為特殊歐式群(Special Euclidean Grop):
T的逆為:
*: 齊次坐標(biāo),通過(guò)添加最后一維,我們用四個(gè)實(shí)數(shù)描述了一個(gè)三維向量,這顯然多了一個(gè)自由度,齊次坐標(biāo)中,某個(gè)點(diǎn)乘以一個(gè)常數(shù)k,得到的向量與原來(lái)相同,也就說(shuō),所以,但最后一項(xiàng)不為1時(shí),我們可以將所有數(shù)除以最后一項(xiàng),以獲得標(biāo)準(zhǔn)坐標(biāo).
**:當(dāng)我們使用時(shí),默認(rèn)是齊次坐標(biāo);當(dāng)使用時(shí),默認(rèn)是非齊次坐標(biāo).
旋轉(zhuǎn)向量和歐拉角
剛體旋轉(zhuǎn)自由度:一一個(gè)剛體在空間任意運(yùn)動(dòng)時(shí)概作,可分解為質(zhì)心O的平動(dòng)和繞通過(guò)質(zhì)心軸的轉(zhuǎn)動(dòng)
- 平動(dòng)自由度:確定到質(zhì)心的位置,需要三個(gè)坐標(biāo)(x,y,z)
- 轉(zhuǎn)動(dòng)自由度: \三個(gè)正交的坐標(biāo)軸上的旋轉(zhuǎn)
旋轉(zhuǎn)矩陣有9個(gè)量(3x3矩陣),卻只能表達(dá)物體的旋轉(zhuǎn)(3個(gè)自由度),也就是說(shuō):SO(3)的旋轉(zhuǎn)矩陣有9個(gè)量,但每次旋轉(zhuǎn)只有3個(gè)自由度;
同理,SE(3)有16個(gè)變量,可以表達(dá)6個(gè)自由度(旋轉(zhuǎn),平移).
綜上,我們想知道有沒(méi)有更緊湊的表達(dá)方式.
旋轉(zhuǎn)向量
任意一個(gè)旋轉(zhuǎn),都可以用一個(gè)旋轉(zhuǎn)軸和一個(gè)旋轉(zhuǎn)角來(lái)刻畫(huà).于是,我們可以使用一個(gè)向量,其方向和旋轉(zhuǎn)軸一致,而長(zhǎng)度等于旋轉(zhuǎn)角.這種向量稱(chēng)為旋轉(zhuǎn)向量.(旋轉(zhuǎn)軸過(guò)質(zhì)心)
對(duì)于旋轉(zhuǎn)矩陣,這種表示法只需要一個(gè)三維向量即可描述旋轉(zhuǎn).
同樣的,對(duì)于變換矩陣,我們是有一個(gè)旋轉(zhuǎn)向量和一個(gè)平移向量即可表示一個(gè)變換,此時(shí)正好為6維.
所以,旋轉(zhuǎn)向量可以如下表示:
其中,n為單位旋轉(zhuǎn)軸,為旋轉(zhuǎn)角度.
旋轉(zhuǎn)向量-->旋轉(zhuǎn)矩陣
旋轉(zhuǎn)向量和旋轉(zhuǎn)矩陣的轉(zhuǎn)換叫做羅德里格斯公式:
其中是單位矩陣,是向量到反對(duì)稱(chēng)的轉(zhuǎn)換符.的定義如下:
旋轉(zhuǎn)矩陣-->旋轉(zhuǎn)向量
是矩陣的跡.
關(guān)于旋轉(zhuǎn)軸,由于旋轉(zhuǎn)軸向量在經(jīng)過(guò)旋轉(zhuǎn)之后,不發(fā)生改變,于是有:
根據(jù)線(xiàn)性代數(shù)的知識(shí),我們可以得出轉(zhuǎn)軸是矩陣特征值為1的特征向量.
歐拉角
無(wú)論是旋轉(zhuǎn)矩陣,還是旋轉(zhuǎn)向量都能描述旋轉(zhuǎn).但是,對(duì)人類(lèi)卻十分不直觀.
歐拉角提供一種非常直觀的方式來(lái)描述旋轉(zhuǎn)--使用3個(gè)分離的轉(zhuǎn)角,把一個(gè)旋轉(zhuǎn)分解成3次繞不同軸的旋轉(zhuǎn).
航空中的偏航角,就是ZYX旋轉(zhuǎn)
- 繞物體Z軸旋轉(zhuǎn),偏航角,yaw
- 繞旋轉(zhuǎn)之后的Y軸旋轉(zhuǎn),俯仰角,pitch
- 繞旋轉(zhuǎn)之后的X軸旋轉(zhuǎn),滾動(dòng)角,roll
此時(shí),可以用這樣一個(gè)三維向量來(lái)描述任意旋轉(zhuǎn).
不同的歐拉叫是按照旋轉(zhuǎn)軸的順序來(lái)稱(chēng)呼的.
歐拉角具有奇異性問(wèn)題,也就是萬(wàn)向鎖問(wèn)題:在俯仰角pitch為時(shí),第一次旋轉(zhuǎn)yaw與第三次roll將使用同一個(gè)軸,使得系統(tǒng)丟失一個(gè)自由度.
所以,歐拉角不適于插值和迭代,往往只用于人機(jī)交互.
四元數(shù)
旋轉(zhuǎn)矩陣使用9個(gè)量描述3個(gè)自由度旋轉(zhuǎn),具有冗余性;歐拉角和旋轉(zhuǎn)向量是緊湊的,但是具有奇異性;
事實(shí)上,我們找不到不帶奇異性的三維向量描述方式.
在表達(dá)三維空間的旋轉(zhuǎn)的時(shí)候,有一種類(lèi)似于復(fù)數(shù)的代數(shù):四元數(shù).四元數(shù)是一種擴(kuò)展復(fù)數(shù),它即是緊湊的,又是沒(méi)有奇異性的.雖然,四元數(shù)不夠直觀,計(jì)算也較為復(fù)雜.
一個(gè)四元數(shù)q擁有一個(gè)實(shí)部和三個(gè)虛部,下面式子把實(shí)部寫(xiě)在前面(有的寫(xiě)在后面):
為四元數(shù)的三個(gè)虛部,滿(mǎn)足:
由于它的這種特殊表現(xiàn)形式,有時(shí)人們也用一個(gè)標(biāo)量和一個(gè)向量來(lái)表示四元數(shù).
其中
這里s稱(chēng)為四元數(shù)的實(shí)部,v稱(chēng)為虛部.
如果一個(gè)四元數(shù)的虛部為0,那么為實(shí)四元數(shù),反之為虛四元數(shù).
假設(shè)某個(gè)旋轉(zhuǎn)是繞單位向量進(jìn)行了角度為的旋轉(zhuǎn),那么該旋轉(zhuǎn)的四元數(shù)表示為:
反之,從單位四元數(shù)中可以計(jì)算出對(duì)應(yīng)的旋轉(zhuǎn)軸和夾角:
上式給我們一種"轉(zhuǎn)了一半"的感覺(jué),事實(shí)上,任意旋轉(zhuǎn)都可以由兩個(gè)互為相反數(shù)的四元數(shù)表示,同理,取為0,得到一個(gè)沒(méi)有任何旋轉(zhuǎn)的四元數(shù):