结合 高翔老师的著作《视觉SLAM十四讲:从理论到实践》,加上小白的工程经验共同完成。建议作为笔记功能反复使用。
一、欧拉角的定义
无论是旋转向量还是旋转矩阵,虽然它们能描述旋转,但对我们人类来说是非常不直观的。当我们看到它们时,很难想象出这个旋转究竟是什么样的。 而欧拉角则提供了一种非常直观的方式来描述旋转——它使用了三个分离的转角,把一个旋转分解成三次绕不同轴的旋转。
由于分解方式有很多种,所以欧拉角也存在着不同的定义方法。比如说,当我们先绕 X 轴旋转,再绕 Y 轴旋转,最后绕 Z 轴旋转,就得到了一个 XYZ 轴的旋转。如果讨论更细一些,还需要区分每次旋转是绕固定轴旋转的,还是绕旋转之后的轴旋转的。
二、"偏航-俯仰-滚转"
欧拉角当中比较常用的一种,便是用“偏航-俯仰-滚转”(yaw-pitch-roll)三个角度来描述一个旋转的。由于它等价于 ZYX 轴的旋转,我们就可以以 ZYX 为例。假设一个刚体的前方(朝向我们的方向)为X轴,右侧为Y轴,上方为Z轴,那么,ZYX 转角相当于把任意旋转分解成以下三个轴上的转角:
- 绕物体的 Z 轴旋转,得到偏航角 yaw;
- 绕旋转之后的Y轴旋转,得到俯仰角 pitch;
- 绕旋转之后的Z轴旋转,得到滚转角 roll;
此时,我们可以使用 这样一个三维的向量描述任意旋转。这个向量十分的直观,我们可以从这个向量想象出旋转的过程。 rpy角的旋转顺序是ZYX。
三、欧拉角的缺点
欧拉角的一个重大缺点是会碰到著名的万向锁问题(Gimbal Lock):在俯仰角为°时,第一次旋转与第三次旋转将使用同一个轴,使得系统丢失了一个自由度(由三次旋转变成了两次旋转)。理论上可以证明,只要我们想用三个实数来表达三维旋转时,都会不可避免地碰到奇异性的问题。由于这种原因,欧拉角不适于插值和迭代,往往只用在人机交互中。
我们也很少在SLAM程序中直接使用欧拉角表示姿态,同样不会在滤波或优化中使用欧拉角表示旋转(因为它具有奇异性)。不过,若你想验证自己的算法是否有错时,转换成欧拉角能够快速辨认结果的正确与否。
《视觉SLAM十四讲:从理论到实践》 PDF资源
下载链接:Robot_Starscream的资源 仅供各位研究员试读,请购买纸质书籍。