Try   HackMD

旋轉矩陣及四元數的空間轉換

tags: articles

作者: 鄭聖文

E-mail: shengwen1997.tw@gmail.com

本文章以 創用CC 姓名標示─非商業性─相同方式分享 授權

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

前言

旋轉矩陣及四元數是用來描述四軸飛行器、機械手臂或是各式機器人姿態的基本數學公式,本文是依照我的理解所撰寫的一篇導讀,若有錯誤,麻煩請您來信指正。

歐拉角及旋轉矩陣

歐拉角(Euler angle)是用於表示兩座標系之間相對應的角度關係,從一座標系至一座標系的轉換可以以一線性轉換進行描述。

給出沿著

x軸旋轉
ϕ
度的轉換:

(xyz)=(1000cosϕsinϕ0sinϕcosϕ)(xyz)        
Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

給出沿著

y軸旋轉
θ
度的轉換:

(xyz)=(cosθ0sinθ010sinθ0cosθ)(xyz)        
Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

給出沿著

z軸旋轉
ψ
度的轉換:
(xyz)=(cosψsinψ0sinψcosψ0001)(xyz)
       
Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

分別列出上面三組所使用到的轉換矩陣

Rx,
Ry
以及
Rz
, 我們以下標表示旋轉軸:

Rx=(1000cosϕsinϕ0sinϕcosϕ)

Ry=(cosθ0sinθ010sinθ0cosθ)

Rz=(cosψsinψ0sinψcosψ0001)

接著可以定義由載體參考系(body frame of reference)旋轉至慣性參考系(Inertial frame of reference)的數學公式:

(xiyizi)=RzRyRx(xbybzb)=Rbi(xbybzb)

我們以

Rbi表示載體到慣性(body to interial)的轉換:

Rbi=RzRyRx

=(cosψcosθsinψcosϕ+cosψsinθsinϕsinψsinϕ+cosψcosϕsinθsinψcosθcosψcosϕ+sinϕsinθsinψcosψsinϕ+sinθsinψcosϕsinθcosθsinϕcosθcosϕ)

旋轉矩陣並不具有交換律,以上我們以

(xyz)的順序旋轉。

而若給定一已知旋轉矩陣,可由下式求出歐拉角:

(ϕθψ)=(tan1(r32r33)sin1(r31)tan1(r21r11))=(tan1(cosθsinϕcosθcosϕ)sin1((sinθ))tan1(sinψcosθcosψcosθ))

旋轉矩陣的逆轉換可由反矩陣取得:

(xbybzb)=Rx1Ry1Rz1(xiyizi)=Rib(xiyizi)

而因旋轉矩陣屬於特殊旋轉群 SO(3),因此逆矩陣將等價於轉置矩陣:

Rib=Rx1Ry1Rz1=RxRyRz,     since RSO(3)

定義四元數之基本運算

四元數是數學家 威廉·哈密頓 (William Rowan Hamilton) 於1843年提出的數學概念,其用途是作為物理學表達空間的工具。四元數是複數系的擴展,因此了解複數對於理解四元數有一定幫助。

四元數由一實數與三虛數組成,可以表示如下:

qw+xi+yj+zk=(xyzw)

如同虛數一樣,四元數具有其獨特的乘法關係:

i2=j2=k2=1

以及

ij=k, ji=k

jk=i, kj=i

ki=j, ik=j

由上面六條規則可以發現,四元數虛數之間相互乘法不具有交換性

四元數的乘法關係可以整理為以下表格:

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

我們首先定義四元數的加法:

q1+q2=(w1+w2)+(x1+x2)i+(y1+y2)j+(z1+z2)k

接著定義乘法運算:

q1q2=(w1+x1i+y1j+z1k)(w2+x2i+y2j+z2k)=

(w1w2x1x2y1y2z1z2) +

(w1x2+x1w2+y1z2z1y2)i +

(w1y2+x1z2+y1w2+z1x2)j +

(w1z2+x1y2y1x2+z1w2)k

上式可以從乘法表中導出。

可以將四元數的實數部及虛數部拆開寫作下式:

q=s+v

因此乘法可寫作:

q1q2=s1s2v1v2+s1v2+s2v1+v1×v2

