我们想描述刚体在现实世界的旋转时,可以用旋转矩阵、旋转向量,四元数等来表示,虽然它们能描述旋转,但对我们人类是非常不直观的。很难说,给你一个旋转矩阵R或者四元数q,我们能想象出他是怎么旋转的。
欧拉角就可以很直观的展现这种旋转的过程。因为他把整个旋转过程分解成了绕指定坐标轴顺序的三次旋转。当然,由于分解方式有许多种,所以欧拉角也存在着不同的定义方法。
①绕轴顺序, 比如按ZYX顺序来转如下图。
当然,也有别的顺序,比如XYZ,ZXY,XZY等。
②围绕的轴的类型,是绕固定轴还是绕自身轴,上面那个例子就是绕自身轴转的,下面给出一个绕固定轴转的欧拉角情况。
可以看到下面每次的旋转都绕黑色实线构成的坐标系转动。
有了1.1的介绍,知道了欧拉角的表示有两个条件,一个是绕轴顺序,一个是绕的轴是不是固定轴,那么就有了内旋和外旋的概念。
①每次旋转是绕固定轴(一个固定参考系,比如世界坐标系)旋转,称为外旋。
②每次旋转是绕自身旋转之后的轴旋转,称为内旋。
人们对概念的理解很容易,最容易忽视的点就是我们通过欧拉角来进行旋转矩阵的计算的时候,用公式怎么表示这两种旋转方式:
下面我们用公式来表示上面两个图的表示情况:
解析:首先旋转顺序是ZYX,其次是绕自身轴旋转的,这种情况就叫做内旋。
注意:内旋是右乘!
我们按照ZYX的顺序从左到右依次相乘。
解析:首先旋转顺序是XYZ,其次是绕固定轴旋转的,这种情况就叫做外。
注意:内旋是左乘!
我们按照XYZ的顺序从右到左依次相乘。
值得注意的是:在旋转相同的角度的情况下不同的旋转顺序得到的姿态是不一样的。这个你可以自己去验证。
但是上面的例子得出来的旋转矩阵是一样的,这说明了绕ZYX顺序的内旋方式和绕XYZ的外旋方式,得到的姿态一样的,也就是他俩等价。
欧拉角的缺点就是万向锁问题。
上方为 ZYX 角定义。下方为 pitch=90 度时,第三次旋转与第一次滚转角相同,使得系统丢失了一个自由度。也就是说第一次旋转和第三次旋转虽说是绕各自不同的轴转动的,但实际上他绕的就是同一个轴。按照欧拉角的思想,只用两个角就可以表示出来啊,就是想让除了绕Z轴之外的两个轴,其中一个先转180°,然后再只调整一个轴就好了。
关于万向锁的理解这里有一篇博客,可以参考一下。
假设绕XYZ三个轴旋转的角度分别为α , β , γ,则三次旋转的旋转矩阵计算方法如下:
把这个套到1.2节的公式中就可以了。
一般情况下,每一个领域有自己默认的欧拉角定义,也就是24种的其中之一。比如经典力学中使用zxz,量子力学使用的是zyz,航空航天使用zyx/zxy。所以在跨行业或者跨模块协作的时候,一定要问清楚对方是哪一种欧拉角。
为什么不同专业选用的欧拉角不同呢?一个是传统,另一重要的原因是不同的转序和不同的轴对应的万向节死锁的位置是不一样的,因此每个专业都想把万向节死锁的位置安排在自己最不常用的位置。但是,无论哪一种欧拉角都是避免不了万向节死锁的。
欧拉角不可以做连续旋转的计算。
假设我们对物体进行一次欧拉角描述的旋转,三个欧拉角分别是(a1,a2,a3),之后我们再进行一次旋转,三个欧拉角描述是(b1,b2,b3),那么我们能否只用一次旋转(使用欧拉角描述(c1,c2,c3))来达到这两次旋转相同的效果呢?事实上这样是非常困难的,我们不能够仅仅使用(a1+b1,a2+b2,a3+b3)来得到这三个角度。一般来说我们会将欧拉角转换成旋转矩阵或者是四元数来进行连续旋转的叠加计算,之后再转换回欧拉角。但是这样做的次数多了可能会引入很大的误差导致旋转结果出错。因此比较好的方案是直接使用旋转矩阵或四元数来计算这类问题。
也非常期待您能关注我的微信公众号–“过千帆”,里面不仅有技术文章还有我的读书分享,希望您在那里也有收获。我们一起进步。