这篇文章的理论核心是阐述展开:《概率机器人》的一句话,“FastSLAM本身就是一种R-B滤波。”以及阐述展开《概率机器人》第13章 FastSLAM 算法所言,"本章基于栅格的FastSLAM算法归功于Hahnel等(2003b),他们将改进的建议分布思想与R-B滤波相结合,并将其应用到基于栅格的地图。"

所以,理论涉及粒子滤波,RBPF粒子滤波,占据栅格地图构建,FastSLAM,建议分布等。

a.gmapping理论总览

Ⅰ. 首先,先给大家献上这篇:R-B PF 粒子滤波应用到Grid-based场景建图基础阐述篇:

【1】www2.informatik.uni-freiburg.de

Ⅱ.然后,进入这篇:R-B PF 应用到Grid-based场景建图拓展篇,相较于上一篇,更详细,附上了建图的算法原理伪码:

【2】people.eecs.berkeley.edu

ok,fine;回顾一下R-B粒子滤波的Mapping流程:

b.摘自论文里的RBPF mapping流程

Ⅲ.接着,进入FastSLAM的起源:

【3】EE780 Final Project (bilkent.edu.tr)

【4】cs.bilkent.edu.tr/~culh

Ⅳ.如果想好好了解FastSLAM的前世今生:

【5】ri.cmu.edu/pub_files/pu

Ⅴ.然后进入FastSLAM2.0:

【6】robots.stanford.edu/pap

Ⅵ.基于栅格的FastSLAM:

前面Ⅰ~Ⅴ:均为介绍FastSLAM;

现在开始,将FastSLAM算法扩展到占用栅格地图。程序13.4给出了具有占用栅格地图的FastSLAM算法,这个算法借助了蒙特卡洛定位(Ⅶ补充)和占用栅格地图构建(Ⅷ补充)。

这个算法使用的每个函数都是定位和地图构建所使用算法的变种。

c.引自《概率机器人》程序13.4 获得占据栅格地图的FastSLAM算法

其中: sample_motion_model:选odometry模型

d.引自《概率机器人》程序5.5 里程计运动模型

measurement_model_map:

e.引自《概率机器人》程序6.4 计算地标测量似然的算法

update_occupancy_map:

f.更新栅格地图的步骤示例,参考自网络

Ⅶ.蒙特卡洛定位:

此为蒙特卡洛定位的理论补充:

见:【7】Churlaaaaaaa:Monte Carlo Localization | 基础原理篇+配备代码讲解

Ⅷ.占据栅格地图:

此为占据栅格地图构建的理论补充:

g.引自《概率机器人》程序9.1 占用栅格算法

其中用到的反演模型(inverse_sensor_model):

h.引自《概率机器人》程序9.2 装备了测距传感器的机器人的简单的反演测量模型

但是如果我采用最大后验占据栅格算法:

i.引自《概率机器人》程序9.3 最大后验占用栅格算法

所选用的measurement_model就是传统测量模型。

Ⅷ.总结与思考

重点1:scan matcher;如何匹配,怎么判定匹配度高,激光和里程计数据怎么介入;

重点2:如何采样生成粒子,这个粒子是带着一个独立的地图,如何挑选出得分最高的粒子;

重点3:如何重采样,如何有效改进;

重点4:什么是建议分布,目标分布,为什么要改进建议分布;

重点5:怎么高效实现,考虑复杂度(FastSLAM),《概率机器人》的思想是将地图组织为平衡二叉树(balanced binary tree);