采用Cartographer纯定位模式覆盖原有地图问题
针对采用Cartographer进行纯定位模式会出现新地图覆盖先验地图的问题,原因是Cartographer在进行纯定位的时候会进行子图建立,也是一个建图的过程,将建立的子图与先验地图进行匹配来得到机器人的位置信息的,所以会覆盖先验地图很正常,要解决这个问题也很简单。
首先在启动定位的launch文件之后查看以下自己的话题rostopic list;
不出意外会有一个/map的话题,使用rostopic info /map命令去查看它的订阅和发布,它的发布者应该是Cartographer的cartographer_occupancy_grid_node,它同时会订阅submap_list。
总结以下,cartographer_occupancy_grid_node这个节点的订阅里面有submap_list,发布有map,因为submap_list是会改变的,所以map也会改变,那么解决方法就是,map的发布给注释了,也就是注释cartographer_occupancy_grid_node,那么另一个问题又来了,的确不会出现覆盖的情况了,但我原本的先验地图也没有了,我仍然需要发布map这个topic,可以采用map_server这个包来发布。
总结:
在launch文件里把cartographer_occupancy_grid_node这个节点注释了,然后在launch中加入节点,配置如下:
<node name="map_server" pkg="map_server" type="map_server" args="你的地图绝对路径/地图文件名.yaml" />
再运行launch就没问题了。