4. 姿态表示方法(上):欧拉角(ZYX、ZYZ等序列)、万向锁问题、欧拉角的应用限制
各位同学,今天我们聊一个绕不开的话题——欧拉角。
说实话,我刚入行那会儿,觉得欧拉角特别直观。俯仰、偏航、滚转,三个角度一摆,飞行器的姿态就出来了。但后来在项目中吃了不少亏,才明白这东西远没有看起来那么简单。
今天我们就把它彻底讲透。
4.1 什么是欧拉角?
欧拉角的核心思想很简单:用三个依次旋转的角度,来描述一个刚体在三维空间中的朝向。
你想想看,一个物体从初始姿态转到目标姿态,可以拆成三步:先绕某个轴转一个角度,再绕另一个轴转一个角度,最后再绕第三个轴转一个角度。这三个角度,就是欧拉角。
但问题来了——先绕哪个轴?后绕哪个轴? 顺序不同,结果完全不同。
4.2 常见的欧拉角序列
工程中最常用的有两类序列:
4.2.1 ZYX 序列(航空界标准)
这个序列在飞行器控制里最常见。顺序是:
- 先绕 Z 轴转 ψ(偏航角,Yaw)
- 再绕 Y 轴转 θ(俯仰角,Pitch)
- 最后绕 X 轴转 φ(滚转角,Roll)
为什么是这个顺序?我个人的理解是:偏航改变航向,俯仰改变高度,滚转改变姿态。从操作逻辑上讲,这个顺序最自然。
对应的旋转矩阵(从机体坐标系到惯性坐标系):
R = Rz(ψ) * Ry(θ) * Rx(φ)
展开后:
R = [
[cosθ·cosψ, sinφ·sinθ·cosψ - cosφ·sinψ, cosφ·sinθ·cosψ + sinφ·sinψ],
[cosθ·sinψ, sinφ·sinθ·sinψ + cosφ·cosψ, cosφ·sinθ·sinψ - sinφ·cosψ],
[-sinθ, sinφ·cosθ, cosφ·cosθ]
]
嗯,这个矩阵看着有点复杂,但实际用的时候,记住结构就好。
4.2.2 ZYZ 序列(机器人界常用)
这个序列在机械臂、卫星姿态控制里很常见。顺序是:
- 先绕 Z 轴转 α
- 再绕 Y 轴转 β
- 最后再绕 Z 轴转 γ
你可能会问:为什么绕同一个轴转两次?
因为有些场景下,我们需要避免某些奇异性。ZYZ 序列在某些应用中比 ZYX 更稳定。我在做卫星姿态仿真时,就经常用 ZYZ 序列来避免一些数值问题。
4.3 万向锁问题——欧拉角的死穴
好,接下来是重点。万向锁,英文叫 Gimbal Lock。
什么是万向锁?
简单说:当第二个旋转角达到 ±90° 时,第一个和第三个旋转轴会重合,导致丢失一个自由度。
举个例子。用 ZYX 序列,当俯仰角 θ = 90° 时:
- 第一次绕 Z 轴转 ψ
- 第二次绕 Y 轴转 90°
- 第三次绕 X 轴转 φ
这时候你会发现:第一次和第三次的旋转轴,其实都在同一个平面内。你本来有三个自由度,现在只剩下两个了。
我曾经在一个无人机项目中遇到过这个问题。当时飞机在做大角度机动,俯仰接近 90°,结果偏航和滚转的控制完全乱套了。查了半天才发现是万向锁导致的。从那以后,我对欧拉角的限制就特别敏感。
4.4 欧拉角的应用限制
总结一下,欧拉角在实际工程中有几个硬伤:
| 问题 | 具体表现 | 影响 |
|---|---|---|
| 万向锁 | 第二个角 ±90° 时丢失自由度 | 控制失效、姿态解算错误 |
| 非唯一性 | 同一姿态对应多组欧拉角 | 插值、平滑处理困难 |
| 非线性强 | 三角函数运算,计算量大 | 实时性受限 |
| 不连续 | 角度跳变(如 359°→0°) | 控制指令突变 |
4.5 什么时候该用欧拉角?
我个人建议:
- ✅ 可以用: 地面站显示、飞行数据记录、小角度姿态控制(±30°以内)
- ❌ 别用: 全姿态控制、姿态插值、大角度机动、卫星姿态控制
说白了,欧拉角是个好工具,但用之前一定要想清楚:你的系统会不会遇到万向锁? 如果会,趁早换方案。
4.6 本章知识体系
下面这张图,帮你理清本章的核心逻辑:
好了,这一讲就到这里。欧拉角是姿态表示的基础,但它的局限性也很明显。下一讲我们会聊四元数——那个更优雅、更稳定的姿态表示方法。
公众号:蓝海资料掘金营,微信deep3321