利用cartographer的cartographer_pbstream_to_rosmap节点写了个launch文件,功能为离线将pbstream文件转换成标准ros格式地图。在早些版本曾有过类似launch文件,后被开发者删除。该node的代码位于pbstream_to_ros_map_main.cc。
<launch>
<node name="cartographer_pbstream_to_ros_map" pkg="cartographer_ros"
type="cartographer_pbstream_to_ros_map" args="
-pbstream_filename $(arg pbstream_filename)
-map_filestem $(arg map_filestem)
-resolution $(arg resolution)"
output="screen">
</node>
</launch>
launch文件的三个配置参数依次为pbstream文件路径,需要保存的ros格式map文件路径(注意不带文件后缀名),分辨率。
例:
roslaunch cartographer_ros offline_pbstream_to_rosmap.launch pbstream_filename:=/home/cabin/Desktop/carto_map.pbstream map_filestem:=/home/cabin/Desktop/ros_map resolution:=0.05
运行后在桌面得到ros_map.pgm和ros_map.yaml。
更简单的方法,利用cartographer_pbstream_to_ros_map节点:
rosrun cartographer_ros cartographer_pbstream_to_ros_map -map_filestem=/home/cabin/Desktop/ros_map -pbstream_filename=/home/cabin/Desktop/carto_map.pbstream -resolution=0.05
运行后得到同样的效果。
另在此记录先前未注意的保存cartographer地图的service用法。在建图过程中执行如下指令将在桌面生成pbstream文件而不影响建图。
rosservice call /write_state /home/cabin/Desktop/carto_map.pbstream