1. 卡尔曼滤波入门:状态估计问题、高斯分布、贝叶斯滤波思想、卡尔曼滤波的5个核心公式
1.1 状态估计问题——我们到底在解决什么问题?
大家好,我是你们的老朋友。今天咱们正式开始聊卡尔曼滤波。
先问一个问题:你手上有传感器数据,比如GPS、IMU、激光雷达。这些数据都有噪声。你想要的,是系统真实的状态——比如位置、速度、姿态。但真实状态你永远测不到,只能靠估计。
这就是状态估计问题。
说白了,就是「从带噪声的观测中,猜出系统内部的状态」。我当年刚入行时,总觉得这玩意儿玄乎。后来做了一次无人机定位,GPS信号被高楼遮挡,IMU又飘得厉害……嗯,那时候我才真正理解:没有好的状态估计,传感器再多也是废铁。
状态估计的核心假设是:系统状态随时间变化,而且变化是有规律的。我们可以用数学模型来描述这个规律。同时,传感器观测到的数据,也跟状态有数学关系。
所以,我们有两个模型:
- 运动模型:描述状态怎么随时间演变
- 观测模型:描述状态怎么产生观测数据
卡尔曼滤波,就是在这两个模型之间做最优折中。
1.2 高斯分布——为什么它无处不在?
你想想看,自然界里很多噪声都服从高斯分布。中心极限定理告诉我们:大量独立随机变量的和,趋近于高斯分布。传感器噪声、过程噪声,基本都是高斯。
高斯分布有两个参数:均值 μ 和方差 σ²。均值是「最可能的值」,方差是「不确定度」。
我个人习惯把高斯分布想象成一个钟形曲线。曲线越瘦高,说明我越确定;越扁平,说明我越没底。
卡尔曼滤波之所以好用,就是因为它假设所有噪声都是高斯的。这样一来,状态估计就变成了「两个高斯分布相乘」的问题——结果还是高斯分布。这就很舒服了,因为高斯分布只需要均值和协方差就能完全描述。
重要性质:高斯分布经过线性变换后,仍然是高斯分布。这是卡尔曼滤波能保持「线性最优」的数学基础。
我在项目中遇到过一件事:有一次用激光雷达做障碍物跟踪,观测噪声明显不是高斯——有离群点。结果卡尔曼滤波直接崩了,估计值乱跳。后来加了鲁棒性处理,才稳住。所以,高斯假设不是万能的,但大部分场景下够用。
1.3 贝叶斯滤波思想——从概率角度看估计
贝叶斯滤波,是卡尔曼滤波的理论源头。它的核心思想就一句话:
后验概率 ∝ 似然 × 先验概率
什么意思呢?
- 先验:根据运动模型,我「猜」当前状态大概在哪
- 似然:根据观测模型,当前观测数据「支持」哪些状态
- 后验:把两者乘起来,得到「最合理」的状态估计
贝叶斯滤波是一个递归过程。每一时刻,我先用运动模型预测(先验),再用观测数据更新(后验)。然后下一时刻,后验变成新的先验,继续循环。
你想想看,这不就是「预测-更新」的循环吗?卡尔曼滤波就是贝叶斯滤波在高斯假设下的具体实现。
个人经验:理解贝叶斯滤波,比死记卡尔曼公式更重要。我面试新人时,只要能把贝叶斯思想讲清楚,代码写得差点我也愿意要。因为思想对了,公式只是工具。
1.4 卡尔曼滤波的5个核心公式
好,终于到正题了。卡尔曼滤波就5个公式,分两组:
预测阶段(2个公式)
1. 状态预测:x̂ₖ⁻ = A·x̂ₖ₋₁ + B·uₖ
2. 协方差预测:Pₖ⁻ = A·Pₖ₋₁·Aᵀ + Q
- x̂ₖ⁻:先验状态估计(预测值)
- Pₖ⁻:先验协方差(预测的不确定度)
- A:状态转移矩阵
- B:控制输入矩阵
- uₖ:控制输入
- Q:过程噪声协方差
更新阶段(3个公式)
3. 卡尔曼增益:Kₖ = Pₖ⁻·Hᵀ·(H·Pₖ⁻·Hᵀ + R)⁻¹
4. 状态更新:x̂ₖ = x̂ₖ⁻ + Kₖ·(zₖ - H·x̂ₖ⁻)
5. 协方差更新:Pₖ = (I - Kₖ·H)·Pₖ⁻
- Kₖ:卡尔曼增益(权重,决定信预测还是信观测)
- H:观测矩阵
- zₖ:实际观测值
- R:观测噪声协方差
- I:单位矩阵
这5个公式,我建议你手推一遍。当年我学的时候,推了整整三遍才真正理解每个矩阵的物理意义。
避坑指南:我曾经在项目中把Q和R设反了——过程噪声设得特别小,观测噪声设得特别大。结果滤波器几乎不更新,状态一直跟着预测走,定位误差越积越大。调了三天才发现是参数反了。所以,Q和R的物理意义一定要搞清楚:Q是「模型不可靠程度」,R是「传感器不可靠程度」。
1.5 一个直观的例子——一维位置估计
假设你用一个测距传感器测位置。传感器有噪声,方差R=1。你有一个运动模型,但模型也有噪声,方差Q=0.1。初始位置估计为0,不确定度P₀=100(非常不确定)。
第一次观测,z₁=1.2。我们来算一下:
预测:x̂₁⁻ = 0(假设没有控制输入)
P₁⁻ = 100 + 0.1 = 100.1
卡尔曼增益:K₁ = 100.1 / (100.1 + 1) ≈ 0.99
更新:x̂₁ = 0 + 0.99 × (1.2 - 0) ≈ 1.188
P₁ = (1 - 0.99) × 100.1 ≈ 1.001
你看,因为初始不确定度很大(P₀=100),卡尔曼增益接近1,几乎完全相信观测。更新后,不确定度骤降到1左右。
第二次观测,z₂=1.5:
预测:x̂₂⁻ = 1.188
P₂⁻ = 1.001 + 0.1 = 1.101
卡尔曼增益:K₂ = 1.101 / (1.101 + 1) ≈ 0.524
更新:x̂₂ = 1.188 + 0.524 × (1.5 - 1.188) ≈ 1.351
P₂ = (1 - 0.524) × 1.101 ≈ 0.524
这次,不确定度变小了,卡尔曼增益约0.5,预测和观测各信一半。这就是卡尔曼滤波的精髓——动态调整权重。
核心思想总结:卡尔曼滤波不是「信预测」或「信观测」二选一,而是根据当前的不确定度,自动计算最优权重。不确定度大,就多信观测;不确定度小,就多信预测。
1.6 本章小结
这一章我们聊了:
- 状态估计问题:从带噪声观测中猜真实状态
- 高斯分布:为什么它是卡尔曼滤波的数学基础
- 贝叶斯滤波思想:预测-更新的递归框架
- 5个核心公式:预测2个,更新3个
- 一维例子:直观理解卡尔曼增益的作用
下一章,我们会深入推导这5个公式,从数学上理解「为什么卡尔曼增益长那个样子」。到时候我会带大家手撕矩阵求导,别怕,跟着我一步步来。
嗯,今天就到这儿。有问题随时交流。