4. 姿态表示方法(上):欧拉角(ZYX、ZYZ等序列)、万向锁问题、欧拉角的应用限制

各位同学,今天我们聊一个绕不开的话题——欧拉角。

说实话,我刚入行那会儿,觉得欧拉角特别直观。俯仰、偏航、滚转,三个角度一摆,飞行器的姿态就出来了。但后来在项目中吃了不少亏,才明白这东西远没有看起来那么简单。

今天我们就把它彻底讲透。

4.1 什么是欧拉角?

欧拉角的核心思想很简单:用三个依次旋转的角度,来描述一个刚体在三维空间中的朝向

你想想看,一个物体从初始姿态转到目标姿态,可以拆成三步:先绕某个轴转一个角度,再绕另一个轴转一个角度,最后再绕第三个轴转一个角度。这三个角度,就是欧拉角。

但问题来了——先绕哪个轴?后绕哪个轴? 顺序不同,结果完全不同。

4.2 常见的欧拉角序列

工程中最常用的有两类序列:

4.2.1 ZYX 序列(航空界标准)

这个序列在飞行器控制里最常见。顺序是:

  1. 先绕 Z 轴转 ψ(偏航角,Yaw)
  2. 再绕 Y 轴转 θ(俯仰角,Pitch)
  3. 最后绕 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 序列(机器人界常用)

这个序列在机械臂、卫星姿态控制里很常见。顺序是:

  1. 先绕 Z 轴转 α
  2. 再绕 Y 轴转 β
  3. 最后再绕 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 本章知识体系

下面这张图,帮你理清本章的核心逻辑:

欧拉角知识体系 欧拉角 常见序列 ZYX(航空) ZYZ(机器人) 核心问题 万向锁 非唯一性 应用限制 小角度适用 大角度慎用 结论:直观但有限,大角度用四元数
📌 个人经验: 如果你在做飞控,建议把欧拉角只用在 显示和日志 层面。控制律内部,老老实实用四元数。我见过太多因为欧拉角翻车的案例了。

好了,这一讲就到这里。欧拉角是姿态表示的基础,但它的局限性也很明显。下一讲我们会聊四元数——那个更优雅、更稳定的姿态表示方法。


公众号:蓝海资料掘金营,微信deep3321