2. 状态估计基础:贝叶斯滤波与马尔可夫假设

聊状态估计,绕不开两个基石:贝叶斯滤波马尔可夫假设

说白了,我们做机器人定位、做传感器融合,本质上都是在干一件事——。根据一堆有噪声的测量数据,猜系统当前到底在什么状态。贝叶斯滤波就是那个「怎么猜才科学」的数学框架。

我个人习惯,每次讲这部分都会先画一张图,把整个推理链条理清楚。来,先看这张核心流程图:

贝叶斯滤波与马尔可夫假设 — 核心逻辑 状态 xₖ₋₁ (上一时刻) 状态 xₖ (当前时刻) 状态 xₖ₊₁ (下一时刻) 马尔可夫假设:xₖ 只依赖 xₖ₋₁ 观测 zₖ (传感器读数) 预测(先验) p(xₖ | z₁:ₖ₋₁) = ∫ p(xₖ|xₖ₋₁) p(xₖ₋₁|z₁:ₖ₋₁) dxₖ₋₁ 更新(后验) p(xₖ | z₁:ₖ) ∝ p(zₖ|xₖ) · p(xₖ|z₁:ₖ₋₁) 预测 + 更新 = 贝叶斯滤波的递归闭环

2.1 贝叶斯滤波:从后验概率说起

贝叶斯滤波的核心思想,就是用概率分布来描述我们对状态的不确定性

你想想看,我们永远无法直接知道机器人的真实位姿。我们能拿到的,只有IMU的加速度、陀螺仪角速度、GPS坐标、视觉特征点……这些测量值都带噪声。贝叶斯滤波告诉我们:别纠结于「真实值」,转而维护一个后验概率分布 p(xₖ | z₁:ₖ, u₁:ₖ)。

这个式子读作:给定从1到k时刻的所有观测z和控制u,状态xₖ的概率分布是什么。

嗯,这里要注意,贝叶斯滤波本身是一个递归框架,它由两步组成:

  1. 预测(Predict):用运动模型,从上一时刻的后验推出当前时刻的先验。
  2. 更新(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 从贝叶斯滤波到卡尔曼滤波

贝叶斯滤波虽然优雅,但那个积分在连续状态空间里基本没法解析求解。除非……我们做一些假设。

卡尔曼滤波就是贝叶斯滤波在线性高斯系统下的特例。它假设:

  • 运动模型和观测模型都是线性的
  • 过程噪声和观测噪声都是高斯分布

在这两个假设下,后验分布始终保持高斯形式,只需要维护均值和协方差矩阵。这就是卡尔曼滤波为什么计算效率那么高的原因。

我个人的理解是:卡尔曼滤波把贝叶斯滤波中那个「无穷维的概率分布」压缩成了「有限维的均值和协方差」。代价就是线性高斯假设。

💡 一个小技巧:

当你面对一个新问题时,先问自己三个问题:

  1. 系统是线性的吗? → 是 → 用KF
  2. 系统是非线性的,但可微? → 是 → 用EKF/ESKF
  3. 系统是非线性且多模态? → 用粒子滤波

这个决策树能帮你快速定位合适的滤波器。

2.4 贝叶斯滤波的三种实现形式

为了让你更直观地理解,我把贝叶斯滤波的三种主流实现放在一起对比:

滤波器 状态表示 适用场景 计算复杂度
卡尔曼滤波 (KF) 高斯分布 (均值+协方差) 线性系统 O(n³)
扩展卡尔曼滤波 (EKF) 高斯分布 (线性化近似) 弱非线性系统 O(n³)
粒子滤波 (PF) 加权粒子集合 强非线性/非高斯 O(N·n²)

你看,从KF到PF,表达能力越来越强,但计算代价也越来越高。工程上就是在精度实时性之间做权衡。

2.5 我的一点经验总结

做了这么多年传感器融合,我越来越觉得:理解贝叶斯滤波的本质,比背公式重要得多

公式会忘,但「预测-更新」这个闭环思维不会。你以后遇到任何状态估计问题,都可以先问自己:

  • 我的运动模型是什么?怎么从上一状态预测当前状态?
  • 我的观测模型是什么?怎么用传感器读数修正预测?
  • 我的不确定性怎么传播?协方差矩阵怎么更新?

把这三个问题想清楚,剩下的就是数学推导和代码实现了。

嗯,这一章就到这里。贝叶斯滤波和马尔可夫假设是后续所有滤波器的基础,尤其是EKF和ESKF,它们本质上都是在这个框架下做近似。下一章我们会深入EKF的具体推导,到时候你会发现,很多看似复杂的公式,其实就是在做「预测-更新」这两件事。


专注资料整理