2、姿态控制核心概念:欧拉角与四元数、旋转矩阵、机体坐标系与地理坐标系、姿态表示方法对比

各位同学,欢迎来到姿态控制的核心章节。

说实话,搞飞控这么多年,我见过太多新手一上来就对着四元数公式硬啃,结果越学越懵。其实姿态表示没那么玄乎,说白了就是回答一个问题:飞机现在朝哪边? 今天我就带你把这块硬骨头啃下来。

2.1 两个坐标系:我们得有个参考

先聊坐标系。没有坐标系,你连「朝哪」都说不清楚。

地理坐标系(NED):也叫导航坐标系。N 指北(North),E 指东(East),D 指地(Down)。你可以想象成:站在地面上,面朝北,右手是东,脚底下是地。这个坐标系是固定的,我们用它来描述飞机的期望姿态。

机体坐标系(Body Frame):固定在飞机上的坐标系。X 轴指向机头,Y 轴指向右翼,Z 轴指向机腹。飞机一翻身,这个坐标系也跟着翻。

嗯,这里要注意:姿态控制的核心任务,就是把机体坐标系下的姿态,对齐到地理坐标系下的期望姿态。 我在做第一次无人机试飞时,就是因为搞反了 Y 轴方向,结果飞机一解锁就往反方向猛打舵,差点炸机。从那以后,我每次建坐标系都要反复核对三遍。

核心关系: 姿态 = 从机体坐标系到地理坐标系的旋转关系。

2.2 三种姿态表示方法

现在问题来了:怎么描述这个「旋转关系」?主要有三种方法,各有各的脾气。

2.2.1 欧拉角

欧拉角是最直观的。三个角度:滚转角(Roll, φ)俯仰角(Pitch, θ)偏航角(Yaw, ψ)。你想想看,飞机先绕 Z 轴转 ψ,再绕 Y 轴转 θ,最后绕 X 轴转 φ,就得到了当前姿态。

优点?一眼就能看懂。我调试时最喜欢看欧拉角,飞机歪没歪,一看便知。

但欧拉角有个致命缺陷——万向锁(Gimbal Lock)。当俯仰角接近 ±90° 时,滚转和偏航会混在一起,丢失一个自由度。我在做特技飞控时遇到过这个问题,飞机翻筋斗到顶点时,姿态解算直接崩了。所以,PX4 内部姿态控制不用欧拉角,只用它做显示和日志记录。

避坑指南: 千万不要在姿态控制环路里直接用欧拉角做微分或积分!我曾经见过有人用欧拉角做 PID,结果飞机在大角度机动时直接发散。原因就是欧拉角的非线性太强,小角度近似在大角度下完全失效。

2.2.2 旋转矩阵

旋转矩阵是一个 3×3 的矩阵,记作 R。它能把机体坐标系下的向量,旋转到地理坐标系下。

比如,机体坐标系下的一个向量 v_body,在地理坐标系下就是 v_ned = R · v_body

旋转矩阵没有万向锁问题,而且组合旋转非常方便——两个旋转矩阵相乘就行。但缺点也很明显:9 个元素,冗余度太高。而且每次更新都要保证它是正交矩阵,否则会引入误差。在嵌入式上跑,计算量偏大。

我个人习惯:旋转矩阵主要用于坐标变换,不直接用于姿态控制。比如把加速度计读数从机体坐标系转到地理坐标系,就用它。

2.2.3 四元数

四元数,这才是 PX4 姿态控制的「亲儿子」。

一个四元数 q = [q0, q1, q2, q3],其中 q0 是标量部分,[q1, q2, q3] 是矢量部分。它本质上描述了一个绕某个轴旋转一定角度的变换。

为什么 PX4 选它?三个原因:

  • 无万向锁:随便你怎么转,不会丢自由度。
  • 计算量小:只有 4 个元素,乘法比矩阵快得多。
  • 插值平滑:做姿态平滑过渡时,四元数球面线性插值(SLERP)非常优雅。

我记得第一次在 STM32F4 上跑四元数姿态解算时,算一次只要几微秒,比矩阵快了一个数量级。嗯,这就是嵌入式开发的现实——每一微秒都得省。

小技巧: 调试时可以把四元数转成欧拉角来看。PX4 提供了 quaternion.to_euler() 方法,方便你直观理解当前姿态。

2.3 三种方法对比

我整理了一张表,方便你对比记忆:

特性 欧拉角 旋转矩阵 四元数
元素个数 3 9 4
万向锁
计算量
直观性
PX4 用途 显示/日志 坐标变换 姿态控制核心

2.4 知识体系总览

下面这张图,是我自己总结的姿态控制核心知识结构。你可以把它当作本章的「地图」:

姿态控制核心概念知识体系 坐标系 地理坐标系 (NED) 机体坐标系 (Body) 姿态表示方法 欧拉角 旋转矩阵 四元数 核心应用 姿态控制环路 姿态解算 三种方法对比总结 欧拉角:直观但万向锁 旋转矩阵:无奇点但冗余 四元数:平衡之选,PX4 首选 → 用于显示和日志 → 用于坐标变换 → 用于姿态控制核心

2.5 我的选择建议

如果你刚开始学姿态控制,我建议你:

  1. 先用欧拉角建立直觉:理解滚转、俯仰、偏航分别对应什么动作。
  2. 再学四元数运算:重点掌握乘法、共轭、以及如何用四元数旋转向量。
  3. 最后理解旋转矩阵:当你需要做复杂的坐标变换时,它是最清晰的工具。

说白了,这三种方法不是互斥的,而是互补的。在 PX4 里,它们各司其职,共同支撑起整个姿态控制系统。你想想看,一个优秀的飞控工程师,应该能在这三种表示之间自由切换,就像说三种语言一样流畅。

本章核心: 姿态控制 = 用四元数描述旋转 → 计算期望姿态与当前姿态的误差 → 输出控制量。后面的章节,我们会一步步拆解这个过程。

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