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

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

说实话,我刚入行那会儿,觉得卡尔曼滤波就是个黑盒子。输入输出,挺简单的。直到第一次在真实机器人上跑,才发现——嗯,现实世界哪有那么多线性系统?

1.1 为什么需要EKF?

标准卡尔曼滤波(KF)有个硬前提:系统必须是线性的。什么意思?就是状态变化能用矩阵乘法搞定,观测也是线性的。

但现实世界呢?

  • 机器人运动:你让机器人转个弯,角度变化是三角函数,不是线性
  • GPS定位:经纬度到笛卡尔坐标的转换,非线性
  • 视觉SLAM:相机投影模型,更是非线性

我做过一个项目,用标准KF做无人机姿态估计。飞直线还行,一做大机动转弯,滤波器直接发散。当时我盯着数据看了半天,心想:这不对啊,明明理论没问题。后来才意识到——线性近似失效了。

核心结论:当系统是非线性时,标准KF的“线性最优”假设就崩塌了。EKF就是来解决这个问题的。

1.2 线性KF与EKF的核心区别

说白了,EKF就是把非线性系统“掰直”了再滤波。怎么掰?用泰勒展开做一阶线性化。

我画个图帮你理解:

线性KF vs EKF 核心流程对比 标准KF(线性系统) 状态方程:xₖ = A·xₖ₋₁ + B·uₖ + w 观测方程:zₖ = H·xₖ + v 预测:x̂ₖ|ₖ₋₁ = A·x̂ₖ₋₁ + B·uₖ Pₖ|ₖ₋₁ = A·Pₖ₋₁·Aᵀ + Q 更新:Kₖ = Pₖ|ₖ₋₁·Hᵀ·(H·Pₖ|ₖ₋₁·Hᵀ+R)⁻¹ x̂ₖ = x̂ₖ|ₖ₋₁ + Kₖ·(zₖ - H·x̂ₖ|ₖ₋₁) ⚠ 要求:A、H 是常数矩阵 EKF(非线性系统) 状态方程:xₖ = f(xₖ₋₁, uₖ) + w 观测方程:zₖ = h(xₖ) + v 预测:x̂ₖ|ₖ₋₁ = f(x̂ₖ₋₁, uₖ) Pₖ|ₖ₋₁ = Fₖ·Pₖ₋₁·Fₖᵀ + Q 其中 Fₖ = ∂f/∂x | x̂ₖ₋₁ 更新:Kₖ = Pₖ|ₖ₋₁·Hₖᵀ·(Hₖ·Pₖ|ₖ₋₁·Hₖᵀ+R)⁻¹ x̂ₖ = x̂ₖ|ₖ₋₁ + Kₖ·(zₖ - h(x̂ₖ|ₖ₋₁)) 其中 Hₖ = ∂h/∂x | x̂ₖ|ₖ₋₁ ⚠ 需要计算雅可比矩阵

看到了吗?EKF的核心变化就两点:

  1. 状态预测用非线性函数 f(·),而不是矩阵乘法
  2. 协方差传播用雅可比矩阵 Fₖ、Hₖ,代替原来的 A、H

我的经验:雅可比矩阵是EKF的“灵魂”。算对了,滤波器稳如老狗;算错了,发散得你怀疑人生。我建议你手推一遍雅可比,别偷懒用自动微分——至少第一次要手推。

1.3 什么时候用EKF?

你可能会问:那是不是所有非线性问题都用EKF?

也不一定。我列个表给你参考:

场景 非线性程度 推荐方法 原因
GPS+IMU融合 中等 EKF 雅可比容易计算,效果稳定
机器人里程计 弱非线性 EKF 或 标准KF 小角度近似后线性度好
视觉SLAM 强非线性 UKF 或 粒子滤波 EKF线性化误差累积严重
无人机姿态估计 中等 EKF 四元数+角速度模型,EKF经典应用

避坑指南:我曾经在一个强非线性系统上硬用EKF,结果滤波器频繁发散。后来换成UKF,问题迎刃而解。记住:EKF不是万能的,它只适合“弱到中等非线性”的系统。如果非线性太强,考虑UKF或粒子滤波。

1.4 EKF的数学本质

说白了,EKF就干了一件事:用一阶泰勒展开近似非线性函数

假设你的状态方程是:

xₖ = f(xₖ₋₁, uₖ) + wₖ

我们在估计点 x̂ₖ₋₁ 附近展开:

f(xₖ₋₁, uₖ) ≈ f(x̂ₖ₋₁, uₖ) + Fₖ · (xₖ₋₁ - x̂ₖ₋₁)

其中 Fₖ 就是雅可比矩阵:

Fₖ = ∂f/∂x | x = x̂ₖ₋₁

观测方程同理:

h(xₖ) ≈ h(x̂ₖ|ₖ₋₁) + Hₖ · (xₖ - x̂ₖ|ₖ₋₁)

然后,把这两个线性化后的方程代入标准KF框架。嗯,就这么简单。

关键点:线性化只在当前估计点附近有效。如果真实状态离估计点太远,线性化误差就会很大。这就是为什么EKF对初始值敏感——初始值错了,后面全错。

1.5 一个简单的例子

假设你有个机器人,运动模型是:

xₖ = xₖ₋₁ + v·cos(θₖ₋₁)·dt
yₖ = yₖ₋₁ + v·sin(θₖ₋₁)·dt
θₖ = θₖ₋₁ + ω·dt

你看,这里有 cos 和 sin,明显是非线性。标准KF没法直接用。

但EKF可以。我们只需要计算雅可比矩阵:

Fₖ = [1, 0, -v·sin(θ)·dt]
     [0, 1,  v·cos(θ)·dt]
     [0, 0,  1          ]

然后代入EKF的预测公式。就这么简单。

我的习惯:每次写EKF代码前,我都会先在纸上把雅可比矩阵推导一遍。别嫌麻烦,这一步能帮你避免80%的bug。

1.6 本章小结

  • 为什么需要EKF:现实系统几乎都是非线性的,标准KF搞不定
  • 核心区别:EKF用雅可比矩阵做线性化,标准KF直接用常数矩阵
  • 适用场景:弱到中等非线性系统,如GPS/IMU融合、无人机姿态估计
  • 注意事项:雅可比要算对,初始值要准,强非线性慎用

下一章,我会带你手撕EKF的数学公式,从预测到更新,每一步都讲清楚。到时候咱们再聊。


专注资料整理