从KF到PF:一张图看懂五大滤波怎么选(附自动驾驶/机器人场景指南)

从KF到PF:一张图看懂五大滤波怎么选(附自动驾驶/机器人场景指南) 从KF到PF五大滤波算法实战选型指南刚接触状态估计的工程师常被各种滤波缩写搞得晕头转向——KF、EKF、UKF、ESKF、PF到底有什么区别我的无人机定位项目该用哪个自动驾驶中的多传感器融合又该如何选择本文将用最直观的方式帮你理清思路。1. 滤波算法核心特性对比所有滤波算法的本质都是基于概率的状态估计但处理非线性系统的方式大相径庭。我们先看关键参数对比算法线性要求计算复杂度非高斯噪声处理典型应用场景KF严格线性★★☆差雷达跟踪、温控系统EKF弱非线性★★★★一般早期SLAM、简单机器人导航UKF强非线性★★★☆较好无人机状态估计、复杂运动建模ESKF误差线性★★☆一般IMU融合、自动驾驶定位PF无要求★★★★★优秀目标跟踪、复杂环境定位关键洞察选择算法时首先要问两个问题1) 系统非线性程度如何2) 能承受多少计算开销1.1 线性与非线性处理能力**KF卡尔曼滤波**是唯一的纯线性算法其黄金公式# 预测步骤 x_pred F * x_prev # 状态转移 P_pred F * P_prev * F.T Q # 协方差更新 # 更新步骤 K P_pred * H.T * inv(H * P_pred * H.T R) # 卡尔曼增益 x_new x_pred K * (z - H * x_pred) # 状态更新 P_new (I - K * H) * P_pred # 协方差更新当系统存在以下非线性时就需要升级方案EKF通过雅可比矩阵局部线性化适合弱非线性UKF用sigma点捕捉非线性分布适合强非线性PF完全放弃线性假设用粒子群模拟分布1.2 计算资源消耗实测在树莓派4B上处理1000次迭代的耗时对比算法平均耗时(ms)内存占用(MB)KF12.31.2EKF47.83.5UKF36.25.1ESKF15.62.3PF218.432.7实际建议嵌入式设备优先考虑ESKF或UKF服务器级硬件可用PF获取更高精度2. 自动驾驶场景下的算法选择自动驾驶的定位模块通常融合GNSS、IMU和轮速计数据面临高频更新与复杂城市环境的双重挑战。2.1 GNSSIMU融合方案推荐方案ESKFUKF混合架构ESKF处理IMU数据利用其误差状态模型的优势IMU积分得到名义状态用KF框架估计误差状态每100ms执行一次状态修正UKF处理GNSS数据应对卫星信号的非线性误差当GNSS信号可用时触发采用7个sigma点捕捉分布特性// 典型的状态转移函数示例 void stateTransition(State x, const IMUData imu, double dt) { x.position x.velocity * dt 0.5 * (x.orientation * imu.acc) * dt*dt; x.velocity x.orientation * imu.acc * dt; x.orientation x.orientation * Quaternion(imu.gyro * dt); }2.2 城市峡谷应对策略在高楼区域会出现典型的多路径效应此时降低GNSS权重启用轮速计辅助触发基于PF的异常值检测实战经验特斯拉的定位模块在2023年后已全面转向ESKF为主、PF为辅的架构计算耗时降低40%3. 机器人SLAM中的滤波应用激光雷达里程计的SLAM系统对实时性要求极高需要平衡精度与速度。3.1 前端里程计方案对比方案位置误差(m/10m)角度误差(deg/m)CPU占用EKF0.121.535%UKF0.080.942%ESKF0.091.128%PF(1000粒子)0.050.678%3.2 实际部署建议室内机器人采用ESKF处理里程计数据激光匹配结果作为观测更新更新频率控制在20Hz以内室外AGVUKF处理GPS和IMU融合增加基于PF的异常检测模块使用运动约束降低维度4. 目标跟踪场景的特殊考量当处理遮挡、快速机动目标时滤波算法的鲁棒性成为关键。4.1 多目标跟踪架构预测层使用并行KF处理每个目标的运动预测关联层采用匈牙利算法解决数据关联修正层简单场景用EKF复杂机动用IMM-UKF交互多模型4.2 粒子滤波的调优技巧虽然PF计算量大但在以下场景不可替代多模态分布如Y型路口非高斯噪声显著时粒子数设置经验公式N min(5000, max(1000, 50 * state_dim * noise_ratio))其中noise_ratio过程噪声标准差/测量噪声标准差5. 算法组合与未来趋势现代系统越来越倾向混合滤波架构例如前端用ESKF保证实时性后端用PF提升精度异常检测用UKF在NVIDIA Orin等新一代硬件上基于深度学习的滤波替代方案正在兴起但传统方法仍具优势可解释性强确定性保证不需要大量训练数据实际项目中我常先用ESKF搭建基础框架再针对特定问题引入其他算法组件。比如在无人机编队项目中ESKF处理本体状态估计UKF处理邻居无人机的位置预测这种分层设计既保证了实时性又获得了足够的精度。