4、飞行器运动方程(上):坐标系定义与姿态表示

各位同学,欢迎来到第四章。

说实话,飞行器运动方程是整个飞控设计的「地基」。地基没打牢,后面盖多少层楼都是白搭。我见过不少新手,一上来就急着调PID参数,结果飞机在天上乱转,根本不知道问题出在哪。说白了,就是坐标系和姿态表示没搞明白。

这一章,咱们先把坐标系和欧拉角讲透。你想想看,连飞机在哪个坐标系下运动都没搞清楚,怎么设计控制律?

4.1 为什么需要多个坐标系?

一个很朴素的问题:描述飞机运动,一个坐标系不够吗?

不够。原因很简单——不同物理量的「舒适区」不一样。

  • 导航:关心飞机相对于地面的位置和航向。用地面坐标系最直观。
  • 控制:关心飞机的姿态(俯仰、滚转、偏航)。用机体坐标系最方便。
  • 气动:关心飞机相对于气流的迎角和侧滑角。用气流坐标系最自然。

我在项目中遇到过一件事:有个同事直接用机体坐标系下的速度去算导航位置,结果积分出来的位置误差越来越大。为什么?因为机体坐标系本身在旋转,速度矢量一直在变,直接积分当然会出问题。所以,坐标系之间的转换,是飞控的基本功。

4.2 地面坐标系(惯性系)

地面坐标系,也叫NED坐标系(North-East-Down)。

  • 原点:通常取起飞点或地面某固定点。
  • X轴:指向正北。
  • Y轴:指向正东。
  • Z轴:指向地心(向下)。

为什么Z轴向下?因为飞机的高度变化,用「向下为正」更符合传感器测量习惯。你想想看,气压高度计测的是大气压力,压力越大高度越低,正好对应Z轴正向。

地面坐标系是惯性参考系。在这个系里,牛顿第二定律可以直接用。飞机的导航、航迹规划,都在这个系里完成。

4.3 机体坐标系

机体坐标系固连在飞机上,随飞机一起运动。

  • 原点:飞机重心。
  • X轴:沿机体纵轴,指向机头。
  • Y轴:沿机体横轴,指向右翼。
  • Z轴:沿机体立轴,指向机身下方。

这个坐标系是飞控的「主战场」。陀螺仪测的是机体角速度,加速度计测的是机体加速度。控制律输出的舵面指令,也是基于机体坐标系来定义的。

嗯,这里要注意:机体坐标系的原点必须取在重心。如果取在别的位置,力矩方程会多出耦合项,计算起来非常麻烦。我早期做仿真时偷懒没注意这个,结果仿真结果和实际试飞总是对不上,排查了整整两天才发现是原点没对齐。

4.4 气流坐标系

气流坐标系,也叫风轴系。它和气流方向直接相关。

  • 原点:飞机重心。
  • X轴:沿空速方向,指向来流方向。
  • Z轴:在飞机对称面内,垂直于X轴,指向下方。
  • Y轴:由右手定则确定,指向右翼方向。

这个坐标系是气动工程师的最爱。升力、阻力、侧力,都是定义在气流坐标系下的。迎角α和侧滑角β,也是在这个系里定义的。

说白了,飞机飞行的本质,就是机体坐标系和气流坐标系之间的相对关系。迎角大了会失速,侧滑角大了会侧滑,这些都是飞控需要监控的关键参数。

4.5 欧拉角:姿态的「语言」

有了坐标系,怎么描述飞机从地面系转到体系?用欧拉角。

欧拉角是三个旋转角:滚转角φ俯仰角θ偏航角ψ

旋转顺序是:先偏航,再俯仰,最后滚转。这个顺序不是随便定的,它保证了不会出现「万向锁」问题(至少在常规飞行范围内不会)。

重要:欧拉角的旋转顺序是固定的。不同顺序会得到不同的姿态矩阵。飞控中常用的是Z-Y-X顺序(先偏航,再俯仰,最后滚转)。

从地面系到体系的旋转矩阵(方向余弦矩阵)为:

C_ned_to_body = 
[cosθ cosψ,  cosθ sinψ,  -sinθ;
 sinφ sinθ cosψ - cosφ sinψ,  sinφ sinθ sinψ + cosφ cosψ,  sinφ cosθ;
 cosφ sinθ cosψ + sinφ sinψ,  cosφ sinθ sinψ - sinφ cosψ,  cosφ cosθ]

这个矩阵看着复杂,但用起来很简单。你只需要把地面系下的向量左乘这个矩阵,就得到了体系下的向量。

4.6 欧拉角的局限性

欧拉角虽然直观,但有个致命问题:万向锁

当俯仰角θ接近±90°时,滚转和偏航的旋转轴会重合,导致丢失一个自由度。这时候,飞机的姿态就无法用欧拉角唯一表示了。

我曾经在试飞中遇到过这个情况。一架特技飞机做大仰角机动,俯仰角超过了85°,结果姿态解算直接发散。从那以后,我设计飞控时都会加一个判断:如果俯仰角超过80°,就切换到四元数模式。

警告:在俯仰角接近±90°时,欧拉角微分方程会出现奇点。此时必须使用四元数或其他姿态表示方法。千万不要在万向锁附近用欧拉角做控制,后果很严重。

4.7 欧拉角微分方程

飞控需要知道姿态的变化率。欧拉角的变化率和机体角速度之间的关系是:

[φ_dot]   [1,  sinφ tanθ,  cosφ tanθ] [p]
[θ_dot] = [0,  cosφ,       -sinφ     ] [q]
[ψ_dot]   [0,  sinφ/cosθ,  cosφ/cosθ] [r]

其中p、q、r是机体坐标系下的滚转、俯仰、偏航角速度(由陀螺仪测得)。

这个方程是飞控姿态解算的核心。每次控制循环,都要用这个方程更新欧拉角。

注意看,当θ接近±90°时,tanθ和1/cosθ会趋于无穷大。这就是万向锁的数学本质。

4.8 坐标系转换的工程实践

在实际飞控代码中,坐标系转换是高频操作。我建议你封装成独立的函数,方便调用。

一个典型的转换流程是:

  1. 陀螺仪测出p、q、r(机体角速度)
  2. 用欧拉角微分方程更新姿态
  3. 用姿态矩阵将加速度计数据从体系转到地面系
  4. 在地面系下进行导航解算
  5. 将控制指令从地面系转回体系,输出给舵面

每一步都涉及坐标系转换。如果转换错了,飞机就会乱飞。我见过最离谱的bug,是有人把旋转矩阵的转置搞反了,结果飞机一上天就倒着飞。

小技巧:写代码时,可以在每个坐标系转换函数里加一个「自检」:用单位向量测试一下,看转换前后长度是否保持不变。如果长度变了,说明矩阵写错了。

4.9 本章小结

这一章我们讲了三个坐标系:地面系、体系、气流系。还讲了欧拉角及其微分方程。

说白了,飞控的核心就是在这三个坐标系之间来回切换。地面系管导航,体系管控制,气流系管气动。欧拉角是连接它们的桥梁。

下一章,我们会用这些坐标系工具,推导出完整的六自由度运动方程。到时候你会发现,坐标系定义清楚了,方程推导就是水到渠成的事。

嗯,今天就到这里。回去把欧拉角微分方程手推一遍,别偷懒。