3、旋转向量和欧拉角
(1)旋转向量
问题的引入:
①旋转矩阵R3x3 用9个量来表示3个自由度, 变换矩阵T4x4 用16个量来表示6个自由度,表达方式过于冗余。
②旋转矩阵和变换矩阵自身带有约束,使得估计或优化较难。
使用一个三维向量,其方向同旋转轴一致,而长度等于旋转角,即用旋转向量来描述一次旋转。
使用一个旋转向量和一个平移向量来表达一次变换,即用一个六维向量来描述变换。
- 旋转向量到旋转矩阵的变换
假设有一个旋转轴为n, 角度为θ的旋转,对应的旋转向量为θn。
由罗德里格斯公式(Rodrigues’s Formula) 可以得到旋转矩阵为:
- 旋转矩阵到旋转向量的变换
对应转角θ,有:
证明如下:
由于“旋转轴经过旋转之后不变”,可有 Rn = n。故,转轴n是矩阵R特征值1对应的特征向量。
(3)欧拉角
- “偏航-俯仰-滚转”(yaw-pitch-roll)即ZYX转角分解
- 绕物体的Z轴旋转,得到偏航角yaw
- 绕旋转之后的Y轴旋转,得到俯仰角pitch
- 绕旋转之后的X轴旋转,得到滚转角roll
用[r,p,y]T来描述任意旋转。
- 万向锁问题
在俯仰角为±90°时,第一次旋转与第三次旋转使用同一个轴,使得系统失去了一个自由度。
使用三个实数来表达三维旋转都为遇到这样的问题,故欧拉角不适合插值和迭代,也很少在SLAM中直接使用欧拉角。
4、四元数
(1)四元数定义
为了解决三维向量奇异性(万向锁)的问题,Hamilton找到一种扩展的复数四元数。
- 一个四元数q定义如下:
q = q0 + q1i + q2j + q3k
其中i,j,k为四元数的三个虚部,且满足
i2 = j2 = k2 = -1
ij = k, ji = -k
jk = i, kj = -i
ki = j, ik = -jq = [s, v], s = q0 ∈ R, v = [q1, q2, q3]T ∈ R3
也可以简化为用一个标量和一个向量来表达四元数。 - 使用单位四元数来描述三维空间中的旋转
假设某个旋转是绕单位向量n = [nx, ny, nz]T进行了角度为θ的旋转,那么这个旋转的四元数形式为:q = [cos(θ/2),nxsin(θ/2), nysin(θ/2), nzsin(θ/2)]T
则可以计算出对应旋转轴与夹角:θ = 2arccos q0
[nx, ny, nz]T = [q1, q2, q3]T/sin(θ/2)
(2)四元数的运算
设qa = [sa, va] = sa + xai + yaj + zak,qb = [sb, vb] = sb + xbi + ybj + zbk,则有:
- 加减法
qa ± qb = [sa±sb, va±vb]
- 乘法
qaqb = [sasb - vaTvb, savb + sbva + va x vb]
- 共轭
qa* = [sa, -va] = sa - xai - yaj - zak
q*q =