旋轉矩陣,四元素,尤拉角

2021-08-30 15:53:24 字數 4400 閱讀 5709

旋轉變換

旋轉變換最為直觀的表示方法是「軸-角」:繞著某乙個過原點軸,旋轉某一角度。 

軸可以用乙個單位長度的點[w1,w2,w3][w1,w2,w3]表示:原點到該點的射線即為此軸。 

使用右手座標系,拇指指向軸方向,四指方向即為旋轉的方向。 

乙個旋轉變換可以用用尤拉角、四元數或者旋轉矩陣表示。以下討論不同表示方法之間的關係,以及旋轉變換的合成、取逆等操作。

旋轉矩陣

旋轉可以看做一種特殊的座標變換,而座標變換可以用用3×33×3矩陣rr來表示。對乙個座標施加旋轉的結果是x′=rxx′=rx。 

旋轉矩陣可以在不同座標系之間進行變換,但不能進行「反演」,即不能在左手系和右手系之間進行變換。 

旋轉矩陣是正交矩陣,即|r|=1|r|=1,旋轉變換不改變向量的長度。

尤拉角的物理意義

任何乙個旋轉可以表示為依次繞著三個旋轉軸旋三個角度的組合。這三個角度稱為尤拉角。 

三個軸可以指固定的世界座標系軸,也可以指被旋轉的物體座標系的軸。三個旋轉軸次序不同,會導致結果不同。 

本文中提到的尤拉角指:繞著世界座標系的x,y,z軸,依次旋轉的結果。其取值範圍如下: 

θx∈(−π,π),θy∈(−π2,π2),θz∈(−π,π)

θx∈(−π,π),θy∈(−π2,π2),θz∈(−π,π)

尤拉角→→旋轉矩陣

單獨繞乙個軸旋轉θθ角度的旋轉矩陣為: 

如果依次繞x軸、y軸、z軸旋轉,該變換的旋轉矩陣為: 

r=rz⋅ry⋅rx

r=rz⋅ry⋅rx

記三個軸尤拉角的正弦和余弦函式為sx,cx,sy,cy,sz,czsx,cx,sy,cy,sz,cz。使用matlab的syms功能可以輕鬆推導旋轉矩陣rr:

⎡⎣⎢cyczcysz−syczsxsy−cxszcxcz+sxsyszcysxsxsz+cxczsycxsysz−czsxcxcy⎤⎦⎥

[cyczczsxsy−cxszsxsz+cxczsycyszcxcz+sxsyszcxsysz−czsx−sycysxcxcy]

旋轉矩陣→→尤拉角

設旋轉矩陣i行j列元素為rijrij。根據旋轉矩陣的表示式,利用三角函式可以推導出尤拉角取值:

θx=atan2(r32,r33)

θx=atan2(r32,r33)

θy=atan2(−r31,r232+r233−−−−−−−√)

θy=atan2(−r31,r322+r332)

θz=atan2(r21,r11)

θz=atan2(r21,r11)

四元數的物理意義

設有乙個通過原點[0,0,0][0,0,0]的旋轉軸,該軸上單位長度的點為[w1,w2,w3][w1,w2,w3]。繞此軸旋轉θθ角的變換可以用乙個向量表示: 

[cosθ2,w1sinθ2,w2sinθ2,w3sinθ2]

[cos⁡θ2,w1sin⁡θ2,w2sin⁡θ2,w3sin⁡θ2]

也記為q=[q0,q1,q2,q3]q=[q0,q1,q2,q3],或者q=q0+q1i+q2j+q3kq=q0+q1i+q2j+q3k。四元數的模長為1: 

q20+q21+q22+q23=cos2θ2+sin2θ2(w21+w22+w33)=cos2θ2+sin2θ2=1

q02+q12+q22+q32=cos2⁡θ2+sin2⁡θ2(w12+w22+w33)=cos2⁡θ2+sin2⁡θ2=1

四元數→→旋轉矩陣

⎡⎣⎢⎢1−2q22−2q232q1q2+2q3q02q1q3−2q2q02q1q2−2q3q01−2q21−2q232q2q3+2q1q02q1q3+2q2q02q2q3−2q1q01−2q21−2q22⎤⎦⎥⎥

[1−2q22−2q322q1q2−2q3q02q1q3+2q2q02q1q2+2q3q01−2q12−2q322q2q3−2q1q02q1q3−2q2q02q2q3+2q1q01−2q12−2q22]

旋轉矩陣→→四元數

如果r11,r22,r33r11,r22,r33中,r11r11最大: 

s=1+r11−r22−r33−−−−−−−−−−−−−−−√

s=1+r11−r22−r33

q0=r32−r23s

q0=r32−r23s

q1=s/4

q1=s/4

q2=r12+r21s

q2=r12+r21s

q3=r21+r12s

q3=r21+r12s

如果r11,r22,r33r11,r22,r33中,r22r22最大: 

s=1−r11+r22−r33−−−−−−−−−−−−−−−√

s=1−r11+r22−r33

q0=r13−r31s

q0=r13−r31s

q1=r12+r21s

q1=r12+r21s

q2=s/4

q2=s/4

q3=r23+r32s

q3=r23+r32s

如果r11,r22,r33r11,r22,r33中,r33r33最大: 

s=1−r11−r22+r33−−−−−−−−−−−−−−−√