上式的

×為向量運算之外積運算。

而四元數乘法亦可以矩陣形式表示:

(xyzw)=(w1z1y1x1z1w1x1y1y1x1w1z1x1y1z1w1)(x2y2z2w2)

在稍後的章節中,會使用到四元數乘法的逆運算,而乘法逆運算必須由四元數的共軛值求得,因此我們首先定義四元數的共軛值為:

q=wxiyjzk

而四元數的長度為:

|q|=qq=w2+x2+y2+z2

並且由於:

q1=1q=qqq=q|q|2

因此四元數的乘法逆運算可由下式求得:

q1=q|q|2

而當四元數為單位四元數時(

w2+x2+y2+z2=1),乘法逆運算等於共軛值:

q1=q    if |q|=1

四元數的空間旋轉

根據已被證明之數學,若給出一四元數:

q=cos(θ2)+sin(θ2)n

以及以四元數表達的一座標:

qspace=(xyz0)

則下式可以將點

qspace相對原點旋轉
θ
度:

qspace=qqspaceq1

n是任意想要旋轉的軸。

qqspaceq1可以想像為一四度空間上的旋轉,該運算除了會使原座標旋轉
θ
度之外,也會在第四維空間上產生一位移,因此除了一次運算(
q
)外,可以另一次逆運算(
q1
)消除空間上的位移,但兩次運算皆會使座標旋轉
θ
度,使最終旋轉的度數為
2θ
度,因此我們必須選定原先的
θ
角為
θ2
度。

Image Not Showing Possible Reasons
  • The image file may be corrupted
  • The server hosting the image is unavailable
  • The image path is incorrect
  • The image format is not supported
Learn More →

接著將上式以矩陣形式描述:

(x"y"z"w")=(12(y2+z2)2(xyyz)2(wy+xz)02(xy+wz)12(x2+z2)2(yzwx)02(xzwy)2(yz+wx)12(x2+y2)00001)(xyzw)

亦可將行4列4省略記做下式:

(x"y"z")=(12(y2+z2)2(xyyz)2(wy+xz)2(xy+wz)12(x2+z2)2(yzwx)2(xzwy)2(yz+wx)12(x2+y2))(xyz)

接著擴展

q=cos(θ2)+sin(θ2)n使得我們可以一次描述
(xyz)
三軸的旋轉:

q=qzqyqx=(cos(ψ2)+sin(ψ2)k)(cos(θ2)+sin(θ2)j)(cos(ϕ2)+sin(ϕ2)i)

(xyzw)=(sin(ϕ2)cos(θ2)cos(ψ2)cos(ϕ2)sin(θ2)sin(ψ2)cos(ϕ2)sin(θ2)cos(ψ2)+sin(ϕ2)cos(θ2)sin(ψ2)cos(ϕ2)cos(θ2)sin(ψ2)sin(ϕ2)sin(θ2)cos(ψ2)cos(ϕ2)cos(θ2)cos(ψ2)+sin(ϕ2)sin(θ2)sin(ψ2))

注意,四元數乘法並不具備交換性,改變順序將會導致結果改變。

而數學上由於旋轉矩陣與四元數具有對稱性,因此由:

(cosψcosθsinψcosϕ+cosψsinθsinϕsinψsinϕ+cosψcosϕsinθsinψcosθcosψcosϕ+sinϕsinθsinψcosψsinϕ+sinθsinψcosϕsinθcosθsinϕcosθcosϕ)

(ϕθψ)=(tan1(r32r33)sin1(r31)tan1(r21r11))=(tan1(cosθsinϕcosθcosϕ)sin1((sinθ))tan1(sinψcosθcosψcosθ))

可以給出:

(12(y2+z2)2(xyyz)2(wy+xz)2(xy+wz)12(x2+z2)2(yzwx)2(xzwy)2(yz+wx)12(x2+y2))

(ϕθψ)=(tan1(q32q33)sin1(q31)tan1(q21q11))=(tan1(2(yz+wx)12(x2+y2))sin1(2(xzwy))tan1(2(xy+wz)12(y2+z2)))

由上式便可將四元數轉換回歐拉角。

參考資料

[1] Conversion between quaternions and Euler angles, Wikipedia