1、姿态估计基础:什么是姿态?欧拉角与四元数入门,为什么需要滤波?

各位同学,欢迎来到《互补滤波姿态估计算法实战》的第一讲。

我是你们这门课的老朋友。做了十几年嵌入式算法,我最大的感触就是:姿态解算,是所有运动控制、导航、AR/VR设备的灵魂。你想想看,一个四轴飞行器如果不知道自己“头朝哪”,它怎么悬停?一个手机如果不知道自己是横着还是竖着,屏幕怎么翻转?

所以,咱们今天先把地基打牢。这一章,我们不写一行代码,但我会把姿态的“根”给你讲透。

1.1 到底什么是“姿态”?

说白了,姿态就是描述一个物体在三维空间里“怎么摆放”的。

举个例子:你手里拿着一部手机。

  • 位置:手机在桌子上,还是在口袋里?这是坐标问题。
  • 姿态:手机屏幕是朝上还是朝下?摄像头是朝东还是朝西?这是角度问题。

在工程上,我们通常用一个坐标系来描述姿态。最常见的是:

  • 地理坐标系(NED):北-东-地。想象你站在操场上,X轴指北,Y轴指东,Z轴指向地心。
  • 机体坐标系(Body):固定在物体上。比如飞机的机头方向是X,右翼是Y,垂直向下是Z。

姿态解算,就是求这两个坐标系之间的旋转关系。嗯,这里要注意,这个旋转关系不是唯一的,它可以用好几种数学工具来表达。

核心概念:姿态 = 从“地理坐标系”到“机体坐标系”的旋转映射。

1.2 欧拉角:最直观,但有个大坑

欧拉角,大家应该不陌生。它就是三个角度:横滚(Roll)、俯仰(Pitch)、偏航(Yaw)

我个人习惯用“飞机比喻”来理解:

  • Roll(Φ):飞机绕机头轴线旋转,就像你侧身翻滚。
  • Pitch(θ):飞机抬头或低头。
  • Yaw(ψ):飞机水平转向,就像你原地转圈。

欧拉角的好处是物理意义极其清晰。你一看 Roll=30°,就知道飞机向右倾斜了30度。调试的时候,我经常直接打印欧拉角看波形,非常直观。

但是,欧拉角有一个致命缺陷——万向锁(Gimbal Lock)。

我在项目中遇到过这么一件事:有一次做云台控制,当俯仰角接近±90°时,横滚和偏航突然“打架”了,云台瞬间乱转。为什么会这样?因为当 Pitch=90° 时,Roll 和 Yaw 的旋转轴重合了,系统丢失了一个自由度。

所以,欧拉角不适合做全姿态的插值和连续旋转。它只适合用来给人看,或者在小角度变化时使用。

避坑指南:我曾经因为没处理好万向锁,导致一个无人机在倒飞时姿态解算崩溃。记住,只要你的物体可能经历大角度运动(比如翻转),就别用欧拉角做内部运算。

1.3 四元数:数学上完美,但难理解

既然欧拉角有坑,那用什么?答案是四元数

四元数听起来玄乎,其实就是一个超复数:q = w + xi + yj + zk。其中 w 是实部,x、y、z 是虚部,且满足 i² = j² = k² = ijk = -1。

你不需要深究它的数学推导,只需要记住它的物理意义

  • 四元数描述的是绕一个单位向量 (x, y, z) 旋转 θ 角度
  • 其中 w = cos(θ/2),(x, y, z) = sin(θ/2) * 旋转轴方向。

四元数最大的优点是:没有奇点,可以平滑插值,计算效率高。在嵌入式里,我们几乎都用四元数做内部运算。

举个例子,把欧拉角转成四元数:

// 假设 Roll=30°, Pitch=20°, Yaw=10°
// 先转弧度,再计算
float cy = cos(yaw * 0.5);
float sy = sin(yaw * 0.5);
float cp = cos(pitch * 0.5);
float sp = sin(pitch * 0.5);
float cr = cos(roll * 0.5);
float sr = sin(roll * 0.5);

q.w = cy * cp * cr + sy * sp * sr;
q.x = cy * cp * sr - sy * sp * cr;
q.y = sy * cp * sr + cy * sp * cr;
q.z = sy * cp * cr - cy * sp * sr;

我的小技巧:调试时,我习惯把四元数转成欧拉角再打印,因为人脑对角度更敏感。但内部运算,永远用四元数。

1.4 为什么需要滤波?传感器都是“骗子”

好,现在我们知道姿态可以用四元数表示。那怎么得到它?靠传感器。

常用的传感器有三个:

传感器 测量什么 优点 缺点
陀螺仪 角速度 动态响应快,高频准 有零偏漂移,积分会发散
加速度计 加速度(含重力) 长期稳定,能测倾角 易受振动干扰,不能测偏航
磁力计 地磁场 能测偏航角 易受铁磁干扰,精度差

你想想看:

  • 只用陀螺仪?积分几分钟,角度就飘到天边去了。
  • 只用加速度计?稍微一震动,角度就乱跳。
  • 只用磁力计?在室内或者靠近金属,数据完全不可信。

所以,我们需要滤波。

滤波的本质,就是取长补短

  • 陀螺仪提供短期精度(高频好,但长期漂移)。
  • 加速度计和磁力计提供长期参考(低频好,但短期噪声大)。

互补滤波,就是用一个低通滤波器处理加速度计/磁力计,用一个高通滤波器处理陀螺仪,然后把它们加起来。说白了,就是相信陀螺仪的动态变化,但用加速度计和磁力计来“拉”住它,不让它飘走

一句话总结:没有滤波的姿态解算,就像闭着眼睛走路——刚开始还行,走几步就偏了。

1.5 本章知识体系:一张图看懂

下面这张图,是我手绘的本章核心逻辑。你可以把它当作整个课程的“导航图”。

姿态估计基础:知识体系 姿态是什么? 数学表示方法 传感器测量原理 为什么需要滤波? 欧拉角(直观) 四元数(无奇点) 陀螺仪(动态) 加速度计(倾角) 磁力计(偏航) 互补滤波 = 陀螺仪(高通)+ 加速度计/磁力计(低通)

这张图你看懂了吗?从“姿态是什么”出发,我们分了三路:数学表示、传感器、滤波需求。最终汇合到互补滤波这个核心方法上。后面的章节,我们会一步步把这个框架填满。

课后思考:如果你只用加速度计,能不能算出完整的姿态(Roll、Pitch、Yaw)?为什么?想明白这个问题,你就理解了为什么需要磁力计。


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