欧拉角

前两篇

前两个系列讲的是轴角法和四元数,这两个可以归纳为用一次旋转来表示姿态。这篇来讲讲用三次旋转来表示姿态的:欧拉角。

旋转是有三个自由度的。轴角法和四元数把两个自由度给了轴,一个自由度给了旋转角。欧拉角的旋转轴是确定的,因此把三个自由度都给了旋转角。

当然,你完全可以使用三个自由度定义一种姿态的表示方式,保证三个自由度是相互独立的就可以。比如我来定义一种:绕Z轴旋转角度θ1,再绕(1,fy,0)轴旋转θ2,这样就用[θ1,fy,θ2]这三个独立的变量定义了一种姿态表示方式,这种姿态的表示方式是可以表示任何一种姿态的。但是呢,这种姿态表述方法实在没什么优点,至少目前没有发现。

因此经过大佬们几百年的努力,选出了两种最好的旋转表示方法。欧拉角和轴角法。

欧拉角之所以叫欧拉角,是因为欧拉大神的欧拉旋转定理:

Euler states the theorem as follows:
Theorema. Quomodocunque sphaera circa centrum suum conuertatur, semper assignari potest diameter, cuius directio in situ translato conueniat cum situ initiali.
or (in English):
When a sphere is moved around its centre it is always possible to find a diameter whose direction in the displaced position is the same as in the initial position.

具体的证明我就不讲了,讲了你也不会,主要是我也看不懂。

我来粗鄙的说明一下:

欧拉角用三次独立的绕确定的轴旋转角度来表示姿态。

  1. 是确定的轴而不是固定的轴,因为欧拉角可以绕固定轴和运动轴。
  2. 这三个欧拉角可以表示任意的姿态
  3. 万向节死锁的是欧拉角的弊端,意思是在某些姿态下,欧拉角的三自由度失去了一个自由度。本篇不涉及万向节死锁,这个已经讲不出来花样了。

现在看一下最常见的一种欧拉角旋转方式,多用于航空航天领域。

gif1 航空航天中使用的欧拉角

最初,两个坐标系是重合的。

第一次旋转:绕z轴旋转一个角度 ,通常称为yaw角。

绕z轴旋转 配合gif1理解

第二次旋转:再继续绕第一次旋转后的y轴旋转一个角度,通常称为俯仰角。

y轴旋转 配合gif1理解

第三次旋转:再继续绕第二次旋转后x轴旋转一个角度 ,我们通常称为滚转角。

x轴旋转 配合gif1理解

我们分别绕了旋转后的zyx轴分别旋转了一个角度,这就是24种欧拉角表示方法的其中一种。

24种欧拉角??? 没错,就是这么多。

欧拉角有两种分类方法:

第一种是按照旋转的轴的顺序,一共12种。

三个轴只用两个的:Proper Euler angles (z−x−z, x−y−x, y−z−y, z−y−z, x−z−x, y−x−y)
三个轴全都用的:Tait-Bryan angles (x−y−z, y−z−x, z−x−y, x−z−y, z−y−x, y−x−z)

第二种是按照绕不动的轴(初始的世界坐标系),还是按照转动后的坐标轴(一直在转动的本体坐标系)来旋转。也就是固定轴旋转和运动轴旋转两大类。

用专业一点说明一下:

内旋Intrinsic rotations:绕运动轴
外旋 Extrinsic rotations: 绕固定轴

因此一共有(Intrinsic rotations + Extrinsic rotations)*(Proper Euler angles+Tait-Bryan angles) = 24种

内旋Intrinsic rotations:绕运动轴

外旋 Extrinsic rotations: 绕固定轴

一个很有意思却很不直观的结论:三次绕固定轴旋转的最终姿态和以相反顺序三次绕运动轴旋转的最终姿态相同。

重点来了,敲黑板!!!

一般情况下,每一个领域有自己默认的欧拉角定义,也就是24种的其中之一。比如经典力学中使用zxz,量子力学使用的是zyz,航空航天使用zyx/zxy。所以在跨行业或者跨模块协作的时候,一定要问清楚对方是哪一种欧拉角。

为什么不同专业选用的欧拉角不同呢?一个是传统,另一重要的原因是不同的转序和不同的轴对应的万向节死锁的位置是不一样的,因此每个专业都想把万向节死锁的位置安排在自己最不常用的位置。但是,无论哪一种欧拉角都是避免不了万向节死锁的。

还有一个很容易被忽略却很重要的点,姿态和坐标轴的定义有非常大的关系,每个行业都有自己一套坐标轴的定义。

比如航空领域中,滚转俯仰偏航角有明确的物理意义。如果对导航的定义是是北(x)东(y)地(z),那这种情况下,飞机本身的坐标系定义就必须是:前(x)右(y)下(z),转序就是zyx(321)。如果对导航的定义是是东(x)北(y)天(z), 那这种情况下,飞机本身的坐标系定义就必须是:右(x)前(y)上(z).转序就是zxy(312)。如果你不小心弄混了用错了,那你的小飞机必炸无疑。

这种坐标轴的严格对应关系和欧拉角转序有着非常大的关系。很多时候我们知其然,但不知其所以然,仔细深究下去是很有意思的。

那我问一个问题,假设我就想定义导航系为东(x)南(y)地(z),那我本体系要如何定义?用什么转序才能表示出和原来一样物理意义的俯仰滚转偏航角呢?

再来谈谈欧拉角的优缺点:

优点:

1 简单,三个数就能表示出来

2 直观,用手就能比划出姿态

缺点:

1 万向节死锁

2 没办法进行旋转的叠加,必须借助旋转矩阵。

3 插值误差大,因为是三个轴进行的旋转。但是四元数就十分适合插值

4 欧拉角的种类太多,不同专业背景之间的沟通容易出问题。

5 欧拉角的转换很容易出bug,一定要注意,在最后一个系类中我们讲一下

欧拉角的优点缺点是如此之明显,让人又爱又恨。

因此,在设计到计算的程序中,最好都不要使用欧拉角。而可视化的显示肯定是欧拉角。

当然,没有旋转矩阵的辅助,欧拉角是瘸腿的。欧拉角+旋转矩阵才能VS轴角法+四元数。

弄清楚了每一张图片的含义并理解了才是真正的理解了。

未完待续,旋转矩阵,下一篇见。

刚体旋转系列

专栏里每一篇都是我一个字一个字打的,都是我认为的原创干货。

欢迎指正讨论,转载请注明,认同请点赞。

这个系列的文章很容易出错,希望大佬们多多指正补充。

仅仅收藏是学不会的,还得点赞。