第1章:传感器模型与数据流

大家好,我是你们的飞控算法讲师。今天咱们聊聊EKF2融合算法的基础——传感器模型与数据流。说白了,就是搞清楚每个传感器到底在干什么,它们的数据长什么样,又是怎么喂给EKF2这个“大脑”的。

我个人习惯,在调参之前,先花时间把传感器特性摸透。你想想看,如果连传感器的脾气都不了解,那调参不就是瞎蒙吗?

1.1 IMU:飞控的“内耳”

IMU(惯性测量单元)是飞控里最核心的传感器。它包含加速度计和陀螺仪。加速度计测量的是比力,也就是物体受到的除了重力以外的加速度。陀螺仪测量的是角速度。

数据特性:

  • 高频输出:通常能达到200Hz到1kHz。EKF2里一般用200Hz或400Hz。
  • 噪声大:尤其是消费级的MEMS传感器。加速度计有振动噪声,陀螺仪有角速率随机游走。
  • 有偏置:陀螺仪的零偏会随时间漂移。加速度计也有零偏,但通常比陀螺仪稳定。
  • 对温度敏感:温度变化会导致偏置和尺度因子变化。

避坑指南:我曾经在项目里遇到过,因为IMU安装位置离电机太近,导致振动噪声直接淹没了加速度计的信号。结果就是EKF2的位置估计疯狂跳动,飞机根本稳不住。后来加了减震垫,问题才解决。

1.2 GPS:飞控的“眼睛”

GPS提供位置和速度信息。但它的更新频率很低,通常只有5Hz到10Hz。而且,在城市峡谷或树荫下,信号会变差,甚至丢失。

数据特性:

  • 低频输出:5-10Hz,远低于IMU。
  • 有延迟:从卫星信号接收到解算出位置,有几十到几百毫秒的延迟。EKF2里需要做时间戳对齐。
  • 精度受环境影响:多路径效应、电离层延迟、卫星几何分布都会影响精度。
  • 速度精度高于位置精度:GPS的速度测量(多普勒测速)通常比位置差分更准。

我的经验:在调GPS相关的参数时,我建议先检查一下GPS的HDOP(水平精度因子)。如果HDOP大于1.5,那位置估计的置信度就要打折扣了。EKF2里有个参数叫EKF2_GPS_POS_NOISE,就是用来根据HDOP动态调整GPS位置噪声的。

1.3 磁力计:飞控的“指南针”

磁力计测量地球磁场,用于确定航向。但它非常脆弱,容易受到电机电流、铁磁物质、甚至周围建筑物的干扰。

数据特性:

  • 易受干扰:电机启动瞬间,电流会产生强磁场,导致磁力计读数突变。
  • 需要校准:硬铁和软铁干扰会导致测量值偏移和缩放。必须做椭球拟合校准。
  • 更新频率中等:通常50-100Hz。
  • 航向精度有限:在强磁干扰环境下,航向误差可能达到几十度。

注意:千万不要在磁力计附近放置大电流导线或铁质螺丝。我曾经见过一个案例,因为飞控板上的一个螺丝是铁的,导致磁力计航向偏差了15度。换成铜螺丝后,问题立刻消失。

1.4 气压计:飞控的“高度计”

气压计通过测量大气压力来推算高度。但它对气流和温度变化非常敏感。

数据特性:

  • 对气流敏感:无人机快速下降或上升时,机身周围的气流变化会导致气压计读数出现“冲激”误差。
  • 温度漂移:温度变化会引起气压计内部参考压力变化,导致高度漂移。
  • 更新频率中等:通常25-100Hz。
  • 绝对精度差,相对精度好:绝对高度可能偏差几十米,但短时间内的相对高度变化比较准。

避坑指南:我建议把气压计放在飞控板的正中央,远离散热孔和通风口。另外,在EKF2里,有个参数叫EKF2_BARO_GATE,用来设置气压计数据的异常检测门限。如果飞行中高度突然跳变,可以适当调大这个门限。

