一、EKF概述:为什么需要EKF?线性KF与EKF的核心区别

大家好,我是你们的老朋友。今天咱们来聊聊扩展卡尔曼滤波,也就是EKF。

说实话,我刚入行那会儿,觉得卡尔曼滤波就是个黑盒子。输入输出,调调参数,完事。直到有一次做无人机姿态估计,用线性KF死活收敛不了,我才意识到——现实世界,哪有那么多线性系统?

1.1 为什么需要EKF?

线性卡尔曼滤波(KF)有个硬前提:系统必须是线性的,噪声必须是高斯的

你想想看,现实中的机器人系统,有几个是线性的?

  • 运动模型:小车转弯,角度和位置的关系是三角函数,不是线性
  • 观测模型:激光雷达测距,距离和坐标的关系带平方根,也不是线性
  • IMU数据:加速度计和陀螺仪的融合,涉及旋转矩阵,更不是线性

线性KF遇到这些非线性情况,就像用直尺量曲线——误差会越来越大,直到发散。

核心痛点:线性KF假设状态转移和观测都是线性变换。一旦遇到非线性,它的最优性就没了,甚至可能直接崩掉。

EKF的出现,说白了就是给线性KF装了个「近视眼镜」——把非线性问题在局部线性化,然后继续用KF那一套框架。

我记得有一次做移动机器人定位,轮子打滑导致里程计误差非线性增长。用线性KF,位置估计直接飘到墙外去了。换成EKF,虽然也有误差,但至少还在房间里转悠。嗯,这就是EKF的价值。

1.2 线性KF与EKF的核心区别

咱们直接上干货。两者的区别,我用一个表格说清楚:

对比项 线性KF EKF
系统模型 必须是线性:x = Ax + Bu 可以是非线性:x = f(x, u)
观测模型 必须是线性:z = Hx 可以是非线性:z = h(x)
核心思想 直接使用线性代数 用泰勒展开做线性近似
计算雅可比 不需要 必须计算状态转移和观测的雅可比矩阵
最优性 全局最优(线性高斯下) 局部近似最优
适用场景 简单线性系统(如恒速模型) 大多数实际机器人系统

看到这里你可能会问:「那EKF不就是把非线性函数求个导数吗?」

对,也不全对。

EKF的核心步骤其实就多了两步:

  1. 预测阶段:用非线性函数 f 直接传播状态,但协方差要用线性化的雅可比矩阵来更新
  2. 更新阶段:用非线性函数 h 计算预测观测,但增益计算要用线性化的雅可比矩阵

说白了,EKF就是「用线性化的刀,切非线性的蛋糕」

1.3 一个简单的例子

假设我们要估计一个物体的位置和速度,但观测是距离(带平方根)。

线性KF会怎么做?它要求观测方程是 z = Hx,也就是距离和位置是线性关系。但实际距离是 sqrt(x² + y²),这怎么线性?

EKF的做法是:

  • 在当前估计点 (x₀, y₀) 附近,对 sqrt(x² + y²) 做一阶泰勒展开
  • 得到近似的线性关系:z ≈ H_local * x
  • 然后把这个 H_local 当成观测矩阵,继续跑KF的更新公式

个人经验:我建议初学者先手推一遍雅可比矩阵。别偷懒,哪怕是最简单的例子。我当年就是图省事用数值微分,结果调参调到怀疑人生。手推一遍,你对EKF的理解会上一个台阶。

1.4 EKF的局限性(避坑指南)

EKF不是万能的。我曾经踩过几个坑,分享给大家:

我曾经在一个强非线性系统(大角度姿态估计)上硬用EKF,结果协方差矩阵频繁非正定,滤波器直接炸了。后来换成UKF才解决问题。

EKF的主要问题:

  • 线性化误差:泰勒展开只取一阶项,如果非线性强,误差会累积
  • 雅可比计算复杂:对于高维系统,手推雅可比容易出错
  • 对初值敏感:如果初始估计离真值太远,线性化点选得不好,滤波器可能发散

所以,什么时候用EKF?

  • 系统非线性程度中等(比如小角度近似成立)
  • 你能手推或自动微分得到雅可比
  • 计算资源有限(EKF比UKF/PF快)

什么时候别用?

  • 强非线性(比如纯方位跟踪、大角度旋转)
  • 多模态分布(EKF假设单峰高斯)
  • 你懒得算雅可比(那就用UKF吧)

1.5 小结

这一章咱们聊了:

  • 为什么需要EKF——因为现实是非线性的
  • 线性KF和EKF的核心区别——一个直接算,一个先线性化再算
  • EKF的适用场景和坑

下一章,我会带大家手撕EKF的数学公式,从预测到更新,每一步都讲清楚。到时候咱们再聊雅可比矩阵怎么算、协方差怎么调。

嗯,今天就到这儿。记住:EKF不是银弹,但在大多数工程场景下,它够用、好用、值得掌握