s=1−r11−r22+r33

q0=r21−r12s

q0=r21−r12s

q1=r13+r31s

q1=r13+r31s

q2=r23−r32s

q2=r23−r32s

q3=s/4

q3=s/4

變換的逆

使用尤拉角表示時,必須顛倒三個旋轉軸的順序,同時對旋轉角度取反。 

使用旋轉矩陣表示時,求矩陣的逆即可:r∗=r−1r∗=r−1。 

使用四元組表示時,考慮其物理意義,對後三位取反即可:q−1=[q0,−q1,−q2,−q3]q−1=[q0,−q1,−q2,−q3]。

向量的叉乘

接下去討論之前,需要先複習向量的叉乘。

三維空間中的乙個點可以表示為向量[xi,yj,zk][xi,yj,zk],其中i,j,ki,j,k是三個座標軸:[1,0,0],[0,1,0],[0,0,1][1,0,0],[0,1,0],[0,0,1]。 

兩個向量a,ba,b叉乘的結果是乙個向量,其長度為|a||b|sinθ|a||b|sin⁡θ。θθ表示從向量aa到bb的小於180°的角度。其方向垂直於a,ba,b所在平面,遵循右手定則:四指從aa轉向bb,拇指方向為叉乘結果方向。

四元組作為一種向量,其叉乘涉及到虛數單位的乘法,遵循以下原則: 

i×i=−1

i×i=−1

i×j=−j×i

i×j=−j×i

i×j=k,j×k=i,k×i=j

i×j=k,j×k=i,k×i=j

叉乘滿足反交換律: 

a×b=−b×a

a×b=−b×a

聯想叉乘的物理意義:交換了a,ba,b順序,則拇指方向反轉。

叉乘滿足加法分配律: 

(a+b)×c=a×c+b×c

(a+b)×c=a×c+b×c

特別要注意,叉乘不滿足結合律: 

(a×b)×c≠a×(b×c)

(a×b)×c≠a×(b×c)

四元數的叉乘

四元數既不是向量也不是標量。可以看做乙個標量q0q0和乙個三維向量[q1,q2,q3][q1,q2,q3]的結合體:q=q0+q1i+q2j+q3kq=q0+q1i+q2j+q3k。 

兩個四元數a1+a2i+a3j+a4ka1+a2i+a3j+a4k,b1+b2i+b3j+b4kb1+b2i+b3j+b4k,相乘的結果q=a×bq=a×b: 

q0=a1b1−a2b2−a3b3−a4b4

q0=a1b1−a2b2−a3b3−a4b4

q1=a1b2+a2b1+a3b4−a4b3

q1=a1b2+a2b1+a3b4−a4b3

q2=a1b3−a2b4+a3b1+a4b2

q2=a1b3−a2b4+a3b1+a4b2

q3=a1b4+a2b3−a3b2+a4b1

q3=a1b4+a2b3−a3b2+a4b1

四元數叉乘不滿足交換律、結合律。

變換的組合

使用尤拉角表示時,很難直接組合兩個變換。 

使用旋轉矩陣表示時,依次做矩陣相乘即可:r=r2r1r=r2r1。 

使用四元組表示時,需要對兩個四元組叉乘:q=q2×q1q=q2×q1。 

注意,先發生的變換要放在乘號右側。 

由於叉乘不滿足結合律,當有一系列變化q1,q2,q3...q1,q2,q3...陸續發生時,要用括號保證乘法發生的順序: 

q=q4×(q3×(q2×q1))

q=q4×(q3×(q2×q1))

使用四元數

首先把待旋轉的點(x,y,z)(x,y,z)表示成四元數形式:p=[0,x,y,z]p=[0,x,y,z]。這裡的四元數不再表示乙個旋轉,所以模長不一定為1。 

對該點pp施加旋轉變換qq,通過四元組的兩次叉乘實現:p′=q×p×q−1=[0,x′,y′,z′]p′=q×p×q−1=[0,x′,y′,z′]。

OSG 旋轉矩陣和四元素 尤拉角

osg中需要對節點進行旋轉,是通過matrixtransform節點來進行。osg在描述旋轉時候一般通過osg matrix來描述。比如 osg vec3d pt 10,0,0 通過乘法可以進行對點的旋轉。pt pt matrix matrix 裡面除了含有旋轉,還包含了縮放,平移 它的含義如下 1...

四元素與旋轉矩陣

如何描述三維空間中剛體的旋轉,是個有趣的問題。具體地說,就是剛體上的任意乙個點p x,y,z 圍繞過原點的軸 i,j,k 旋轉 求旋轉後的點p x y z 旋轉矩陣乘以點p的齊次座標,得到旋轉後的點p 因此旋轉矩陣可以描述旋轉,x y z 1 r xy z1 繞x,y,或z軸旋轉 的矩陣為 r x ...

旋轉矩陣 尤拉角 四元數比較

旋轉矩陣 尤拉角 四元數主要用於 向量的旋轉 座標系之間的轉換 角位移計算 方位的平滑插值計算。旋轉矩陣 尤拉角 四元數比較 不同的方位表示方法適用於不同的情況。下面是我們對合理選擇格式的一些建議 1.尤拉角最容易使用。當需要為世界中的物體指定方位時,尤拉角能大大的簡化人機互動,包括直接的鍵盤輸入方...