Filter-based SLAM:贝叶斯滤波

数学概念

理解基础的数学概念,是理解贝叶斯滤波的前提,由于公式推理中会经常用到这些公式,所以写在博客的开头以便后面翻看。

独立
p ( x , y ) = p ( x ) p ( y ) p ( x ∣ y ) = p ( x ) p ( y ∣ x ) = p ( y ) (1.1) p(x,y) = p(x)p(y) \\ p(x|y) = p(x) \\ p(y|x) = p(y) \tag{1.1} p(x,y)=p(x)p(y)p(xy)=p(x)p(yx)=p(y)(1.1)

条件独立
表 示 当 条 件 z 存 在 时 , x , y 独 立 p ( x , y ∣ z ) = p ( x ∣ z ) p ( y ∣ z ) 当 x 与 z 相 关 , 与 y 无 关 时 p ( x ∣ y , z ) = p ( x ∣ z ) p ( y ∣ x , z ) = p ( y ∣ z ) (1.2) 表示当条件z存在时,x,y独立\\ p(x,y|z) = p(x|z)p(y|z) \\ 当x与z相关,与y无关时\\ p(x|y,z) = p(x|z) \\ p(y|x,z) = p(y|z) \tag{1.2} zx,yp(x,yz)=p(xz)p(yz)xzyp(xy,z)=p(xz)p(yx,z)=p(yz)(1.2)

全概率公式
p ( x ) = ∫ p ( x ∣ y ) p ( y ) d y (1.3) p(x) = \int p(x|y)p(y){\rm d}y \tag{1.3} p(x)=p(xy)p(y)dy(1.3)

条件概率公式
p ( x , y ) = p ( x ∣ y ) p ( y ) = p ( y ∣ x ) p ( x ) (1.4) p(x,y) = p(x|y)p(y) = p(y|x)p(x) \tag{1.4} p(x,y)=p(xy)p(y)=p(yx)p(x)(1.4)

贝叶斯公式
p ( x , y ) = p ( x ∣ y ) p ( y ) = p ( y ∣ x ) p ( x ) → p ( x ∣ y ) = p ( y ∣ x ) p ( x ) p ( y ) = η p ( y ∣ x ) p ( x ) ( 但 p ( y ) 相 对 不 重 要 或 可 以 计 算 出 来 可 用 η 表 示 ) (1.5) p(x,y) = p(x|y)p(y) = p(y|x)p(x) \\ \rightarrow p(x|y) = \frac{p(y|x)p(x)}{p(y)} = \eta p(y|x)p(x) \tag{1.5} \\ (但p(y)相对不重要或可以计算出来可用\eta表示) p(x,y)=p(xy)p(y)=p(yx)p(x)p(xy)=p(y)p(yx)p(x)=ηp(yx)p(x)p(y)η(1.5)

条件贝叶斯公式
p ( x ∣ y , z ) = p ( y ∣ x , z ) p ( x ∣ z ) p ( y ∣ z ) = η p ( y ∣ x , z ) p ( x ∣ z ) (1.6) p(x|y,z) = \frac{p(y|x,z)p(x|z)}{p(y|z)} = \eta p(y|x,z)p(x|z) \tag{1.6} p(xy,z)=p(yz)p(yx,z)p(xz)=ηp(yx,z)p(xz)(1.6)

贝叶斯滤波

   gmapping是目前应用最广泛的基于滤波的SLAM算法,其算法实现是基于粒子滤波,而粒子滤波的本质就是贝叶斯滤波。在这篇文章中,我会结合机器人定位来讲解贝叶斯滤波。

介绍

  1. 估计的是概率分布,不是具体的数值
  2. 是一大类方法的统称
  3. 是一个抽象的表达形式—对于不同问题有不同的实现方式(卡尔曼家族、粒子滤波)
  4. 迭代估计形式

推导

1、符号说明:
x t x_t xt:表示 t t t时刻机器人的位姿;
z t z_t zt:表示 t t t时刻机器人的观测数据(激光雷达的数据);
u t u_t ut:表示 t t t时刻机器人的编码器里程计的数据。

