SLAM学习:三维空间刚体变换(2)

1. 旋转向量

矩阵表示方式有以下几个缺点:

(1)SO(3) 的旋转矩阵有九个量,但一次旋转只有三个自由度。因此这种表达方式是冗 余的。同理,变换矩阵用十六个量表达了六自由度的变换。

(2)旋转矩阵自身带有约束:它必须是个正交矩阵,且行列式为 1。变换矩阵也是如此。当 我们想要估计或优化一个旋转矩阵/变换矩阵时,这些约束会使得求解变得更困难。

对于坐标系的旋转, 任意旋转都可以用一个旋转轴和一个旋转角来刻画。于是,我们可以使用一个 向量,其方向与旋转轴一致,而长度等于旋转角。这种向量,称为旋转向量(或轴角,AxisAngle)。这种表示法只需一个三维向量即可描述旋转。同样,对于变换矩阵,我们使用一个旋转向量和一个平移向量即可表达一次变换。这时的维数正好是六维。

假设有一个旋转轴为 n,角度为 θ 的旋转,显然,它对应的旋转向 量为 θn。由旋转向量旋转矩阵的过程由罗德里格斯公式Rodrigues’s Formula )表明。

2. 欧拉角

欧拉角提供了一种非常直观的方式来 描述旋转——它使用了三个分离的转角,把一个旋转分解成三次绕不同轴的旋转;

由于绕不同的轴旋转所得到的欧拉角是不同的,所以欧拉角在使用的时候必须要先指明旋转的顺序;还需要区分每次旋转是绕固定轴旋转的,还是绕旋转 之后的轴旋转的。

欧拉角当中比较常用的 一种,便是用“偏航-俯仰-滚转”(yaw-pitch-roll)三个角度来描述一个旋转的。由于它等 价于 ZY X 轴的旋转,我们就以 ZY X 为例。假设一个刚体的前方(朝向我们的方向)为 X 轴,右侧为 Y 轴,上方为 Z 轴,如下图所示。那么,ZY X 转角相当于把任意旋转分解成 以下三个轴上的转角:

SLAM学习:三维空间刚体变换(2)_第1张图片

1. 绕物体的 Z 轴旋转,得到偏航角 yaw

2. 旋转之后Y 轴旋转,得到俯仰角 pitch

3. 旋转之后X 轴旋转,得到滚转角 roll

欧拉角的一个重大缺点是会碰到著名的万向锁问题:在俯仰角为 ±90时,第一次旋转与第三次旋转将使用同一个轴,使得系统丢失了一个自由度(由三次 旋转变成了两次旋转)。

SLAM学习:三维空间刚体变换(2)_第2张图片

由于这种万向锁问题,欧拉角不适于插值和迭代,往往只用于人机交互中。我们也很少在SLAM程序中直接使用欧拉角表达姿态,同样不会在滤波或优化中使用欧拉角表达旋转(因为它具有奇异性)。不过,若你想验证自己算法是否有错时,转换成欧拉角能够快速辨认结果的正确与否。

3. 四元数

四元数是 Hamilton 找到的一种扩展的复数. 既是紧凑的,也没有奇异性。

一个四元数 q 拥有一个实部和三个虚部。本书把实部写在前面(也有地方把实部写在 后面),像这样:

SLAM学习:三维空间刚体变换(2)_第3张图片

3.1 从旋转向量到四元数的转换

假设某个旋转是绕单位向量  进行了角度为 θ 的旋转,那么这个旋转的四元数形式为:

反之,我们亦可从单位四元数中计算出对应旋转轴与夹角:

3.2 用四元数表示旋转

三维点 p 经过旋转之后变成为 p′, 旋转后的点 p即可表示为这样的乘积:

3.3 四元数到旋转矩阵的转换

SLAM学习:三维空间刚体变换(2)_第4张图片

4. 常见变换比较

SLAM学习:三维空间刚体变换(2)_第5张图片

其中s表示缩放因子,说明相似变换在对向量旋转后,可以在x,y,z三个坐标上进行均匀缩放。 
仿射变换中的矩阵A只要求为可逆矩阵,而不必是正交矩阵。 
影射变换左下角为缩放a^T,当v≠0时,可以用整个矩阵除以v得到右下角为1的矩阵,否则为右下角为0的矩阵。从真实世界到相机照片的变换就可以看做是仿射变换。

你可能感兴趣的:(SLAM,SLAM学习)