1.5 光流传感器:飞控的“视觉”

光流传感器通过比较连续图像帧的像素位移,来推算水平速度。它主要用于室内或GPS信号差的环境。

数据特性:

  • 依赖纹理:地面纹理越丰富,光流越准。光滑的地面(如瓷砖、水面)会导致光流失效。
  • 有尺度模糊:光流测量的是像素位移,需要知道离地高度才能换算成真实速度。所以通常需要和激光测距仪或超声波传感器配合使用。
  • 更新频率中等:通常10-50Hz。
  • 对光照敏感:光照变化太剧烈(如从室内飞到室外),光流会暂时失效。

我的经验:在调光流参数时,我习惯先检查一下光流传感器的“质量”输出。如果质量值低于0.5,那说明光流数据不可靠,EKF2应该降低它的权重。PX4里有个参数叫EKF2_OF_DELAY,用来补偿光流数据的处理延迟,这个值需要根据实际硬件来调整。

1.6 EKF2中的传感器融合架构

好了,现在咱们知道了每个传感器的脾气。那EKF2是怎么把它们揉到一起的呢?

EKF2的核心思想是:用高频的IMU数据做状态预测,然后用低频的其他传感器数据做状态修正。说白了,就是IMU负责“猜”,GPS、磁力计、气压计、光流负责“纠偏”。

下面这张图是我画的EKF2传感器融合架构图,你可以直观地看到数据是怎么流动的:

EKF2传感器融合架构图 IMU 加速度计+陀螺仪 GPS 位置+速度 磁力计 航向 气压计 高度 光流 水平速度 数据预处理 时间戳对齐 异常值检测 噪声建模 延迟补偿 坐标系转换 磁力计校准 气压计温度补偿 光流尺度恢复 EKF2核心 状态预测 (IMU驱动) 状态更新 (GPS/磁力计/气压计/光流) 协方差更新 异常值剔除 (卡方检验) 动态参数调整 (噪声自适应) 输出 位置 速度 姿态 IMU GPS 磁力计 气压计 光流 预处理 EKF2核心 输出

从这张图你可以看到,所有传感器数据先进入“数据预处理”模块。这里做的是脏活累活:时间戳对齐、异常值检测、噪声建模、延迟补偿等等。预处理完的数据,才进入EKF2核心。

在EKF2核心内部,IMU数据驱动状态预测,其他传感器数据驱动状态更新。每次更新时,EKF2会计算“新息”(也就是预测值和测量值的差),然后根据协方差矩阵来决定:这个新息有多少是真实的状态变化,有多少是传感器噪声。

核心逻辑:EKF2本质上是一个“加权平均”的过程。谁的噪声小,谁的权重就大。所以,调参的核心就是给每个传感器设置正确的噪声参数。噪声设小了,传感器会被过度信任,导致估计结果跟着传感器噪声一起抖动。噪声设大了,传感器又会被忽略,导致估计结果收敛慢甚至发散。

嗯,这里要注意一点:EKF2里的传感器融合不是简单的“拿来就用”。每个传感器都有自己的“门限”和“门控”。比如,GPS信号差的时候,EKF2会自动降低GPS的权重,甚至完全忽略它。磁力计受到干扰时,EKF2会切换到“无磁力计”模式,只用IMU和GPS来估计航向。

我个人习惯,在调试一个新机型时,会先单独检查每个传感器的数据质量。比如,把飞机放在桌子上,看IMU的加速度计读数是不是接近1g,陀螺仪读数是不是接近0。然后拿着飞机走一圈,看GPS的位置和速度是不是合理。最后再检查磁力计的校准状态。这些基础工作做好了,EKF2的调参才能事半功倍。

好了,这一章的内容就到这里。记住,理解传感器模型是调参的第一步。下一章我们会深入EKF2的参数,看看每个参数到底在控制什么。


专注资料整理