机器人学在Python中的实现(6):光线投射栅格地图

Hello,大家好,我是MPIG2018级研究新生刘飞亚,在上一章节中,我们讨论了高斯栅格地图的相关内容;机器人在认识环境的过程需要地图的构建来描述、认识环境,从而更好的感知周围环境。今天再来给大家介绍光线投射栅格地图的相关内容。

先看一下本节的主要内容:

一、地图

二、栅格地图

三、热图

四、光线投射算法思想

(一)地图

1、地图是对空间环境的有效表示,是移动机器人定位导航的基础。地图通过环境感知信息和地图信息的匹配,可以定位移动机器人在环境中的位置;还可以根据地图中所记录的障碍物位置,可以规划后续机器人从当前点到目标点的可行路径。

2、机器人学中地图的表示方法有四种:特征地图,拓扑地图,直接表征法和栅格地图。

栅格地图的基本思想:将环境分解成一系列离散栅格,每个栅格有一个值,表示该栅格被障碍物占用的情况。

(二)栅格地图

简单来说,栅格地图就是将机器人周围的环境(包括可行走的路、障碍物等等)用栅格地图表示出来。

栅格地图的优势:可以详细地描述环境信息,易于机器人的路径规划。缺点是随着栅格数量的增加,所需内存和维护的时间也迅速增长。

而光线投射栅格地图,简单来说就是:构建机器人周围的障碍物的相对位置及障碍物的阴影。即模拟这样一个过程:以机器人为中心(可以看做点光源),向四周发射光线,障碍物及它的阴影(不可直线到达区域)用栅格地图表示出来。

(三)热图

热图是将数值的大小以定义的颜色深浅表示出来。

比如拿到一批离散的数据,想看一下在哪个点数值比较大,在哪个点值比较低,你想把这样的一个值的变化,用颜色来区分出来,就可以用热图来实现。

f.heatmap(data,vmin,vmax,cmap)

data:矩阵数据集,需要显示的数据;

cmap是从数字到颜色的映射,取值是matplotlib包里的colormap名称或颜色对象,或者表示颜色列表;

vmax,vmin:分别是热力图的颜色取值最大和最小范围,默认是根据data数据表里的取值确定。

(四)算法思想

1、根据障碍物的位置(计算机可模拟生成坐标),计算栅格地图的显示的范围;

2、对以机器人为中心每10°周围划分区域,(以10°为例子,可根据障碍物的大小调整);

3、根据障碍物所在的区域,在此区域内,将比障碍物离机器人更远的栅格标记成阴影(标记相同颜色即可)。

具体的代码实现如下:

在main函数中生成4个随机样点(障碍物点)。

以机器人为中心周围分成360/10个区域(可+1防止溢出)。举例:precast[0],存储0-10°区域的栅格及它们的信息。

precastDB() 类,属性有:映射到栅格坐标(px,py),实际坐标(ix,iy),距原点(0,0)的距离d,点自己所在的区域angleid。

pmap[ ]:存储栅格数据(矩阵)。

先将之前得到的栅格范围通过np.mgrid()进行分片,得到一个一个小的栅格,再将每个栅格的赋值通过热图用颜色深浅表示出来。

模拟效果:

蓝色圆点:机器人位置(原点(0,0))

红色x:障碍物映射到栅格坐标

蓝色为阴影

黑点:实际坐标

想了解更详细的内容,就来看看我的Presantation吧:

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

扫码关注云+社区

领取腾讯云代金券