SLAM 建立局部二维栅格地图的一种方法

转载请说明出处:http://blog.csdn.net/zhubaohua_bupt/article/details/72923373


二维占据栅格地图(栅格地图)广泛应用于移动机器人导航领域中,比如路径规划、实时避障。

栅格地图的绘制通常有两种方式,一种是通话雷达扫描,另一种是通过相机获取场景三维点云,然后再绘制栅格地图.

本篇博客讲述的是一种基于深度相机的建图方法.深度相机可以输出相机的原图和深度信息,即可以实时的获取场景的三维点云.

我们只利用深度信息就可以建立局部栅格地图.建立地图的步骤如下:


图1  局部栅格地图绘制流程

下面通过对一个场景建立局部地图的过程,解释每一步骤并给出结果:

 

下图为我们要创建的栅格地图场景,这个例子中,我们获取以地面为起点,0-0.8米的点云来画栅格地图。


图2 本例中画取栅格地图的场景

第一步:初始化局部地图

首先,初始化局部地图需要设定地图尺寸,栅格大小(每一栅格所代表的实际距离);

其次,先把整个图像设置成黑色,代表未知区域,按距离从近到远扫描,如图3,扫描到的区域置灰,代表相机能看到的范围。

图 3  初始化局部地图的过程

最后,扫描完成,初始化的地图如图4所示

图4  初始化后的局部地图

第二步 :获取一定高度范围内的三维点

对于移动机器人而言,只有一定高度范围内的障碍才对其构成威胁,所以在建图时,我们只考虑这个范围内的三维点。


第三步:投影形成二维离散障碍图

 

获取离散的障碍栅格图是为了方便下一步的扫描,分为两个小步骤:

1 投影统计,统之前我们在一定高度范围内提取的点云在初始化地图上的投影。图5中红色部分代表空间中离散三维点往二维栅格的投影.

本文用像素点值来统计每个栅格被障碍投影的次数。请注意,图5中红色三维点的投影超过我们初始化的栅格地图的原因是,我们在初始化地图时,

人为的控制地图最远距离maxZ,即我们只画距离相机在maxZ之内的障碍,但实际中,肯定有超过这个范围的点云,除非把maxZ设的很大。

因此,就造成图5中超出范围的现象。

图5 障碍投影统计图

2 用阈值判别每个栅格是否是障碍

在1中,我们像素点值来统计每个栅格被障碍投影的次数,当次数大于某个阈值时,就认为对应栅格被障碍占据。

表现在图5中,就是,红色越亮,就越可能是障碍。经过此步,就形成了离散的障碍占据图,如图6,绿色代表被障碍占据的栅格。

图 6 离散的障碍占据图

第四步:从相机中心扫描放射扫描,形成局部栅格地图

 

这一步是扫描形成栅格图,核心在于扫描。由于上一步我们获取的是离散的栅格障碍图,而且栅格地图最终的样子应该是是以相机为中心,

放射扫描第一次遇到障碍以后的位置都是不确定的。因此,本步骤就是以相机光心为起点,放射扫描所有角度,

每一次扫描,都把光心和第一次遇到障碍之间的栅格画成白色,代表可通行区域,另外,遇到障碍就开始下一步的扫描,这样第一次遇到的障碍身后的区域都是灰色。

 图8 和 图9是从左至右扫描时的两个时刻。


注:我用的扫描是方法是

图7 扫描方法


图8  扫描过程图1


图9  扫描过程图2


图10 是扫描形成的障碍占据栅格地图。


图10 扫描形成的局部栅格地图

在图10中,白色为可通行区域,灰色代表障碍以及障碍身后的未知区域,如果想把画出障碍边界,只需要在扫描时把边界画成其他颜色即可。

本文描述的是如何画一个局部障碍占据栅格地图,在画完局部地图后,还要做的工作是把局部地图融入全局地图,从而画出场景的二维全局地图,以便于路径规划等其他操作。如何画全局地图,见后续博客.
原文地址:https://www.cnblogs.com/zhubaohua-bupt/p/7182790.html