欧拉角

Snipaste_2023-05-19_09-39-13

定义

​ 无论是旋转向量还是旋转矩阵,虽然它们能描述旋转,但对我们人类来说是非常不直观的。当我们看到它们时,很难想象出这个旋转究竟是什么样的。 而欧拉角则提供了一种非常直观的方式来描述旋转——它使用了三个分离的转角,把一个旋转分解成三次绕不同轴的旋转。

由于分解方式有很多种,所以欧拉角也存在着不同的定义方法。比如说,当我们先绕 X 轴旋转,再绕 Y 轴旋转,最后绕 Z 轴旋转,就得到了一个 XYZ 轴的旋转。如果讨论更细一些,还需要区分每次旋转是绕固定轴旋转的,还是绕旋转之后的轴旋转的。

角度定义

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

绕物体的 Z 轴旋转,得到偏航角 yaw; 绕旋转之后的Y轴旋转,得到俯仰角 pitch; 绕旋转之后的Z轴旋转,得到滚转角 roll; 此时,我们可以使用 这样一个三维的向量描述任意旋转。这个向量十分的直观,我们可以从这个向量想象出旋转的过程。 rpy角的旋转顺序是ZYX。

局限性

​ 欧拉角的一个重大缺点是会碰到著名的万向锁问题(Gimbal Lock):在俯仰角为°时,第一次旋转与第三次旋转将使用同一个轴,使得系统丢失了一个自由度(由三次旋转变成了两次旋转)。理论上可以证明,只要我们想用三个实数来表达三维旋转时,都会不可避免地碰到奇异性的问题。由于这种原因,欧拉角不适于插值和迭代,往往只用在人机交互中。

我们也很少在SLAM程序中直接使用欧拉角表示姿态,同样不会在滤波或优化中使用欧拉角表示旋转(因为它具有奇异性)。不过,若你想验证自己的算法是否有错时,转换成欧拉角能够快速辨认结果的正确与否。

最后修改:2023 年 11 月 22 日
如果觉得我的文章对你有用,请随意赞赏