概率机器人-贝叶斯滤波
贝叶斯状态迭代是概率机器人的基础,理解它对平面slam技术,如gmapping算法原理有很大的帮助。先掌握基础原来,以后再考虑如何进行创新。
前言
书中介绍的概率机器人是基于隐马尔可夫模型,或者叫动态贝叶斯网络,即时刻 t t t的状态随机地依赖t-1时刻的状态和控制输入 u t u_t ut,测量 z t z_t zt随机地依赖时刻t的状态。这就是贝叶斯滤波的基本假设了。看到这个假设,其实我们会想时刻 t t t的状态是如何与前面的东西关联起来的,即那状态是如何更新的?大家可以带着问题进行思考。
一、什么是贝叶斯滤波?
1、置信度
首先介绍置信度的概念,贝叶斯滤波就是置信度的递归计算。
置信度的概念:
概率机器人通过条件概率分布表示置信度,是对给定所有过去的传感器测量和所有过去控制的环境状态的一个后验分布。比如 b e l ( x t ) = p ( x t ∣ z 1 : t , u 1 : t ) bel(x_t)=p(x_t|z_{1:t},u_{1:t}) bel(xt)=p(xt∣z1:t,u1:t),表示状态变量 x t x_t xt的置信度。
如何理解置信度?
机器人的状态是不能测量的,你说 x t x_t xt发生的可能性是多少,给个概率吧!那不就是以过去测量 z 1 : t z_{1:t} z1:t和所有过去控制 u 1 : t u_{1:t} u1:t为条件,时刻t下状态 x t x_t xt的概率分布。
有了 b e l ( x t ) bel(x_t) bel(xt),据说刚执行完控制 u t u_t ut,用 z t − 1 z_{t-1} zt−1计算后验也是有用的。 b e l ‾ ( x t ) = p ( x t ∣ z 1 : t − 1 , u 1 : t ) \overline{bel}(x_t)=p(x_t|z_{1:t-1},u_{1:t}) bel(xt)=p(xt∣z1:t−1,u1:t)。该概率被称为预测,是基于以前状态的后验。由 b e l ‾ ( x t ) \overline{bel}(x_t) bel(xt)计算 b e l ( x t ) bel(x_t) bel(xt)称为测量更新。理解了置信度的概念,那到底怎么进行更新?
2、贝叶斯滤波算法
贝叶斯滤波算法讲的就是测量更新的过程。
伪代码如下:
Algorithm Bayes filter |
---|
for all x t x_t xt do |
b e l ‾ ( x t − 1 ) = ∫ p ( x t ∣ u t , x t − 1 ) b e l ( x t − 1 ) d x t − 1 \quad \overline{bel}(x_{t-1}) =\int p(x_t \mid u_t,x_{t-1})bel(x_{t-1})dx_{t-1} be |