说明:转发请注明作者和出处;以下文章内容为精简版,详细版以pdf格式的幻灯片形式呈现,请见链接:视觉SLAM_03_旋转向量和欧拉角.pdf
0.目录
1.旋转向量
用矩阵来表示旋转,至少有两个缺点:
- 表达方式冗余:旋转矩阵9个分量,但一次旋转只有3个自由度;
- 旋转矩阵自身带有约束:必须是正交矩阵,且行列式的值为1。
因此,寻找更紧凑地描述旋转和平移是很有必要的。
任意旋转都可以用一个旋转轴和一个旋转角来刻画。方向与旋转轴一致,而长度等于旋转角的向量称之为旋转向量。使用旋转向量只需一个三维向量即可描述旋转。使用一个旋转向量和一个平移向量即可描述一次变换。
设旋转轴为单位长度向量
n
\boldsymbol{n}
n,角度为
θ
\theta
θ,那么向量
θ
n
\theta \boldsymbol{n}
θn即可描述这个旋转。从旋转向量到旋转矩阵的转换过程由罗德里格斯公式给出,由于推导过程比较复杂,这里只给出转换公式:
R
=
cos
θ
I
+
(
1
−
cos
θ
)
n
n
T
+
sin
θ
n
^
(1)
\boldsymbol{R} = \cos \theta \boldsymbol{I} + (1 - \cos \theta) \boldsymbol{n} \boldsymbol{n}^T + \sin \theta \boldsymbol{n} \hat{\,} \tag{1}
R=cosθI+(1−cosθ)nnT+sinθn^(1)
其中,
I
\boldsymbol{I}
I为单位矩阵,符号
^
\hat{\,}
^是向量到反对称矩阵的转换符,设单位向量
n
=
(
n
x
,
n
y
,
n
z
)
\boldsymbol{n} = (n_x, n_y, n_z)
n=(nx,ny,nz),则有:
n
^
=
[
0
−
n
z
n
y
n
z
0
−
n
x
−
n
y
n
x
0
]
\boldsymbol{n} \hat{\,} = \begin{bmatrix} 0 & -n_z & n_y \\ n_z & 0 & -n_x \\ -n_y & n_x & 0 \end{bmatrix}
n^=⎣⎡0nz−ny−nz0nxny−nx0⎦⎤
反之,也可以计算从一个旋转矩阵到旋转向量的转换。
θ
=
arccos
t
r
(
R
)
−
1
2
(2)
\theta = \arccos \frac{\rm tr(\boldsymbol{R}) - 1}{2} \tag{2}
θ=arccos2tr(R)−1(2) 关于旋转轴
n
\boldsymbol{n}
n,旋转轴上的向量在旋转后不发生改变,说明:
R
n
=
n
(3)
\boldsymbol{R} \boldsymbol{n} = \boldsymbol{n} \tag{3}
Rn=n(3)因此,转轴
n
\boldsymbol{n}
n是矩阵
R
\boldsymbol{R}
R特征值为1对应的特征向量。求得特征向量再归一化即可得到旋转轴。
2.欧拉角
无论是旋转矩阵还是旋转向量,它们描述旋转非常不直观。而欧拉角则提供了一种非常直观的方式来描述旋转,它使用了三个分离的转角,把一个旋转分解成三次绕不同的坐标轴的旋转。欧拉角共有12( 3 × 2 × 2 3 \times 2 \times 2 3×2×2)种定义方式。
3.参考文献
- 高翔等. 视觉SLAM十四讲:从理论到实践第二版. 北京:电子工业出版社,2019.8.
- 同济大学数学系. 线性代数第五版. 北京:高等教育出版社,2007.5.