KLD-Sampling-MCL解析

KL-Divergence-Sampling,简称KLD-Sampling,是AMCL中采用的一种动态调整粒子数量的方法。这个问题在面试时多次被问到,因此有必要深入学习一下。

KLD-Sampling的核心是不断添加粒子,直到粒子数量满足一个动态变化的上界。这个上界由我们期待以多大的概率(1-delta)满足真实后验和基于采样的近似后验之间的误差在\epsilon之内,以及当前已添加粒子对(离散化的)状态空间的覆盖数量k来决定。该上界的计算公式如下:

\[M_x := \frac{k-1}{2\epsilon}{\{1-\frac{2}{9(k-1)}+\sqrt{\frac{2}{9(k-1)}}z_{1-\delta}\}}^3 \]

式中z_{1-\delta}是z分布在概率1-\delta时候的值,可以通过查表得到。

因为随着粒子的添加,状态空间会慢慢被覆盖,所以k会逐渐增加,因此这个上界也是变化的。变化的趋势是:一开始粒子数量少时k会比较少,因此后面的三次项会比较大,所以一开始M_x增长很快;随着k逐渐增大,M_x与k会趋向线性关系,因此M_x在k稳定后不怎么变化。另外,还可以通过用户定义的min_particles和max_particles来限制M_x的边界。

上面说的真实后验是怎么来表达的呢?它是通过将状态空间以一定间隔进行离散化得到的一个直方图来表达,对于2D定位估计,状态空间是三维的,因此这个直方图也是三维的。粒子对状态空间覆盖数量k就对应直方图的非空bin的数量。在具体实现上,这个直方图是通过kd-tree来实现的,每个叶子结点对应一个bin。这样的话,将新增加的粒子插入后,统计叶子结点的数量就能知道k值。

以上是我个人初步理解,还不够完善,比如说z分布还没有去深究,后验分布的误差\epsilon到底是怎么刻画的等等;欢迎指正和交流讨论~

 

posted @ 2021-12-12 12:00  意大利泡面  阅读(476)  评论(0)    收藏  举报