欧拉角定义:
在刚体运动学中常用欧拉角作为刚体绕固定轴旋转的描述。引入的三个角度(α,β,γ)
欧拉旋转可以通过一定的顺序组合来实现,目前组合方式一共分为24种方案,统一被称为转角排列设定法,12种称为固定角,另外12种为欧拉设定法,本文重点讲解一种目前流行的欧拉设定方式:Z-Y-X欧拉旋转,如果对其他的方法感兴趣,后期我再单独更新。
Z-Y-X欧拉角:把坐标{A}和坐标{B}重合,把{B}绕Z旋转α角度,{B}再绕Y旋转β角度,最后{B}再绕X旋转γ角度,这种表示的方法,每次都是绕着运动{B}坐标的各个轴进行运动,而不是绕{A}固定轴。
欧拉角转化为旋转矩阵:
任何旋转可以通过绕着三个轴分别旋转三个角度得到,组合起来就是一个旋转矩阵。以下分别是绕着Z-Y-X 轴旋转的三个旋转矩阵。
综合上述即可得到{B}相对于{A}得最终旋转姿态(Z-Y-X):
万向锁问题
在使用欧拉角表示旋转时,可能会遇到万向锁(gimbal lock)问题
【 关于死锁问题的详细介绍可以参考如下文章:有了欧拉角,为什么还要引入四元数?欧拉旋转方式与万向节死锁问题-优快云博客】
当两个旋转轴重合时,物体的旋转自由度会降低,导致无法表示一些旋转。这种情况下,可以通过调整欧拉角序列或使用其他表示旋转的方法(如四元数)来解决。
我们也可以以下公式来证明,
若绕X 旋转角度为90度,则上式变为:
此时,旋转自由度变为2。
欧拉角与四元数之间的转换
一个旋转对应的四元数的表示是唯一的,但对应的欧拉角会因定义的不同而不同,因此在转换时一定要弄清楚自己的目标欧拉角是如何定义的。
欧拉角的转换代码可以参考:C++实现四元数和欧拉角之间的相互转化_c++实现四元数转欧拉角-优快云博客