1.旋轉矩陣
2.旋轉向量和歐拉角
3.四元數
1.旋轉矩陣
1.1點 向量 座標系
向量 是空間中存在的有方向有長度的一樣東西,向量不等於座標,不同座標系下向量的座標表示也不盡相同。只有確定了一個座標系,我們才能說這個向量的座標是多少。
向量的外積運算
其中,代表反對稱矩陣,即
外積可以表示旋轉,利用右手法則,大拇指朝向就是旋轉向量的方向,事實也是的方向。所以到的旋轉就可以由大拇指朝向的向量來表示,也就是說,在這個座標系下,旋轉可以用三個實數來描述(這三個實數就是的座標)
1.2座標系間的歐式變換
同一個向量在不同座標系下有不同的座標表示,但這都表示的是一個向量,這個向量是固有存在的。
現在將上式(3.4)左乘,得到
式 (3.5) 中的爲旋轉矩陣,旋轉矩陣 的特殊性質:
旋轉矩陣是行列式爲 1 的正交矩陣(旋轉矩陣的逆爲自身轉置,逆矩陣代表一個相反的旋轉)
旋轉矩陣的集合稱之爲特殊正交羣
1.3 變換矩陣和齊次變換
之前的變換表達式,如果發生多次變換,(2次),這樣使得計算過於麻煩,所以引入一個自由度,利用齊次座標和變換矩陣重寫(3.7)
式子中的 稱爲變換矩陣,這種矩陣又稱爲特殊歐式羣(Special Euclidean Group):
,同理,T的逆矩陣也代表一個相反的變換。
2.旋轉向量和歐拉角
2.1旋轉向量
有九個量,但旋轉自由度是3,T有16個量,但歐式變換自由度是6。
於是我們尋找更簡潔的替代品,用一個旋轉軸和旋轉角來描述旋轉,旋轉軸爲,旋轉角爲,旋轉向量爲
從旋轉向量到旋轉矩陣,由一個羅德里格斯公式表明
由上式可以推出
同時,由於轉軸在旋轉後不發生改變,說明 ,所以是矩陣特徵值=1時,對應的特徵向量
2.2歐拉角
用三個分離的轉角來描述旋轉。歐拉角描述時。應該指定,旋轉的轉軸順序。
yaw偏航角(繞Z軸) pitch俯仰角(繞Y軸) roll翻滾角(繞X軸) ypr對應ZYX。
ZYX的萬向鎖發生在pitch爲度時。(好像是第二個旋轉軸的度旋轉時發生)
3.四元數。
3.1定義
歐拉角和旋轉向量都具有奇異性,需要不帶奇異性的三維向量描述方式。
四元數是一種擴展的複數。既是緊湊的,也沒有奇異性,缺點在於計算稍微複雜,表示不夠直觀。
一個四元數擁有一個實部和三個虛部
代表三個虛部,虛部滿足以下關係式
或者是用 此時,s稱爲實部,稱爲虛部。s=0虛四元數,實四元數。
四元數是複數的擴展,和複數不同的是,複數中乘以一個i代表逆時針旋轉90度,而四元數裏還乘以一個i代表旋轉180度,而,代表需要繞着軸繞兩圈才能回到原來的位置。
旋轉向量與四元數
假設某個旋轉 繞軸,轉了度,那麼這個旋轉的四元數形式爲
(3.14)
由上也可以反算對應的旋轉軸和夾角
(3.15)
直觀來看,四元數好像關於是轉了一半的感覺,對(3.14)式加上一個,(從繞着轉了和,是同一個旋轉)
我們會得到一個爲的四元數,這說明,同一個旋轉可以由互爲相反數的一對四元數表示。同理,=0時,得到的是一個沒有任何旋轉的實四元數,
3.2運算
現有兩個四元數 , 或用向量表示
1)加減
實部實部相加,虛部虛部相加
2)乘法
乘法是將的每一項與的每一項相乘,最後相加
3)共軛
實部不變 虛部爲相反數
4)模
5)逆
6)數乘與點乘
3.3四元數表示旋轉
類似複數表達旋轉,複平面上有一點爲,旋轉爲, 變換後的座標,
這裏的四元數也可以這樣近似理解,, 但是此時表示旋轉的四元數爲 (根據3.14式,繞着軸轉了角)
旋轉後的點可以表示爲這樣的乘積
3.4四元數到旋轉矩陣的變換。
(右手系以上公式爲準,下圖有誤,應是其轉置)
對於下面那個式子,只要第一個式子得出之後,求出q0,1,2,3其實非常簡單。
部分公式懶得打,截取自http://blog.csdn.net/youngpan1101/article/details/71086851
作業部分
習題1.
這裏我是用
來證明的,是分別只繞三個軸旋轉而得到的旋轉矩陣,
其中
這個推導很簡單,其實就是一個軸不動,所以把旋轉投影到另外兩個軸的平面即可,另外兩軸同理。此處略。
習題2
羅德里格斯公式
參考wiki百科 https://en.wikipedia.org/wiki/Rodrigues%27_rotation_formula
或百度百科
其實思路很簡單,如果向量與向量平行,繞着旋轉軸軸轉動,等於沒有進行旋轉。也就是說向量中與軸平行的分量,其實沒有發生變化,真正旋轉的是與軸垂直的分量。所以最終目標
讓我們逐步分析
1)得到
爲單位向量,由投影可知,
2)得到
3)引入
(注意,最後的只是爲了說明,其大小爲,座標是依據座標系的不同而不同的,這個式子是建立在以爲x軸,爲y軸的右手系座標下的,其餘座標系可利用旋轉關係得到。)
4)求解 ,原理見圖
帶入,
5)解得
6)解得
設
當然這裏並不一定可逆,但暫時也沒有找到其他直觀的簡易的得到的解法
總之,得到了羅德里格斯旋轉公式
習題3
這個也很簡單,利用四元數的乘法公式帶入即可,注意只需要關心實部,還有可以認爲是單位四元數,則四元數的逆等於共軛,對於更一般的情況只需要共軛除以一個模得到逆即可。
此處略
習題4
前文已經很細節了
習題5 習題6 習題7
都比較簡單 不復述了
*
q1.normalize(); //可以實現歸一化
//可以實現從四元數到旋轉矩陣
Tcw.prerotate(q1);
Tcw.pretranslate(t2);