Cartographer使用篇:保存地图
工作环境:
ubuntu16.04+ROS(Kinetic)+Cartographer-1.0.0
地图文件
-
.pbstream
cartographer格式地图文件,本质上是一个压缩protobuf文件,内部包含轨迹等状态。运行时为了实时性,扔掉了大部分传感器数据,里面记录十分粗糙。
-
.bag
全部的传感器数据文件。
只有当算法完成,建好了最佳轨迹,再将.pbstream、.bag(全部传感器数据)、.urdf(传感器外参)、.lua(配置文件)结合起来创建高分辨率地图。
主要程序可以去阅读assets_writer,进行点云的染色、滤波以及导出不同格式的点云,相关程序在cartographer/io路径下。简单介绍一下,io路径实现了点云的读取和存储,模块化程序,不同的头文件对应不同流水线的处理器,类似于链表,分阶段式执行。其中,points_processor.h定义了基类PointsProcessor,抽象了所有处理器的公有接口。
地图调参
配置文件: assets_writer_backpack_3d.lua,提供给cartographer/io路径下的程序使用;
-
color_points
根据frame_id给点云添加颜色;主要成员color、frame_id;
-
dump_num_points
记录输出处理的点数量;主要成员num_points;
-
fixed_ratio_sampler
采样过滤器,控制固定采样频率的点通过;主要成员sampling_ratio;
-
frame_id_filter
帧过滤器,控制黑名单或者白名单的帧点通过;主要成员keep_frames、drop_frames;
-
write_hybrid_grid
创建大尺寸体素混合网格,控制通过的光线;主要成员voxel_size、range_data_inserter;
-
intensity_to_color
将光强转化为颜色;主要成员min_intensity_、max_intensity_、frame_id_;
-
min_max_range_filtering
距离过滤器;主要成员min_range_、max_range_;
-
voxel_filter_and_remove_moving_objects
体素滤波,滤除动态物体;主要成员voxel_size_;
-
write_pcd
存储pcd格式点云;
-
write_ply
存储ply格式点云;
-
write_probability_grid
存储指定分辨率概率栅格;主要成员resilution、range_data_inserter;
-
write_xray_image
存储切片透明图片;主要成员voxel_size;
-
write_xyz
存储XYZ(ASCII)点
地图保存
这里以Public 3D 德国博物馆 Data b3-2016-04-05-14-14-00.bag 为例,演示如何保存地图。
-
运行离线节点
$ roslaunch cartographer_ros offline_backpack_3d.launch bag_filenames:=${HOME}/Downloads/b3-2016-04-05-14-14-00.bag -
保存.pbstrem文件
$ rosservice call /finish_trajectory 0 $ rosservice call /write_state "{filename: '${HOME}/Downloads/b3-2016-04-05-14-14-00.bag.pbstream', include_unfinished_submaps: 'true'}" -
保存ply地图
(1)修改assets_writer_backpack_3d.lua
VOXEL_SIZE = 5e-2include "transform.lua"options = {tracking_frame = "base_link",pipeline = {{action = "min_max_range_filter",min_range = 1.,max_range = 60.,},{action = "fixed_ratio_sampler",sampling_ratio = 0.001,},{action = "intensity_to_color",min_intensity = 0.,max_intensity = 4095.,},{action = "write_ply",filename = "points.ply",},} }(2)运行assets_writer节点,保存地图
$ roslaunch cartographer_ros assets_writer_backpack_3d.launch bag_filenames:='${HOME}/Downloads/b3-2016-04-05-14-14-00.bag' pose_graph_filename:='${HOME}/Downloads/b3-2016-04-05-14-14-00.bag.pbstream'
上述节点运行完成,我们就可以在bag路径下看到b3-2016-04-05-14-14-00.bag_points.ply点云文件了:
这里我们使用CloudCompare软件打开看一下。
至此,关于cartographer如何保存地图就介绍完了,如果有什么问题可以评论区探讨或者私信都可以。
参考资料:
[1]. Exploiting the map generated by Cartographer ROS
[2]. 【cartographer源码分析】系列的第四部分【io源码分析】
[3]. Public Data - Deutsches Museum
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
