目录
1 三维空间刚体运动
我们很容易想到,刚体在三维空间中的运动是由一次旋转和+一次平移组成的。平移其实就是刚体在三轴方向上移动的距离,问题不大,但在视觉SLAM问题中旋转的处理是比较麻烦的。
接下来介绍旋转矩阵、四元数、欧拉角的定义,以及他们是如何运算和变换的。
1.1 点、向量和坐标系
为什么要弄明白这些基础的问题呢,恰恰因为他们是基础,而最容易忽视的也是基础。
1、点是空间中的基本元素,无体积,无长度。
2、把两点连接就构成了向量。向量可以看作从一个点指向另一个点的箭头。
3、 当我们为三维空间指定坐标系时,就可以谈一个点和一个向量的坐标了。
值得注意的是,点和向量只是三维空间中存在的一种东西,只有在指定三维空间坐标系时,才赋予了他们坐标。
对于坐标我们可以计算他们的内外积,这个想必大家都会计算。在视觉SLAM问题中,为了方便后面各种公式推导的理解,这里对向量之间的外积计算引入了一个^符号。这个符号可以把向量写成一个矩阵!其是一个反对称矩阵!
如图:
1.2 坐标系间的欧式变换
视觉SLAM问题中常常涉及到坐标系之间的变化,比如世界坐标系、机器人坐标系,相机坐标系等。两个坐标系之间的变换由一个旋转和一个平移组成,这就是**刚体运动**。刚体运动中,同一个向量在各个坐标系下的长度和夹角都不会发生改变。而我们说两个坐标系之间相差了一个欧式变换。
欧式变换由旋转和平移组成,用R和t表示。
(1)旋转矩阵
旋转矩阵刻画了旋转前后同一个向量的坐标变换关系。
向量在两个坐标系之间的旋转,向量本身是不变的,根据这个性质可以推出旋转矩阵。
在线性代数中,一个向量由一组基和一个坐标相乘得到。
在上式左右两端左乘[e1,e2,e3]T,可得下式。
旋转矩阵的性质:行列式为1且正交, RT=R-1 ;
反过来,行列式为1的正交矩阵也是旋转矩阵。
(2)变换矩阵
欧式变换由一个旋转和一个平移组成,旋转矩阵用R表示,平移向量用t表示,可由下式表示。
在实际应用中,为了方便使用矩阵计算, 引入了齐次坐标:
矩阵T既包含旋转矩阵,又包含平移向量,称为变换矩阵。
1.2 旋转向量和欧拉角
①任意旋转都可以用一个旋转轴和一个旋转角来表示。
旋转向量的定义(或轴角,Axis-Angle):对于一个旋转轴为n,旋转角为 θ \theta θ的旋转,对应的旋转向量为 θ \theta θn ,并且向量n的模为1。
②欧拉角:把一个旋转分解成三次分别绕x,y,z轴的旋转,用三个分离的旋转角[ θ \theta θx, θ \theta θy, θ \theta θz]描述一个旋转。
绕物体的Z轴旋转得到偏航角(yaw),再绕旋转之后的Y轴旋转得到俯仰角(pitch),最后绕旋转之后的X轴得到滚转角(roll)。
- 欧拉角的bug
万向锁问题:俯仰角如果是 90o 或-90o ,第三次旋转会与第一次旋转使用同一个轴,并且避免不了。会导致丢失一个自由度(由三次旋转变成了两次旋转)。这被称为奇异性问题。
这块总是转不明白,其实可以那一本书比划一下。
我们不用专业术语描述,可以用上下左右来说。
首先平放书本,左转头20°,然后俯仰角如果是 90o 就说明此时书已经竖直放置了,第三次就是绕竖轴旋转。仔细想想其实改变一下第一次旋转的角度,完全不用第三次旋转就可以得到相同的效果。
1.3 四元数
四元数(Quaternion)定义为一个实部和三个虚部,是一种非常紧凑、没有奇异性的表达式。
关于四元数的理解可以看这篇博文《可视化四元数,愿你不在掉头发》,因为我实在弄不懂[尴尬脸]。
2 各种变换之间的转换
2.1 旋转向量&旋转矩阵
已知 [n, θ \theta θ] ,求R:
已知R ,求[n,
θ
\theta
θ] :
2.2 四元数&旋转矩阵
已知四元数 q = [q0,q1,q2,q4],求R:
已知R,求四元数:
2.3 四元数&旋转向量
绕单位轴u 旋转 θ \theta θ的四元数是:
下一节预告
在视觉SLAM问题中我们要估计和优化相机的位姿,把旋转矩阵作为优化变量时,会引入额外的约束(旋转矩阵是正交矩阵且行列式等于1),使优化变得困难。其实可以用李群和李代数之间的转换关系,将位姿估计变成无约束的优化问题,简化求解方式。