2、贝叶斯滤波的更新公式:
b e l ( x t ) = p ( x t ∣ z 1 : t , u 1 : t ) = η p ( z t ∣ x t ) b e l ‾ ( x t ) 其 中 : b e l ‾ = ∫ p ( x t ∣ x t − 1 , u t ) p ( x t − 1 ∣ z 1 : t − 1 , u 1 : t − 1 ) d x t − 1 (2.1) bel(x_t) = p(x_t|z_{1:t},u_{1:t}) = \eta p(z_t|x_t) \overline{bel}(x_t)\\ 其中: \overline{bel} = \int{p(x_t|x_{t-1},u_t) p(x_{t-1}|z_{1:t-1},u_{1:t-1})}{\rm d}x_{t-1}\\ \tag{2.1} bel(xt)=p(xtz1:t,u1:t)=ηp(ztxt)bel(xt)bel=p(xtxt1,ut)p(xt1z1:t1,u1:t1)dxt1(2.1)
  该公式的作用是在已知 t − 1 t-1 t1时刻的概率分布,在给定 t t t时刻的观测数据 ( z t , u z ) (z_t,u_z) (zt,uz)的情况下,估计出状态量在 t t t时刻的概率分布。此处 b e l ( x t ) bel(x_t) bel(xt)表示 x t x_t xt的后验概率分布, b e l ‾ \overline{bel} bel表示 x t x_t xt的预测概率分布(先验概率分布)。
  
3、贝叶斯滤波的推导:
目标:在已知 p ( x t − 1 ∣ z 1 : t − 1 , u 1 : t − 1 ) 、 u t 、 z t p(x_{t-1}|z_{1:t-1},u_{1:t-1})、u_t、z_t p(xt1z1:t1,u1:t1)utzt的情况下,得到 p ( x t ∣ z 1 : t , u 1 : t ) p(x_t|z_{1:t},u_{1:t}) p(xtz1:t,u1:t)的表达式。
p ( x t ∣ z 1 : t , u 1 : t ) = p ( x t ∣ z t , z 1 : t − 1 , u 1 : t ) = p ( z t ∣ x t , z 1 : t − 1 , u 1 : t ) p ( x t ∣ z 1 : t − 1 , u 1 : t ) p ( z t ∣ z 1 : t − 1 , u 1 : t ) = η p ( z t ∣ x t , z 1 : t − 1 , u 1 : t ) p ( x t ∣ z 1 : t − 1 , u 1 : t ) (2.2) p(x_t|z_{1:t},u_{1:t}) = p(x_t|z_t, z_{1:t-1},u_{1:t}) \\ = \frac{p(z_t|x_t,z_{1:t-1},u_{1:t})p(x_t|z_{1:t-1},u_{1:t})}{p(z_t|z_{1:t-1},u_{1:t})}\\ = \eta p(z_t|x_t,z_{1:t-1},u_{1:t})p(x_t|z_{1:t-1},u_{1:t}) \tag{2.2} p(xtz1:t,u1:t)=p(xtzt,z1:t1,u1:t)=p(ztz1:t1,u1:t)p(ztxt,z1:t1,u1:t)p(xtz1:t1,u1:t)=ηp(ztxt,z1:t1,u1:t)p(xtz1:t1,u1:t)(2.2)
  因为当前时刻的激光观测数据 z t z_t zt仅与位姿 x t x_t xt有关,与历史观测 z 1 : t − 1 z_{1:t-1} z1:t1及历史到当前位姿 u 1 : t u_{1:t} u1:t无关(已知 t t t时刻位姿后,观测 z t z_t zt就与 x t x_t xt有关,与 u t u_t ut无关),公式 ( 2.2 ) (2.2) (2.2)第一步将 z t z_t zt z 1 : t − 1 z_{1:t-1} z1:t1分开。然后先忽略 z 1 : t − 1 z_{1:t-1} z1:t1 u 1 : t u_{1:t} u1:t,将 p ( x t ∣ z t ) p(x_t|z_t) p(xtzt)用贝叶斯公式展开,再把 z 1 : t − 1 z_{1:t-1} z1:t1 u 1 : t u_{1:t} u1:t代人展开的式子中。
  另外,我们还需要将公式(2.2)简化一下。
