來自:https://blog.csdn.net/qq_28773183/article/details/80083607
四元數旋轉推導過程
1.基本概念
(1) 四元數的一般形式如下:q=q0+q1i+q2j+q3kq=q0+q1i+q2j+q3k
(2) 單位四元數:滿足四元數的模為1,即q02+q12+q22+q32=1q02+q12+q22+q32=1
(3) 四元數的三角形式:q=cosθ2+u⃗ sinθ2q=cosθ2+u→sinθ2
(4)共軛四元數:q∗=q0−q1i−q2j−q3kq∗=q0−q1i−q2j−q3k
(5) 純四元數:q=q1i+q2j+q3kq=q1i+q2j+q3k
(6)四元數與空間旋轉:
其中:
qq:單位四元數
q−1q−1:四元數的逆,對於單位四元數,q∗=q−1q∗=q−1
pp:純四元數
Rq(p):也是一個純四元數Rq(p):也是一個純四元數
2. 歐拉角的萬向鎖問題
先看一個簡單的歐拉旋轉,如下圖所示:歐拉旋轉需要先確定旋轉順序,我們可以定義X-Y-Z的順序(總共有12種旋轉順序),那么什么是萬向鎖呢,我們可以用手機在桌子上進行旋轉,以手機的正面為xy平面,以手機的厚度的方向作為z軸,我們先繞x轉一個角度,然后再繞y軸旋轉90度,我們會發現一個問題,當我們再繞z軸旋轉一個角度,效果等同於我開始繞x軸旋轉另外一個角度,再繞y軸旋轉90度就行了.
我們的歐拉旋轉只能表示二維空間了,這是解我們的微分方程會出現退化現象,造成我們的微分方程無法解的情況。這樣說似乎還是比較模糊,那么我們舉一個例子:
如圖所示:XwYwZwXwYwZw是世界坐標系,XiYiZiXiYiZi是機體坐標系,我們先繞XiXi軸旋轉30∘30∘,再繞YiYi旋轉90∘90∘,如下圖所示:
此時我們的XwXw和ZiZi在同一直線上,最后我們再繞ZiZi旋轉40∘40∘,如下圖所示:
我們會發現一個問題,無論我們怎么旋轉,我們的坐標都是(30,90,z),也就是繞z軸的旋轉角度我們無法衡量的,這也就是我們的萬向鎖問題。
3. 四元數推導
復數旋轉
首先我們看一個復數p=a+bip=a+bi在復平面的表示:
現在我們將它旋轉角度θθ,先定義另外一個復數q=cosθ+isinθq=cosθ+isinθ,我們發現,復數的乘法表示了一種旋轉:
這個復數恰好就是pp旋轉θθ角度后的值:
三維復數旋轉
我們看到了二維復數乘法可以表示旋轉,那么三維空間呢。按照舉一反三的思想,我們會想到再增加一個虛數作為第三個維度,這個就要涉及到我們的向量的叉乘,如下圖所示:
向量叉乘的結果是兩個向量構成平面的垂直向量,那么我們定義兩個個三維的復數:
其中i2=j2=−1i2=j2=−1,我們類似的進行復數的乘法,得到:
我們會發現,如果沒有ij和jiij和ji這兩項,我們三維的復數旋轉也就沒問題,那該如何處理呢?
四元數旋轉
哈密爾頓引入四維的四元數:q=q0+q1i+q2j+q3k,其中i2=j2=k2=−1q=q0+q1i+q2j+q3k,其中i2=j2=k2=−1,根據向量的叉乘可以定義下列一些關系:
可以得到下列關系:
為了方便理解,我們將四元數寫成向量的形式:q=[s,v⃗ ]q=[s,v→],我們可以理解為ss為實部,向量v⃗ v→表示的就是三維空間,下面我們看一下四元數的乘法:
由於我們研究的是三維空間,因此我們可以令qaqa為一個純四元數,即qa=[0,a⃗ ]qa=[0,a→].則可以得到:
從上面可以看到,一個普通的四元數是無法將三維空間映射到三維空間的,我們令向量點乘的部分為零,此時,一個純四元數就可以旋轉為另一個純四元數.為了表現出旋轉,這里我們用四元數的三角表示方式:qb=[cosθ,sinθb⃗ ]qb=[cosθ,sinθb→],令a⃗ ⋅b⃗ =0a→⋅b→=0,則有:
我們沒有對向量b⃗ b→做任何限制,下面來用一個例子說明應當對向量b⃗ b→做什么限制.
令p=[0,2i],q=[2√2,2√2b⃗ ]p=[0,2i],q=[22,22b→],考慮到a⃗ ⋅b⃗ =0a→⋅b→=0,令b⃗ =|b⃗ |kb→=|b→|k,則將pp旋轉45∘45∘后得到:
旋轉之前,純四元數pp的模長為|p|=2|p|=2,旋轉過后,純四元數p′p′的模長|p′|=2|b⃗ ||p′|=2|b→|,所以我們要給旋轉四元數又加上一個約束:四元數qq的模長為1,即qq是一個單位四元數.
但是上面的旋轉是有缺點的,因為其限制了我們的旋轉軸和需要被旋轉的四元數必須是垂直的(a⃗ ⋅b⃗ =0a→⋅b→=0),而不能達到任意的旋轉.這時,聰明的哈密爾頓發現,一個四元數會把一個純四元數拉到四維空間,但它的共軛又會把這個四維的空間拉回到三維空間.我們以一個簡單的例子來說明這個問題:
旋轉之后的四元數Rq(p)Rq(p):
這里需要注意的一點是,因為經過兩次的旋轉,所以旋轉的角度是2θ2θ,這就是為什么我們常常看到的旋轉四元數是一下形式: