【轉】四元數的推導過程


來自: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=q0q1iq2jq3kq∗=q0−q1i−q2j−q3k 
(5) 純四元數:q=q1i+q2j+q3kq=q1i+q2j+q3k 
(6)四元數與空間旋轉:

 
Rq(p)=qpq1Rq(p)=qpq−1


其中: 
qq:單位四元數 
q1q−1:四元數的逆,對於單位四元數,q=q1q∗=q−1 
pp:純四元數 
Rq(p):Rq(p):也是一個純四元數

 


2. 歐拉角的萬向鎖問題

先看一個簡單的歐拉旋轉,如下圖所示:歐拉旋轉需要先確定旋轉順序,我們可以定義X-Y-Z的順序(總共有12種旋轉順序),那么什么是萬向鎖呢,我們可以用手機在桌子上進行旋轉,以手機的正面為xy平面,以手機的厚度的方向作為z軸,我們先繞x轉一個角度,然后再繞y軸旋轉90度,我們會發現一個問題,當我們再繞z軸旋轉一個角度,效果等同於我開始繞x軸旋轉另外一個角度,再繞y軸旋轉90度就行了. 
這里寫圖片描述 
我們的歐拉旋轉只能表示二維空間了,這是解我們的微分方程會出現退化現象,造成我們的微分方程無法解的情況。這樣說似乎還是比較模糊,那么我們舉一個例子: 
這里寫圖片描述

如圖所示:XwYwZwXwYwZw是世界坐標系,XiYiZiXiYiZi是機體坐標系,我們先繞XiXi軸旋轉3030∘,再繞YiYi旋轉9090∘,如下圖所示: 
這里寫圖片描述 
此時我們的XwXw和ZiZi在同一直線上,最后我們再繞ZiZi旋轉4040∘,如下圖所示: 
這里寫圖片描述 
我們會發現一個問題,無論我們怎么旋轉,我們的坐標都是(30,90,z),也就是繞z軸的旋轉角度我們無法衡量的,這也就是我們的萬向鎖問題。


3. 四元數推導

復數旋轉

首先我們看一個復數p=a+bip=a+bi在復平面的表示:這里寫圖片描述 
現在我們將它旋轉角度θθ,先定義另外一個復數q=cosθ+isinθq=cosθ+isinθ,我們發現,復數的乘法表示了一種旋轉: 

 
qp=(acosθbsinθ)+i(asinθ+bcosθ)qp=(acosθ−bsinθ)+i(asinθ+bcosθ)


這個復數恰好就是pp旋轉θθ角度后的值: 
這里寫圖片描述

 

三維復數旋轉

我們看到了二維復數乘法可以表示旋轉,那么三維空間呢。按照舉一反三的思想,我們會想到再增加一個虛數作為第三個維度,這個就要涉及到我們的向量的叉乘,如下圖所示: 
這里寫圖片描述 
向量叉乘的結果是兩個向量構成平面的垂直向量,那么我們定義兩個個三維的復數: 

 
z1=a1+b1i+c1jz2=a2+b2i+c2jz1=a1+b1i+c1jz2=a2+b2i+c2j


其中i2=j2=1i2=j2=−1,我們類似的進行復數的乘法,得到: 

 
z1z2=(a1a2b1b2c1c2)+(a1b2+a2b1)i+(a1c2+a2c1)j+b1c2ij+b2c1jiz1z2=(a1a2−b1b2−c1c2)+(a1b2+a2b1)i+(a1c2+a2c1)j+b1c2ij+b2c1ji


我們會發現,如果沒有ijjiij和ji這兩項,我們三維的復數旋轉也就沒問題,那該如何處理呢?

 

四元數旋轉

哈密爾頓引入四維的四元數:q=q0+q1i+q2j+q3k,i2=j2=k2=1q=q0+q1i+q2j+q3k,其中i2=j2=k2=−1,根據向量的叉乘可以定義下列一些關系: 
這里寫圖片描述 
這里寫圖片描述 
這里寫圖片描述 
這里寫圖片描述 
可以得到下列關系: 

 
ij=ji=kjk=kj=iki=ik=ji2=j2=k2=ijk=1ij=−ji=kjk=−kj=iki=−ik=ji2=j2=k2=ijk=−1


為了方便理解,我們將四元數寫成向量的形式:q=[s,v⃗ ]q=[s,v→],我們可以理解為ss為實部,向量v⃗ v→表示的就是三維空間,下面我們看一下四元數的乘法: 

 
qa=[sa,a⃗ ]qb=[sb,b⃗ ]qaqb=[sasba⃗ b⃗ ,sab⃗ +sba⃗ +a⃗ ×b⃗ ]qa=[sa,a→]qb=[sb,b→]qaqb=[sasb−a→⋅b→,sab→+sba→+a→×b→]


由於我們研究的是三維空間,因此我們可以令qaqa為一個純四元數,即qa=[0,a⃗ ]qa=[0,a→].則可以得到:

 
qaqb=[a⃗ b⃗ ,sba⃗ +a⃗ ×b⃗ ]qaqb=[−a→⋅b→,sba→+a→×b→]


從上面可以看到,一個普通的四元數是無法將三維空間映射到三維空間的,我們令向量點乘的部分為零,此時,一個純四元數就可以旋轉為另一個純四元數.為了表現出旋轉,這里我們用四元數的三角表示方式:qb=[cosθ,sinθb⃗ ]qb=[cosθ,sinθb→],令a⃗ b⃗ =0a→⋅b→=0,則有: 

 
qaqb=[0,a⃗ cosθ+a⃗ ×b⃗ sinθ]qaqb=[0,a→cosθ+a→×b→sinθ]


我們沒有對向量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旋轉4545∘后得到: 

 
p=qp=[0,2–√|b⃗ |i+2–√|b⃗ |j]p′=qp=[0,2|b→|i+2|b→|j]


旋轉之前,純四元數pp的模長為|p|=2|p|=2,旋轉過后,純四元數pp′的模長|p|=2|b⃗ ||p′|=2|b→|,所以我們要給旋轉四元數又加上一個約束:四元數qq的模長為1,即qq是一個單位四元數.

 

但是上面的旋轉是有缺點的,因為其限制了我們的旋轉軸和需要被旋轉的四元數必須是垂直的(a⃗ b⃗ =0a→⋅b→=0),而不能達到任意的旋轉.這時,聰明的哈密爾頓發現,一個四元數會把一個純四元數拉到四維空間,但它的共軛又會把這個四維的空間拉回到三維空間.我們以一個簡單的例子來說明這個問題: 

 
p=[0,2i],q=[fracsqrt22,fracsqrt66(i+j+k)],q=[fracsqrt22,fracsqrt66(i+j+k)]p=[0,2i],q=[fracsqrt22,fracsqrt66(i+j+k)],則q∗=[fracsqrt22,−fracsqrt66(i+j+k)]


旋轉之后的四元數Rq(p)Rq(p): 

 
Rq(p)=[0,2j]Rq(p)=[0,2j]


這里需要注意的一點是,因為經過兩次的旋轉,所以旋轉的角度是2θ2θ,這就是為什么我們常常看到的旋轉四元數是一下形式: 

 
q=cosθ2+u⃗ sinθ2,|u⃗ |=1


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM