第1章:IMU传感器模型——飞控感知世界的“眼睛”

大家好,我是你们的老朋友。今天咱们正式开讲多旋翼飞控EKF姿态估计的第一章——IMU传感器模型。说白了,就是搞清楚飞控上那几个小芯片到底是怎么“看”世界的。

我刚开始做飞控那会儿,总觉得传感器数据读出来就能直接用。结果呢?飞机悬停不到三秒就开始晃,像喝醉了酒一样。后来才明白——你不理解传感器的“脾气”,它就跟你耍性子。

1.1 加速度计测量模型(比力方程)

加速度计测的是什么?很多人以为是“重力加速度”。其实不对。它测的是比力——也就是除了重力之外,作用在传感器上的所有外力产生的加速度。

数学上写成这样:

a_m = a - g + b_a + n_a

其中:

  • a_m:加速度计的实际输出
  • a:物体本身的加速度(运动加速度)
  • g:重力加速度(注意符号,通常取向上为正)
  • b_a:加速度计零偏
  • n_a:测量噪声

你想想看,如果飞机悬停在空中不动,a = 0,那么加速度计读到的就是 -g + b_a + n_a。这就是为什么静止时加速度计输出不是0,而是大约9.8 m/s²(方向朝上)。

关键理解:加速度计不能区分重力加速度和运动加速度。这是EKF中需要融合陀螺仪和磁力计的根本原因。

我在项目中遇到过一个问题:飞机做急加速时,加速度计读到的“重力方向”完全跑偏了。如果你只用加速度计算姿态,那结果就是灾难性的。嗯,这里要注意——加速度计只在低动态情况下可信。

1.2 陀螺仪测量模型(角速度+漂移)

陀螺仪就相对“老实”一些。它测的是角速度,也就是飞机绕三个轴转动的快慢。但陀螺仪有个大毛病——漂移

ω_m = ω + b_g + n_g

参数说明:

  • ω_m:陀螺仪输出
  • ω:真实角速度
  • b_g:陀螺仪零偏(随时间缓慢变化)
  • n_g:测量噪声

陀螺仪的零偏 b_g 是个“慢性子”。它不会突然跳变,但会随着温度、时间慢慢漂移。我曾经遇到过一架飞机,起飞时姿态好好的,飞了五分钟就开始慢慢倾斜——就是陀螺仪零偏在“作妖”。

避坑指南:我曾经因为忽略陀螺仪零偏的在线估计,导致飞机在长航时任务中姿态发散。后来在EKF中加入了零偏状态量,才彻底解决这个问题。

陀螺仪的噪声 n_g 通常是高频的,可以用低通滤波器处理。但零偏不行——它是个低频分量,滤波反而会把它保留下来。所以EKF里必须把零偏当成一个状态量去估计。

1.3 磁力计测量模型

磁力计测的是地球磁场方向。说白了,就是帮你找到“北”。但问题是——地球磁场很弱,周围随便一个电机、一根导线都能干扰它。

m_m = R * m_e + b_m + n_m

其中:

  • m_m:磁力计输出
  • R:旋转矩阵(从地理系到机体系)
  • m_e:当地地磁场矢量(已知,可查表)
  • b_m:硬铁干扰(传感器附近的固定磁场)
  • n_m:测量噪声

磁力计最让人头疼的就是硬铁干扰。我调试过一台四轴,磁力计读数在机头朝北和朝南时差了将近20度。后来发现是电源线走线离磁力计太近了。

个人经验:我建议在飞控板上给磁力计留出“隔离区”,远离大电流走线和电机。如果实在避不开,那就必须在EKF里把硬铁干扰也当成状态量去估计。

磁力计的另一个问题是倾角依赖。如果飞机倾斜了,磁力计测到的水平分量会变小,导致航向估计不准。所以一般会先用加速度计算出俯仰和横滚,再把磁力计投影到水平面上去算航向。

1.4 传感器噪声与偏差特性

好了,三个传感器都介绍完了。咱们来总结一下它们的“性格”:

传感器 主要误差来源 频率特性 EKF中的处理方式
加速度计 零偏、运动加速度干扰 低频稳定,高频噪声 低动态时信任,高动态时降权
陀螺仪 零偏漂移、积分误差 高频噪声,低频漂移 零偏作为状态量估计
磁力计 硬铁干扰、软铁干扰 低频稳定,易受环境干扰 硬铁干扰作为状态量估计

噪声特性一般用Allan方差来分析。说白了,就是看不同时间尺度下噪声的“大小”。我习惯在传感器上电后先采集几分钟静态数据,算一下Allan方差,确定噪声的量化噪声和随机游走系数。这些参数会直接用到EKF的噪声协方差矩阵里。

核心要点:传感器模型不是摆设。你给EKF喂什么样的模型,它就给你什么样的估计精度。模型越准,估计越稳。

知识体系总览

下面这张图是我自己画的,把本章的核心逻辑串起来了。你看一遍就能明白三个传感器在EKF里各自扮演什么角色:

IMU传感器模型与EKF姿态估计核心逻辑 加速度计 测量:比力 a_m = a - g + b_a + n_a 特点:低频可信,高动态不可信 EKF角色:提供俯仰/横滚参考 陀螺仪 测量:角速度 ω_m = ω + b_g + n_g 特点:高频好,低频漂移 EKF角色:姿态预测(状态递推) 磁力计 测量:磁场 m_m = R*m_e + b_m + n_m 特点:易受干扰,需校准 EKF角色:提供航向参考 EKF姿态估计器 状态量:四元数 + 陀螺零偏 + 磁力计硬铁 预测步:陀螺仪积分 | 更新步:加速度计+磁力计 输出:姿态角(横滚/俯仰/航向)

这张图你看懂了吗?三个传感器各司其职:陀螺仪负责“猜”下一时刻的姿态,加速度计和磁力计负责“纠正”猜错的部分。EKF就是那个“裁判”,把两边的信息按置信度加权融合。

我的习惯:每次调参前,我都会先画一张这样的逻辑图。把传感器模型、状态量、观测方程都标清楚。代码写起来就顺了,debug也快。

好了,第一章就到这里。传感器模型是EKF的“地基”,地基不稳,上面盖什么楼都得塌。下一章咱们会讲姿态的数学表示——四元数、旋转矩阵这些东西。到时候你会发现,有了传感器模型的基础,理解姿态表示就轻松多了。


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