1.旋转向量
旋转矩阵来描述旋转,有了变换矩阵描述一个六自由度 的三维刚体运动,是不是已经足够了呢?但是,矩阵表示方式至少有以下几个缺点:
- SO(3) 的旋转矩阵有九个量,但一次旋转只有三个自由度。因此这种表达方式是冗余的。同理,变换矩阵用十六个量表达了六自由度的变换。那么,是否有更紧凑的表示呢?
- 旋转矩阵自身带有约束:它必须是个正交矩阵,且行列式为 1。变换矩阵也是如此。当我们想要估计或优化一个旋转矩阵/变换矩阵时,这些约束会使得求解变得更困难。
任意旋转都可以用一个旋转轴和一个旋转角来刻画。于是,我们可以使用一个向量,其方向与旋转轴一致,而长度等于旋转角。
这种向量,称为旋转向量(或轴角,AxisAngle)。这种表示法只需一个三维向量即可描述旋转。
同样,对于变换矩阵,我们使用一个旋转向量和一个平移向量即可表达一次变换。这时的维数正好是六维。
1.1 旋转向量和旋转矩阵之间的转换
假设有一个旋转轴为 n,角度为 θ 的旋转,显然,它对应的旋转向量为 θn。
w = θn 称为角轴或者旋转向量
- 角轴与旋转矩阵的不同
- 旋转矩阵:九个量,有正交性约束和行列式值约束
- 角轴:三个量,没有约束
- 注意:它们只是表达方式不同,但表达的东西可以是同一个
- 角轴也就是第四章要介绍的李群代数
旋转向量到旋转矩阵
旋转向量到旋转矩阵的过程由罗德里格斯公式表明, 由于推导过程比较复杂,我们不作描述,只给出转换的结果:
符号 ∧ 是向量到反对称的转换符。反之,我们也可以计算从一个旋转矩 阵到旋转向量的转换。对于转角 θ,有:
转轴 n 是矩阵 R 特征值 1 对应的特征向量。求解此方程,再归一化,就得到了旋转轴。读者也可以从“旋转轴经过旋转之后不变”的几何角度看待这个方程。
2.欧拉角
无论是旋转矩阵、旋转向量,虽然它们能描述旋转,但对我们人类是非常不直观的。当我们看到一个旋转矩阵或旋转向量时,很难想象出来这个旋转究竟是什么样的。当它们变换时,我们也不知道物体是向哪个方向在转动。而欧拉角则提供了一种非常直观的方式来描述旋转——它使用了三个分离的转角,把一个旋转分解成三次绕不同轴的旋转。
- 欧拉角
- 将旋转分解为三次不同轴上的转动,以便理解
- 例如:按照Z—Y—X顺序转动
- 轴可以是定轴或动轴,顺序亦可不同,因此存在许多种定义方式不同的欧拉角
- 常见的有yaw-pitch-roll(偏航-俯仰-横滚)
2.1 欧拉角的缺点:万向锁问题
欧拉角的一个重大缺点是会碰到著名的万向锁问题:在俯仰角为 ±90◦ 时,第一次旋转与第三次旋转将使用同一个轴,使得系统丢失了一个自由度(由三次 旋转变成了两次旋转)。
这被称为奇异性问题,在其他形式的欧拉角中也同样存在。理论上可以证明,只要我们想用三个实数来表达三维旋转时,都会不可避免地碰到奇异性问题。 由于这种原理,欧拉角不适于插值和迭代,往往只用于人机交互中。我们也很少在SLAM程序中直接使用欧拉角表达姿态,同样不会在滤波或优化中使用欧拉角表达旋转(因为它具有奇异性)。不过,若你想验证自己算法是否有错时,转换成欧拉角能够快速辨认结果的正确与否。
3.四元数
旋转矩阵用九个量描述三自由度的旋转,具有冗余性;
欧拉角和旋转向量是紧凑的,但具有奇异性。
事实上,我们找不到不带奇异性的三维向量描述方式 。这有点类似于,当我们想用两个坐标表示地球表面时(如经度和纬度),必定存在奇异性(纬度为 ±90◦ 时,经度无意义)。
三维旋转是一个三维流形,想要无奇异性地表达它,用三个量是不够的。 回忆我们以前学习过的复数。我们用复数集 C 表示复平面上的向量,而复数的乘法则 能表示复平面上的旋转:例如,乘上复数 i 相当于逆时针把一个复向量旋转 90 度。类似 的,在表达三维空间旋转时,也有一种类似于复数的代数:四元数(Quaternion)。四元数是 Hamilton 找到的一种扩展的复数. 它既是紧凑的,也没有奇异性。如果说缺点的话,四 元数不够直观,其运算稍为复杂一些。
- 四元数
- 一种可扩展的复数
- 四元数有三个虚部,可以表达三维空间中的旋转,表示如下: i, j, k 为四元数的三个虚部
也可以用一个标量和一个向量来表达四元数
s 称为四元数的实部,而 v 称为它的虚部。如果一个四元数虚部为 0,称之为实四 元数。反之,若它的实部为 0,称之为虚四元数。
- 虚部之间的关系:自己和自己的运算像复数,自己和别人的运算像叉乘
己和自己的运算像复数,自己和别人的运算像叉乘
[外链图片转存中…(img-33q2rJMf-1693209795645)]