第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里各自扮演什么角色:
这张图你看懂了吗?三个传感器各司其职:陀螺仪负责“猜”下一时刻的姿态,加速度计和磁力计负责“纠正”猜错的部分。EKF就是那个“裁判”,把两边的信息按置信度加权融合。
我的习惯:每次调参前,我都会先画一张这样的逻辑图。把传感器模型、状态量、观测方程都标清楚。代码写起来就顺了,debug也快。
好了,第一章就到这里。传感器模型是EKF的“地基”,地基不稳,上面盖什么楼都得塌。下一章咱们会讲姿态的数学表示——四元数、旋转矩阵这些东西。到时候你会发现,有了传感器模型的基础,理解姿态表示就轻松多了。
公众号:蓝海资料掘金营,微信deep3321