机器人学在Python中的实现(3):PF

Hello,大家好!我是MPIG2018级研究生黄垚。今天给大家带来的是粒子滤波相关内容的介绍。在上一章节中介绍了无迹卡尔曼滤波。虽然UKF避免了求取函数的雅可比矩阵,可以提高滤波器的性能,但它依然没有脱离KF的框架,这就不可避免的受到高斯模型的限制。因此,今天为大家介绍的粒子滤波就是一种不需要对后验密度进行强参数化假设的非参数滤波。

首先我们看下本章主要内容:

粒子滤波的主要思想

粒子滤波在定位中的应用--粒子滤波定位算法

粒子滤波定位算法在python中的代码实现及分析

粒子滤波在其他场景下的应用

(一)粒子滤波的主要思想

粒子滤波也是一种非线性算法,通过对后验概率密度进行数值近似求解,从大数定理统计的角度来解决问题。它将关心的状态矢量表示为一组带有权值的随机样本,并且基于这些样本和权值来计算状态估值。

(二)粒子滤波在定位中的应用--粒子滤波定位算法

下面我们将粒子滤波应用在实际的定位情景中,为大家介绍粒子滤波定位算法。

粒子滤波定位又称为蒙特卡罗定位。其本质是使用一组有限的加权随机样本(粒子)来近似表征任意状态的后验概率密度。基本的MCL算法步骤如下:

即用M个粒子来描述状态向量的后验概率分布。算法第4行从系统转移模型中取样,将这些取样的粒子作为先验值。第5行使用测量模型修正粒子的权值。算法第8至11行实现了所谓的重采样,由从暂时集X中抽取替换了M个粒子,抽取每个粒子的概率由其权值决定。

下面举一个简单的例子,来理解MCL算法:

如图(a)所示,机器人在水平方向沿一维直线移动。为了推测自身位置,初始时刻在其运动范围内随机生成均匀分布的粒子。粒子的X轴坐标表示推测的机器人位置,Y坐标表示处于这个位置的概率。机器人通过传感器探测门时,按照算法第5行,MCL将修正每个粒子的权值。结果如图(b)所示,可以看到与测量结果接近的粒子被赋予更大的权值。

图(c)为重采样且结合粒子运动后的粒子分布。即重采样后粒子权值归一,但是在机器人可能出现的位置处粒子数目开始变多。接下来再进行校正,如图(d)所示,大部分累计概率质量集中在第二扇门上,这也是最有可能出现的位置。图(e)为进一步的运动导致另一个重采样步骤,并根据运动模型产生一个新的粒子集。

从这个例子中应该可以看出,粒子集近似于正确的后验,就像精确的贝叶斯过滤器一样。

(三)粒子滤波定位算法在python中的代码实现及分析

粒子滤波算法的精髓所在就是它的权值计算以及重采样过程:

(1)更新粒子权值:使用测量数据(机器人距每个路标的距离)来修正每个粒子的权值,保证与真实位置越接近的粒子获得的权值越大。

其中涉及到的运动模型motion_model以及高斯似然函数gauss_likelihood有如下定义:

(2)重采样:重采样方法舍弃权值较小的粒子,代之以权值较大的粒子,有点类似于遗传算法中的“适者生存”原理。

(3)仿真结果:

图中黑色“*”表示地标,黑色实线代表航迹推算的轨迹,蓝色实线代表机器人运动的真实轨迹,红色实线代表PF估计的轨迹。从仿真结果我们可以看到,相比于航迹推算而言,粒子滤波估计的轨迹能较好的拟合到真实位置。

(四)粒子滤波在其他场景中的应用

上面我们介绍了关于粒子滤波器相关的原理与算法,并将PF应用在定位场景下为大家做了一个详细的介绍。为了更全面地认识的PF,下面的例子将PF应用于visual tracker场景带大家看看:

A 3D visual tracker using a Markov Chain Monte Carlo particle filter

权重计算过程:

粒子重采样过程:

仿真结果:

想要更加详细了解本讲更多细节的内容吗?那就一起来观看下面的Presentation的具体讲解吧:

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181109G1M3WT00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券