2. 状态估计基础:贝叶斯滤波与马尔可夫假设
聊状态估计,绕不开两个基石:贝叶斯滤波和马尔可夫假设。
说白了,我们做机器人定位、做传感器融合,本质上都是在干一件事——猜。根据一堆有噪声的测量数据,猜系统当前到底在什么状态。贝叶斯滤波就是那个「怎么猜才科学」的数学框架。
我个人习惯,每次讲这部分都会先画一张图,把整个推理链条理清楚。来,先看这张核心流程图:
2.1 贝叶斯滤波:从后验概率说起
贝叶斯滤波的核心思想,就是用概率分布来描述我们对状态的不确定性。
你想想看,我们永远无法直接知道机器人的真实位姿。我们能拿到的,只有IMU的加速度、陀螺仪角速度、GPS坐标、视觉特征点……这些测量值都带噪声。贝叶斯滤波告诉我们:别纠结于「真实值」,转而维护一个后验概率分布 p(xₖ | z₁:ₖ, u₁:ₖ)。
这个式子读作:给定从1到k时刻的所有观测z和控制u,状态xₖ的概率分布是什么。
嗯,这里要注意,贝叶斯滤波本身是一个递归框架,它由两步组成:
- 预测(Predict):用运动模型,从上一时刻的后验推出当前时刻的先验。
- 更新(Update):用观测模型,结合当前测量值,修正先验得到后验。
我在项目中遇到过不少新手,一上来就想着直接算「最优估计」,忽略了概率分布的意义。结果传感器一丢数据,滤波器直接崩了。其实你只要把后验分布维护好,很多问题自然就解了。
贝叶斯滤波的通用公式(离散形式):
预测:bel⁻(xₖ) = ∫ p(xₖ | xₖ₋₁, uₖ) · bel(xₖ₋₁) dxₖ₋₁
更新:bel(xₖ) = η · p(zₖ | xₖ) · bel⁻(xₖ)
其中 bel 表示置信度(belief),η 是归一化常数。
2.2 马尔可夫假设:让问题变得可解
你可能会问:上面那个积分,状态空间那么大,怎么算得过来?
这就轮到马尔可夫假设登场了。
马尔可夫假设说:当前状态 xₖ 包含了所有历史信息,一旦 xₖ 已知,过去的数据就不再提供额外信息。
用数学语言表达就是:
p(xₖ | xₖ₋₁, xₖ₋₂, ..., x₀) = p(xₖ | xₖ₋₁)
说白了,状态本身就是一个「有记忆的压缩表示」。你不需要记住整个轨迹,只需要记住上一时刻的状态,就能预测下一时刻。
这个假设在机器人领域几乎无处不在。EKF、ESKF、粒子滤波……所有主流滤波器都建立在它之上。
⚠️ 避坑指南:
我曾经在一个视觉SLAM项目里,因为忽略了马尔可夫假设的适用条件,吃了大亏。当时传感器存在严重的时间相关性噪声(比如低频漂移),马尔可夫假设就不太成立了。这种情况下,你需要引入增广状态或者滑动窗口来打破相关性。
记住:马尔可夫假设是一个工程近似,不是物理定律。用之前先掂量掂量你的传感器噪声特性。
2.3 从贝叶斯滤波到卡尔曼滤波
贝叶斯滤波虽然优雅,但那个积分在连续状态空间里基本没法解析求解。除非……我们做一些假设。
卡尔曼滤波就是贝叶斯滤波在线性高斯系统下的特例。它假设:
- 运动模型和观测模型都是线性的
- 过程噪声和观测噪声都是高斯分布
在这两个假设下,后验分布始终保持高斯形式,只需要维护均值和协方差矩阵。这就是卡尔曼滤波为什么计算效率那么高的原因。
我个人的理解是:卡尔曼滤波把贝叶斯滤波中那个「无穷维的概率分布」压缩成了「有限维的均值和协方差」。代价就是线性高斯假设。
💡 一个小技巧:
当你面对一个新问题时,先问自己三个问题:
- 系统是线性的吗? → 是 → 用KF
- 系统是非线性的,但可微? → 是 → 用EKF/ESKF
- 系统是非线性且多模态? → 用粒子滤波
这个决策树能帮你快速定位合适的滤波器。
2.4 贝叶斯滤波的三种实现形式
为了让你更直观地理解,我把贝叶斯滤波的三种主流实现放在一起对比:
| 滤波器 | 状态表示 | 适用场景 | 计算复杂度 |
|---|---|---|---|
| 卡尔曼滤波 (KF) | 高斯分布 (均值+协方差) | 线性系统 | O(n³) |
| 扩展卡尔曼滤波 (EKF) | 高斯分布 (线性化近似) | 弱非线性系统 | O(n³) |
| 粒子滤波 (PF) | 加权粒子集合 | 强非线性/非高斯 | O(N·n²) |
你看,从KF到PF,表达能力越来越强,但计算代价也越来越高。工程上就是在精度和实时性之间做权衡。
2.5 我的一点经验总结
做了这么多年传感器融合,我越来越觉得:理解贝叶斯滤波的本质,比背公式重要得多。
公式会忘,但「预测-更新」这个闭环思维不会。你以后遇到任何状态估计问题,都可以先问自己:
- 我的运动模型是什么?怎么从上一状态预测当前状态?
- 我的观测模型是什么?怎么用传感器读数修正预测?
- 我的不确定性怎么传播?协方差矩阵怎么更新?
把这三个问题想清楚,剩下的就是数学推导和代码实现了。
嗯,这一章就到这里。贝叶斯滤波和马尔可夫假设是后续所有滤波器的基础,尤其是EKF和ESKF,它们本质上都是在这个框架下做近似。下一章我们会深入EKF的具体推导,到时候你会发现,很多看似复杂的公式,其实就是在做「预测-更新」这两件事。