地图保存与地图服务
导航工作需要使用到建好的地图,因此需要把建图的地图进行保存,并可服务于导航的使用
1. 地图保存实现
前提条件
需要有Map话题的发布,因此可以在保持开启gmapping建图时使用地图保存。
1.1 创建存储地图的文件夹
在nav_test文件夹下创建map文件夹用来保存地图
nav_test是上一章节 Gmapping建图 中创建的功能包,有关导航的所有文件都存放在该功能包中
cd到nav_test(你创建的导航功能包)中后输入:
1.2 地图保存launch文件
在导航功能包的launch目录下新建文件:map_save.launch
cd到launch目录下后输入指令:
可直接复制
<launch>
<!-- 将保存路径作为参数,方便更改 -->
<arg name="filename" value="$(find nav_test)/map/mymap" />
<!-- 地图服务节点 -->
<node name="map_save" pkg="map_server" type="map_saver" args="-f $(arg filename)" />
</launch>
说明
- 注意这里的第二句末尾
args="-f $(arg filename)"这里就指定了保存的路径和文件名称 - 第一句就是指定的保存路径和文件名称
- 路径:nav_test/map(可自定义)
- 名称:mymap(可自定义)
保存退出后可以在工作空间的根目录下catkin_make编译一下
当gmapping在运行时,新开终端运行map_save.launch就可以保存地图到map文件夹中,并以mymap(可自定义)命名
- 运行建图
- 新开终端
cd到工作空间source ./devel/setup.bash刷新环境变量roslaunch nav_test map_save.launch- 到map文件夹中查看是否有保存的地图
2. 地图服务实现
在已有地图的情况下,使用地图服务可以查看地图
2.1 地图服务launch文件
在nav_test的launch文件夹中新建map_server.launch:
可直接复制
<launch>
<!-- 设置地图来源 -->
<arg name="map" default="mymap.yaml" />
<!-- 运行地图服务器,并且加载设置的地图-->
<node name="map_server" pkg="map_server" type="map_server" args="$(find nav_test)/map/$(arg map)"/>
</launch>
说明
这个launch文件会加载名称为map的ymal文件,默认加载mymap.ymal的文件, 名称是可以自定义的,但是要确保default后面的文件的确存在,否则无法加载地图
保存退出后可以在工作空间的根目录下catkin_make编译一下
运行这个文件时不需要运行建图,运行这个文件后可以手动开启rviz(也可以在launch文件中添加<node pkg = “rviz”... />来一起启动)添加by topic中的map组件会显示保存的地图
cd到工作空间根目录source ./devel/setup.bash刷新环境变量roslaunch nav_test map_server.launch- 输入
rviz打开rviz - 添加
map组件