其中
已知 t t t时刻位姿后,观测 z t z_t zt就与当前位姿 x t x_t xt有关,与 u 1 : t u_{1:t} u1:t z 1 : t − 1 z_{1:t-1} z1:t1无关:
p ( z t ∣ x t , z 1 : t − 1 , u 1 : t ) = p ( z t ∣ x t ) (2.3) p(z_t|x_t,z_{1:t-1},u_{1:t}) = p(z_t|x_t) \tag{2.3} p(ztxt,z1:t1,u1:t)=p(ztxt)(2.3)
这里是将 p ( x t ∣ z 1 : t − 1 , u 1 : t ) p(x_t|z_{1:t-1},u_{1:t}) p(xtz1:t1,u1:t)用全概率公式展开得到 x t x_t xt x t − 1 x_{t-1} xt1的关系:
p ( x t ∣ z 1 : t − 1 , u 1 : t ) = ∫ p ( x t ∣ x t − 1 , z 1 : t − 1 , u 1 : t ) p ( x t − 1 ∣ z 1 : t − 1 , u 1 : t ) d x t − 1 (2.4) p(x_t|z_{1:t-1},u_{1:t}) = \int p(x_t|x_{t-1},z_{1:t-1},u_{1:t})p(x_{t-1}|z_{1:t-1},u_{1:t}){\rm d}x_{t-1} \\ \tag{2.4} p(xtz1:t1,u1:t)=p(xtxt1,z1:t1,u1:t)p(xt1z1:t1,u1:t)dxt1(2.4)
将上面全概率公式再简化,得到:
p ( x t ∣ x t − 1 , z 1 : t − 1 , u 1 : t ) = p ( x t ∣ x t − 1 , u t ) p ( x t − 1 ∣ z 1 : t − 1 , u 1 : t ) = p ( x t − 1 ∣ z 1 : t − 1 , u 1 : t − 1 ) (2.5) p(x_t|x_{t-1},z_{1:t-1},u_{1:t}) = p(x_t|x_{t-1},u_t) \\ p(x_{t-1}|z_{1:t-1},u_{1:t}) = p(x_{t-1}|z_{1:t-1},u_{1:t-1}) \tag{2.5} p(xtxt1,z1:t1,u1:t)=p(xtxt1,ut)p(xt1z1:t1,u1:t)=p(xt1z1:t1,u1:t1)(2.5)
上面公式 p ( x t ∣ x t − 1 , z 1 : t − 1 , u 1 : t ) = p ( x t ∣ x t − 1 , u t ) p(x_t|x_{t-1},z_{1:t-1},u_{1:t}) = p(x_t|x_{t-1},u_t) p(xtxt1,z1:t1,u1:t)=p(xtxt1,ut)便是机器人的运动模型。
令:
b e l ( x t ) = p ( x t ∣ z 1 : t , u 1 : t ) b e l ( x t ) ‾ = p ( x t ∣ z 1 : t − 1 , u 1 : t ) (2.6) bel(x_t) = p(x_t|z_{1:t},u_{1:t}) \\ \overline{bel(x_t)} = p(x_t|z_{1:t-1},u_{1:t}) \tag{2.6} bel(xt)=p(xtz1:t,u1:t)bel(xt)=p(xtz1:t1,u1:t)(2.6)
   b e l ( x t ) bel(x_t) bel(xt)是后验概率分布,也就是我们要求的实际分布; b e l ( x t ) ‾ \overline{bel(x_t)} bel(xt)是先验概率分布,也就是根据里程计数据得到的预测(proposal)分布。最后得到的式子如下:
b e l ( x t ) = η p ( z t ∣ x t ) b ‾ e l ( x t ) (2.7) bel(x_t) = \eta p(z_t|x_t)\overline bel(x_t) \tag{2.7} bel(xt)=ηp(ztxt)bel(xt)(2.7)

实例

在这里插入图片描述
   在上图a中,机器人的位置的概率分布是一个均匀分布,所以机器人无法获知自己的位置。图b中,机器人通过传感器检测知道了自己的位置在旁边,这时候概率分布就变成了在门对应的位置有一个较大的波峰,表示机器人可能在这三个位置上,但无法确定是哪一个门。图c图b,机器人向前移动了一定距离,到了另一个门边上,此时机器人的位置概率分布也随之产生变化,波峰的位置改变。这时候,图c的概率分布是通过里程计计算预测得到的,为先验概率分布,图d的概率分布通过观测数据更新后,得到的后验概率分布就确定了机器人的位置。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值