导语:最近在搭建电机与机械臂的联合仿真,闲暇之余顺便看了一下姿态轨迹规划的文章,对姿态的插补有点感兴趣,发现用四元数表示姿态然后来进行姿态的插补非常方便,且不会出现奇异。这里对四元数与常规的旋转矩阵的转换做一下总结。
四元数概念
四元数由实部和虚部组成,设
q
q
q 为四元数,则可表述为
q
=
w
+
x
i
+
y
j
+
z
k
q=w+xi+yj+zk
q=w+xi+yj+zk ,其中
w
w
w 为实部,
i
j
k
ijk
ijk 为虚单位,满足
i
2
=
j
2
=
k
2
=
i
j
k
=
−
1
i^2=j^2=k^2=ijk=-1
i2=j2=k2=ijk=−1 。四元数的模计算公式
∣
q
∣
=
w
2
+
x
2
+
y
2
+
z
2
\left| q \right|=\sqrt{w^2+x^2+y^2+z^2}
∣q∣=w2+x2+y2+z2当模等于1时,则为单位四元数,四元数也可写成向量形式
q
=
[
w
,
u
⃗
]
q=\left[ w,\vec{u} \right]
q=[w,u] ,其中
w
w
w 为实部,
u
⃗
=
[
x
,
y
,
z
]
\vec{u}=\left[ x,y,z \right]
u=[x,y,z] 为三个实数构成的虚部向量。单位四元数又可表示为轴对角的形式
q
=
[
cos
(
θ
/
2
)
,
sin
(
θ
/
2
)
∗
v
]
q=\left[ \cos \left( \theta /2 \right) ,\sin \left( \theta /2 \right) *v \right]
q=[cos(θ/2),sin(θ/2)∗v]它表示任意向量
r
r
r 绕轴
v
v
v 旋转角度
θ
\theta
θ 得到的四元数。
四元数的运算
共轭:设
q
=
[
w
,
u
⃗
]
q=\left[ w,\vec{u} \right]
q=[w,u] 为四元数,则其共轭四元数为
q
∗
=
[
w
,
−
u
⃗
]
q^*=\left[ w,-\vec{u} \right]
q∗=[w,−u]。
逆:单位四元数的逆
q
−
1
=
q
∗
q^{-1}=q^*
q−1=q∗ 。
乘法:对应四元数
q
=
[
w
1
,
u
1
⃗
]
q=\left[ w_1,\vec{u_1} \right]
q=[w1,u1] 和
q
=
[
w
2
,
u
2
⃗
]
q=\left[ w_2,\vec{u_2} \right]
q=[w2,u2],则有
q
1
q
2
=
[
w
1
w
2
−
u
⃗
1
∗
u
⃗
2
,
u
⃗
1
×
u
⃗
2
+
w
1
u
⃗
2
+
w
2
u
⃗
1
]
q_1q_2=\left[ w_1w_2-\vec{u}_1*\vec{u}_2,\vec{u}_1\times \vec{u}_2+w_1\vec{u}_2+w_2\vec{u}_1 \right]
q1q2=[w1w2−u1∗u2,u1×u2+w1u2+w2u1] ,其中*和×分别表示三维向量的内积和外积。并且四元数的乘法是不可交换的。
数乘:对于
q
q
q 为四元数,
r
r
r 为实数,则数乘定义为
r
q
=
[
r
,
0
]
q
=
[
r
w
,
r
u
⃗
]
rq=\left[ r,0 \right] q=\left[ rw,r\vec{u} \right]
rq=[r,0]q=[rw,ru]。
四元数转换为旋转矩阵
一个绕轴 v v v 旋转角度 θ θ θ 的操作可以用单位四元数 q = [ w , x , y , z ] = [ cos ( θ / 2 ) , sin ( θ / 2 ) ∗ ν ] q=\left[ w,x,y,z \right] =\left[ \cos \left( \theta /2 \right) ,\sin \left( \theta /2 \right) *\nu \right] q=[w,x,y,z]=[cos(θ/2),sin(θ/2)∗ν] 进行表示,其中 θ ∈ [ 0 , π ] \theta \in \left[ 0,\pi \right] θ∈[0,π]。对应旋转矩阵为 R ( q ) = [ 1 − 2 y 2 − 2 z 2 2 x y − 2 z w 2 x z + 2 y w 2 x y + 2 z w 1 − 2 x 2 − 2 z 2 2 y z − 2 x w 2 x z − 2 y w 2 y z + 2 x w 1 − 2 x 2 − 2 y 2 ] R\left( q \right) =\left[ \begin{matrix} 1-2y^2-2z^2& 2xy-2zw& 2xz+2yw\\ 2xy+2zw& 1-2x^2-2z^2& 2yz-2xw\\ 2xz-2yw& 2yz+2xw& 1-2x^2-2y^2\\ \end{matrix} \right] R(q)= 1−2y2−2z22xy+2zw2xz−2yw2xy−2zw1−2x2−2z22yz+2xw2xz+2yw2yz−2xw1−2x2−2y2
旋转矩阵转换为四元数
有旋转矩阵 i R j = [ r 11 r 12 r 13 r 21 r 22 r 23 r 31 r 32 r 33 ] ^iR_j=\left[ \begin{matrix} r_{11}& r_{12}& r_{13}\\ r_{21}& r_{22}& r_{23}\\ r_{31}& r_{32}& r_{33}\\ \end{matrix} \right] iRj= r11r21r31r12r22r32r13r23r33 , 转换为单位四元数 q = [ w , x , y , z ] q=\left[ w, x, y, z \right] q=[w,x,y,z]
w = r 11 + r 22 + r 33 + 1 2 w=\frac{\sqrt{r_{11}+r_{22}+r_{33}+1}}{2} w=2r11+r22+r33+1
x = r 32 − r 23 4 w x=\frac{r_{32}-r_{23}}{4w} x=4wr32−r23
y = r 13 − r 31 4 w y=\frac{r_{13}-r_{31}}{4w} y=4wr13−r31
z = r 21 − r 12 4 w z=\frac{r_{21}-r_{12}}{4w} z=4wr21−r12