Ros下使用slam建图后的地图进行路径规划(3)——Ros ...

      最后更新:2022-01-10 11:37

      说明

      1. ROS下已经内置了路径规划插件,可以直接运行官网例程, 地址 在这。
      2. 以下的相关操作都是基于本人的实验场景以及电脑配置,大多数操作会尽量说明,某些不尽之处尽请谅解。

      3. 本文的系统是Ubuntu16.04,使用的机器人是TIAGo。

      4. Ubuntu下截图标记、操作不太方便,所以有些图没有标记,通过文字表述。

      1. ROS栅格地图

      在上文我们已经建好了地图,那么在利用地图进行路径规划前,我们有必要了解一下ROS帮我们建好的地图,首先地图由两部分组成,一个是.pgm图片文件,可以直接双击打开;一个是yaml文件,是一些参数文件,如下图。

      文件中的主要参数:

      --resolution: 表示地图的分辨率,也就是一个栅格是5cm;

      --origin: 地图的原点,这个原点是地图的左下角,在x轴和y轴都是 -50m的位置;

      --occupied_thresh: 地图某个栅格是否有障碍物的阈值,大于该阈值,则认为该栅格有障碍物。

      如果我们运行以下指令,我们可以得到地图的宽度和高度,如下图。

      我们可以看到地图的宽度和高度都是1984, 然后每个栅格是5cm,所以地图大小是99.2m * 99.2m。

      2. 地图的数据表示

      通过第一节,我们知道地图的形状以及相关参数,但是数据表示是怎样的呢?

      地图的数据类型是消息类型 nav_msgs 中的OccupancyGrid类,该类的成员可去 该网址 查看,如下图。

      里面包含消息头、地图元数据以及真正的地图数据,地图元数据的数据成员包含宽度、高度、分辨率以及原点,这不正好可以和那个地图的yaml参数文件对应起来,如下图。

      然后对于地图数据,为什么是一维数组,而不是二维数组呢?这边其实是进行二维数据和一位数组的映射,即data[index] = data[i*width + j] = map[i_height][j_width]。

      3. 自定义地图并在Rviz查看

      复制如下代码,放在自己的可执行文件中,然后通过rosrun或者roslaunch运行程序。

      运行后在另一个终端打开rviz,添加Map组件,并且topic选择程序中的“my_map”,同时添加一个Axes组件,用来查看XYZ的正方向,最终结果如下图所示。

      可以看到,地图的左下角位于x轴的-2米,y轴的-3米处,并且地图中在1/2~5/8高度的地图是一块白色(也就是数据是0,表示可通行),然后5/8~3/4是黑色地图(表示地图有障碍物,是概率,1~100),其它地图是灰色(数据是-1,表示未探索)。

      本文由 在线网速测试 整理编辑,转载请注明出处。

          热门文章

          文章分类