目录
一、ROS中栅格地图格式
二、C++节点发布地图
2.1 发布者发布地图的C++实现
三、python节点发布地图
一、ROS中栅格地图格式
机器人导航所使用的地图数据,就是ROS导航软件包里的map_server 节点,在话题/map中发布的消息数据,消息类型是nav_ msgs消息包的OccupancyGrid,这个单词翻译过来叫做占据栅格,就是一种正方向小格子组成的地图,每个格子里填入一个数值,表示障碍物的占据情况。
栅格可大可小,理论上来说,栅格趋近于无穷小时,就可以完美表达障碍物的占据信息。栅格尺寸指的是栅格的单边长度。栅格尺寸体现了地图的精细程度,所以常常被用来表示栅格地图的分辨率。在ROS中栅格地图的默认分辨率是0.05米。
我们将空白的栅格赋值0,被占据的栅格赋值100。以行为单位将二维栅格地图做成一维的数组,再记录栅格地图的行数、列数信息,就可以将栅格地图描述清楚了。这就是ROS中OccupancyGrid消息包的数据内容。
在apt官网可以查找nav_msgs消息包,在他的wedsits网站中找到OccupancyGrid。如下图所示:
第一行是header,主要是时间戳和坐标系ID。第二个是地图的描述信息。第三个是一个八位整型的数组,这就是地图的数据,按照行优先的顺序,从栅格矩阵的(0,0)位置开始排列。(0,0)位置也就是地图最左下角的栅格。将第二个信息展开,如下图所示。
二、C++节点发布地图
2.1 发布者发布地图的C++实现
将要发布的栅格地图:
实现步骤:
第一步中,要加上nav_ msgs依赖项,因为我们要用到它里面的OccupancyGrid消息类型。
step1:
step2:
step3:
step4:为节点添加编译规则。
step5:编译+运行
step6:运行rvize。
先确定一下世界坐标系的原点位置,点击add,添加坐标轴标识。
这个标识的位置就是世界坐标系的原点。
点击add,添加地图显示:
将地图的话题选择为刚刚发布的话题/map:
然后就可以在Rvize上看到栅格地图了
三、python节点发布地图
实现步骤:
step1:
step2:
step3:添加可执行权限
step4:运行节点,运行Rviz,其余的同上。