飞控中的多传感器融合:粒子滤波实现从一次炸机说起去年夏天调试一架四轴,GPS信号在树荫下跳得厉害,IMU的加速度计数据里混着电机振动噪声,气压计被螺旋桨下洗气流吹得忽高忽低。我天真地以为卡尔曼滤波能搞定一切——结果飞机在悬停时突然往东偏了半米,然后像喝醉了一样晃了两下,直接翻倒炸机。事后分析日志,发现卡尔曼滤波器在高非线性、非高斯噪声的环境下,状态估计已经发散到离谱的程度。那次之后我认真研究了粒子滤波。说实话,这东西计算量确实大,但在飞控这种多传感器、强非线性、噪声分布诡异的场景里,它比卡尔曼家族更能扛。今天这篇笔记,就聊聊怎么在飞控里把粒子滤波跑起来,以及那些坑——我踩过的,你别再踩。粒子滤波到底在干什么先别急着看公式。粒子滤波的核心思想其实很朴素:用一堆随机点(粒子)去逼近真实状态的概率分布。每个粒子代表一个可能的系统状态,比如位置、速度、姿态角。粒子越多,逼近越准,但计算量也越大。卡尔曼滤波假设噪声是高斯分布,状态转移和观测模型是线性的(或者通过雅可比近似)。但飞控里呢?加速度计的非线性、磁力计的硬铁软铁干扰、GPS多路径效应——这些都不是高斯噪声能完美描述的。粒子滤波不关心分布形状,你扔一堆粒子进去,它自己就能“长”成真实分布的样子。这里踩过坑:别以为粒子滤波能完全替代卡尔曼。在计算资源有限的飞控MCU上,粒子滤波通常只用于特定环节,比如GPS/IMU融合的初始化阶段,或者视觉SLAM的位姿估计。全程跑粒子滤波?除非你用的是带GPU的树莓派,否则STM32会直接罢工。