旋转变换
本文主要介绍三维刚体运动中的不同旋转表示之间的转换推导。
1 欧拉角和旋转矩阵
假设角度都是相对于自转物体本身,即内旋,按照Z-Y-X
的顺序旋转推导如下:
R
(
θ
3
,
θ
2
,
θ
1
)
=
R
z
(
θ
3
)
R
y
(
θ
2
)
R
x
(
θ
1
)
=
[
c
3
−
s
3
0
s
3
c
3
0
0
0
1
]
[
c
2
0
s
2
0
1
0
−
s
2
0
c
2
]
[
1
0
0
0
c
1
−
s
1
0
s
1
c
1
]
=
[
c
2
c
3
−
s
3
s
2
c
3
c
2
s
3
c
3
s
2
s
3
−
s
2
0
c
2
]
[
1
0
0
0
c
1
−
s
1
0
s
1
c
1
]
=
[
c
2
c
3
s
1
s
2
c
3
−
c
1
s
3
c
1
s
2
c
3
+
s
1
s
3
c
2
s
3
s
1
s
2
s
3
+
c
1
c
3
c
1
s
2
s
3
−
s
1
c
3
−
s
2
s
1
c
2
c
1
c
2
]
R(\theta_3, \theta_2,\theta_1)=R_z(\theta_3)R_y(\theta_2)R_x(\theta_1) \\ = \begin{bmatrix} c_3 & -s_3 & 0 \\ s_3 & c_3 & 0 \\ 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} c_2 & 0 & s_2 \\ 0 & 1 & 0 \\ -s_2 & 0 & c_2 \end{bmatrix} \begin{bmatrix} 1 & 0 & 0 \\ 0 & c_1 & -s_1 \\ 0 & s_1 & c_1 \end{bmatrix} \\ = \begin{bmatrix} c_2c_3 & -s_3 & s_2c_3 \\ c_2s_3 & c_3 & s_2s_3 \\ -s_2 & 0 & c_2 \end{bmatrix} \begin{bmatrix} 1 & 0 & 0 \\ 0 & c_1 & -s_1 \\ 0 & s_1 & c_1 \end{bmatrix} \\ = \begin{bmatrix} c_2c_3 & s_1s_2c_3-c_1s_3 & c_1s_2c_3+s_1s_3 \\ c_2s_3 & s_1s_2s_3+c_1c_3 & c_1s_2s_3-s_1c_3 \\ -s_2 & s_1c_2 & c_1c_2 \end{bmatrix}
R(θ3,θ2,θ1)=Rz(θ3)Ry(θ2)Rx(θ1)=
c3s30−s3c30001
c20−s2010s20c2
1000c1s10−s1c1
=
c2c3c2s3−s2−s3c30s2c3s2s3c2
1000c1s10−s1c1
=
c2c3c2s3−s2s1s2c3−c1s3s1s2s3+c1c3s1c2c1s2c3+s1s3c1s2s3−s1c3c1c2
旋转矩阵转欧拉角,不考虑万向锁的情况,推导如下:
θ
2
=
a
r
c
s
i
n
(
s
2
)
=
a
r
c
s
i
n
(
−
m
31
)
θ
1
=
a
t
a
n
2
(
s
1
c
2
,
c
1
c
2
)
=
a
t
a
n
2
(
m
32
,
m
33
)
θ
3
=
a
t
a
n
2
(
c
2
s
3
,
c
2
c
3
)
=
a
t
a
n
2
(
m
21
,
m
11
)
\theta_2 = arcsin(s_2) = arcsin(-m_{31}) \\ \theta_1 = atan2(s_1c_2, c_1c_2) = atan2(m_{32}, m_{33}) \\ \theta_3 = atan2(c_2s_3, c_2c_3) = atan2(m_{21}, m_{11})
θ2=arcsin(s2)=arcsin(−m31)θ1=atan2(s1c2,c1c2)=atan2(m32,m33)θ3=atan2(c2s3,c2c3)=atan2(m21,m11)
2 四元数和旋转矩阵
对于单位四元数转旋转矩阵,推导如下:
q
=
q
0
+
q
1
i
+
q
2
j
+
q
3
k
∣
∣
q
∣
∣
=
q
0
2
+
q
1
2
+
q
2
2
+
q
3
2
=
1
R
(
q
)
=
[
1
−
2
q
2
2
−
2
q
3
2
2
q
1
q
2
−
2
q
3
q
0
2
q
1
q
3
+
2
q
2
q
0
2
q
1
q
2
+
2
q
3
q
0
1
−
2
q
1
2
−
2
q
3
2
2
q
2
q
3
−
2
q
1
q
0
2
q
1
q
3
−
2
q
2
q
0
2
q
2
q
3
+
2
q
1
q
0
1
−
2
q
1
2
−
2
q
2
2
]
\mathbf{q} = q_0 + q_1i + q_2j + q_3k \\ \vert \vert\mathbf{q} \vert \vert= q_0^2 + q_1^2 +q_2^2 + q_3^2 = 1 \\ R(\mathbf{q}) = \begin{bmatrix} 1-2q_2^2-2q_3^2 & 2q_1q_2-2q_3q_0 & 2q_1q_3+2q_2q_0 \\ 2q_1q_2+2q_3q_0 & 1-2q_1^2-2q_3^2 & 2q_2q_3-2q_1q_0 \\ 2q_1q_3-2q_2q_0 & 2q_2q_3+2q_1q_0 & 1-2q_1^2-2q_2^2 \end{bmatrix}
q=q0+q1i+q2j+q3k∣∣q∣∣=q02+q12+q22+q32=1R(q)=
1−2q22−2q322q1q2+2q3q02q1q3−2q2q02q1q2−2q3q01−2q12−2q322q2q3+2q1q02q1q3+2q2q02q2q3−2q1q01−2q12−2q22
对于旋转矩阵转四元数,推导如下:
t
r
(
R
(
q
)
)
=
m
11
+
m
22
+
m
33
=
3
−
4
(
q
1
2
+
q
2
2
+
q
3
2
)
=
4
(
1
−
(
(
q
1
2
+
q
2
2
+
q
3
2
)
)
)
−
1
=
4
q
0
2
−
1
q
0
=
t
r
(
R
(
q
)
)
+
1
2
q
1
=
m
32
−
m
23
4
q
0
q
2
=
m
13
−
m
31
4
q
0
q
3
=
m
21
−
m
12
4
q
0
tr(R(\mathbf{q})) = m_{11} + m_{22} + m_{33} \\ = 3 - 4(q_1^2 + q_2^2 + q_3^2) \\ = 4(1-((q_1^2 + q_2^2 + q_3^2))) - 1 \\ = 4q_0^2 - 1 \\ q_0 = \frac{\sqrt{tr(R(\mathbf{q}))+1}}{2} \\ q_1 = \frac{m_{32}-m_{23}}{4q_0} \\ q_2 = \frac{m_{13}-m_{31}}{4q_0} \\ q_3 = \frac{m_{21}-m_{12}}{4q_0}
tr(R(q))=m11+m22+m33=3−4(q12+q22+q32)=4(1−((q12+q22+q32)))−1=4q02−1q0=2tr(R(q))+1q1=4q0m32−m23q2=4q0m13−m31q3=4q0m21−m12
3 欧拉角和四元数
欧拉角转四元数推导如下,其中乘法要遵守四元数乘法:
q
(
θ
3
,
θ
2
,
θ
1
)
=
q
z
(
θ
3
)
⊗
q
y
(
θ
2
)
⊗
q
x
(
θ
1
)
=
[
c
o
s
(
θ
3
2
)
0
0
s
i
n
(
θ
3
2
)
]
⊗
[
c
o
s
(
θ
2
2
)
0
s
i
n
(
θ
2
2
)
0
]
⊗
[
c
o
s
(
θ
1
2
)
s
i
n
(
θ
1
2
)
0
0
]
\mathbf{q}(\theta_3, \theta_2,\theta_1)= \mathbf{q}_z(\theta_3)\otimes \mathbf{q}_y(\theta_2) \otimes \mathbf{q}_x(\theta_1) \\ =\begin{bmatrix} cos(\frac{\theta_3}{2}) \\ 0 \\ 0 \\ sin(\frac{\theta_3}{2})\end{bmatrix} \otimes \begin{bmatrix} cos(\frac{\theta_2}{2}) \\ 0 \\ sin(\frac{\theta_2}{2}) \\ 0 \end{bmatrix} \otimes \begin{bmatrix} cos(\frac{\theta_1}{2}) \\ sin(\frac{\theta_1}{2}) \\ 0 \\ 0 \end{bmatrix}
q(θ3,θ2,θ1)=qz(θ3)⊗qy(θ2)⊗qx(θ1)=
cos(2θ3)00sin(2θ3)
⊗
cos(2θ2)0sin(2θ2)0
⊗
cos(2θ1)sin(2θ1)00
4 轴角
轴角转四元数如下:
q
(
w
,
v
⃗
)
=
(
c
o
s
(
θ
2
)
,
u
⃗
s
i
n
(
θ
2
)
)
\mathbf{q}(w, \vec{v}) = (cos(\frac{\theta}{2}), \vec{u}sin(\frac{\theta}{2}))
q(w,v)=(cos(2θ),usin(2θ))
轴角转旋转矩阵,即罗德里格斯公式:
R
=
c
o
s
θ
I
+
(
1
−
c
o
s
θ
)
u
⃗
u
⃗
T
+
s
i
n
θ
[
u
⃗
×
]
R = cos\theta I + (1-cos\theta)\vec{u}\vec{u}^T+sin\theta[\vec{u}\times]
R=cosθI+(1−cosθ)uuT+sinθ[u×]