旋轉表示法(持續更新)
- 旋轉的正方向:
使用右手坐標系統的是用右手螺旋定則定義的.
(右手拇指指向旋轉軸的正方向,其它四個手指彎曲的方向即為旋轉的方向)
旋轉矩陣:
矩陣就是變換,旋轉矩陣就是用來做旋轉操作的變換。
旋轉矩陣是用來描述三維空間中兩個不同笛卡爾坐標系之間姿態(不含位置)關係的一個3×3矩陣。
描述三維空間中兩個不同笛卡爾坐標系之間姿態(不含位置)關係的方法(求真):
- 旋轉矩陣
- Rodrigues公式(一個旋轉軸+一個角度)
- 歐拉角
- 四元數
旋轉矩陣一般分 3 個理解, ,分別對應繞 軸旋轉 角。先直接(可直接記住)寫出來如下:
由羅德里格斯(Rodrigues)formula可以推出來這個結果,代入 即可,以下同理。這是map(exp)的形式,由 一個旋轉軸+一個角度 onto映射到 .
什麼是 :
一個梨子:
A frame和B frame一開始重合,
B frame 先繞z-axis of B frame 轉 角度
然後 繞y-axis of B frame(New)轉 角度
最後 繞z-axis of B frame(New)轉 角度
- 被稱為 ZYZ Euler angles,因為分別繞了 旋轉。Q:這種是不是適用於四軸?而不適用於六軸?
- :B frame 到 A frame 的旋轉變換
故該旋轉矩陣:
- 二維旋轉:
現在看看複數與二維旋轉的關係:
- 三維旋轉:
思路:旋轉的分解
其中 為其大小, 為其方向
因為
而
與旋轉軸 正交,由俯視角,可以看作是平面的旋轉。
左圖中, 為 繞 旋轉
右圖中, ,我們現在可以把 投影到 和 上,
以下補充推導向量點乘公式(求角度餘弦):
proof:
設向量 , 為二維向量, 為 與 軸的夾角,設 為 與 軸的夾角,向量 , 間的夾角 。
定理 :
- (平行情況)
當 平行於旋轉軸 時,旋轉 角度後的 用四元數可以寫為:
2. (垂直情況)
當 正交於旋轉軸 時,旋轉 角度後的 用四元數可以寫為:
歐拉角:
歐拉角轉四元數時的單位是什麼?取值範圍是什麼?
圖示,旋轉步驟如下:
- 物體繞全局的 軸旋轉 角(因為要和世界保持聯繫,否則就和世界完全沒有關係了。)
- 繼續繞自己的 軸旋轉 角
- 最後繞自己的 軸旋轉 角
很顯然,按照不同的旋轉步驟,旋轉的結果是不一樣的。
會導致 ,而且依賴於三個坐標軸的選定。
局部坐標是很直觀,但是導致歐拉角有一個重大缺陷,萬向節死鎖!
要規避萬向節死鎖,需要選擇合適的旋轉順序(有12種旋轉順序),在編程中很難規避死鎖問題,所以現在很多時候都使用四元數實現旋轉。
歐拉角是用來表示三維坐標系中方向和方向變換的。要指出,我們平時說的歐拉角其實還可以細分為歐拉角(Euler-angles)和泰特布萊恩角(Tait-Bryan-angles),這兩種方法都利用了笛卡爾坐標系的三軸作為旋轉軸,主要區別在於選取順序。歐拉角的選取順序有 這6種,可見選取順序是a,b,a這樣的順序,也就是繞a軸旋轉某角度後,繞新生成的b軸旋轉一個角度,最後繞兩次旋轉以後的a軸再旋轉一個角度,以此表示最終的方向。泰特布萊恩角的旋轉軸選取有 這6種,也就是歷遍笛卡爾坐標系的三軸,比如我們最常見到的Roll-Pitch-Yaw角就是其中 的情況。但這兩種方法,其實都是在空間中用最直觀的方式和最少的參數表示任意方向的通用方法,用它們表示方向沒有計算要求和容量需求的區別。
——出處
四元數:
四元數是由愛爾蘭數學家哈密頓在 年提出。大多數人用漢密爾頓四元數就只是做三維空間的旋轉變換。
三維空間的任意旋轉,都可以用繞三維空間的某個軸旋轉過某個角度來表示,即所謂的 (軸角式)表示方法。這種表示方法里,Axis可用一個三維向量 來表示,θ可以用一個角度值來表示,直觀來講,一個四維向量 就可以表示出三維空間任意的旋轉。 右手坐標系統,也就是說旋轉的正方向是用右手螺 旋定則定義的.你可以用右手拇指指向旋轉軸 的正方向,其它四個手指彎曲的方向即為旋轉的方向.
如果∥q∥ = 1,也就是說q是一個 單位四元數(UnitQuaternion),單位四元數(norm=1)則存在於四維空間的一個球面上。因為這個映射是滿射,我們可以說所有的單位四元數都對應著一個3D旋轉.或者說,一個四維單位超球面(也叫做 )上任意一點所對應的四元數(∥q∥ = 1)都對應著一個3D旋轉,這一點會在之後討論旋轉插值的時候會用到。
表格最左列中一個元素右乘以頂行中一個元素的結果就位於這兩個元素行列的交叉處
數值計算怎麼防止矩陣出現數值問題
四元數插值:
先複習一下怎麼用 四元數 旋轉 矢量 ,可對照下圖
只需要三步:
第一步,定義純四元數
第二步,確定旋轉軸 ,比如 ,轉過的角度
那麼對應的變換四元數
此時它的共軛
對於單位四元數來說,它的逆
第三步,進行四元數運算,則在這個旋轉下的新的坐標
其中, ,即對四元數 進行一個 的左旋轉,和一個 的右旋轉。
四元數左乘 右乘。
那麼,依據上圖,假設設有兩個旋轉變換 和 ,我們希望找出一些中間變換 ,讓初始變換 能夠平滑地過渡到最終變換 .
的取值可以 是 .當 時, 等同於初始變換 ,而 時, 等同於最終變換 .
由於插值的對象是兩個變換,想像起來可能非常困難,我們不妨假設3D空間中有任意一個向量 .那麼變換四元數 會將 變換到四元數形式的 ,而變換四元數 會將 變換到四元數形式的 . 我們需要找出中間向量的四元數形式 所對應的變換 ,使 旋轉到 與 中間的某個 位置 。
我們可以看到,這個旋轉的變化量其實對應的仍是一個旋轉.它將由 變換到 的向量進一步旋轉到 .這個旋轉擁有某一個固定的旋轉軸 ,我們只需要縮放這 個變換所對應的?度 就能夠達到插值的目的了.
page38
四元數乘法的順序,和矩陣與函數的複合非常相似,都是從右往左疊加.
推薦閱讀: