实现cartographer自动保存建好的地图 针对github tag 0.3.0版本
1.ros下建好的地图一般是使用命令$ rosrunmap_server map_saver -f map_name
一般使用gmapping hector建立的地图使用上述命令保存的地图是没问题的
2.但是在cartographer中使用上述命令也能保存地图但是 保存的地图有点问题,如下图
知乎上推荐 rosservice call /finish_trajectory "map" 默认会保存在.ros文件夹中 方法 会报错
改成 rosservice call /finish_trajectory 0 也会报错
3.于是要分析修改代码,在node_main.c文件添加2个自定义函
添加函数 1 FillSubmapSlice()
添加函数 2 save_to_tos_map(string map_pgm)
//map_pgm 要保存的地图路径跟名字,如"/home/aaa/map/2B_map" 地图存放的目录下
在run() 最后面对save_to_tos_map()调用即可自动保存建好的地图
整个node_main.c 文件 代码
/*
* Copyright 2016 The Cartographer Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include "cartographer_ros/node.h"
#include "cartographer_ros/node_options.h"
#include "cartographer_ros/ros_log_sink.h"
#include "gflags/gflags.h"
#include "tf2_ros/transform_listener.h"
#include
4.终端启动 demo_sick_map.launch 文件 开始建图 建图图之后 终端crtl + C 结束建图
下图 三面是透明玻璃 一面白墙 空旷地方建立的地图