调试 Cartographer Laser-SLAM -- Cartographer 算法流程

本文详细介绍了Cartographer激光SLAM的算法流程,包括基本思路、输入处理、IMU数据作用、匹配策略、Ceres-Solver应用以及全局优化过程。通过对各个关键组件的解析,帮助读者理解Cartographer如何实现Local SLAM和Global SLAM,以及在实际应用中如何调整参数。
摘要由CSDN通过智能技术生成

Cartographer Algorithm walkthrough for tuning

本文章有后续更新版本,csdn排版和插入图片有点麻烦,我更新在我的个人站点了,欢迎阅读!

@author 薛轲翰

@email1 kehan.xue@gmail.com

@email2 17795832478@mail.nwpu.edu.cn

本文参考cartographer官方文档.

cartographer基本思路简介

cartographer基本思路简介

cartographer的主要贡献不是算法,而是工程的实现

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5RRJBw89-1607313168606)(/home/kehan/Documents/V5PP文档/技术文档/Cartographer/Cartographer_Algorithm_Walkthrough_for_Tuning/Cartographer_Algorithm_Walkthrough_for_Tuning-pics/high_level_system_overview.png)]

cartographer 可以看做两个独立但相关的子系统, Local SLAM 和 Global SLAM.Local SLAM可以被看做是前端(local trajectory builder), 任务是建立一个个的submap. 各个submap是本地一致的, 但是会慢慢的漂移.Golbal SLAM是后端, 用于作 loop closure constraints(回环).通过scans(集合成nodes)与submaps进行matching的方法来工作.并且可以结合其他传感器的数据来进一步提高精度,来确定一致性最强的Global optimization 方案. 3D SLAM中还会使用加速度计提供的重力的方向.

总的来说,Local SLAM 的主要工作是生成更好的 submaps, Global SLAM的工作是将这些 submaps 更好的结合起来.

其中,Local SLAM的配置文件主要为 trajectory_builder_2d.lua 和 trajectory_builder_3d.lua. Global SLAM的配置文件为pose_graph.lua

Input Process

首先是雷达扫描数据的距离范围.参数为下面两个,单位为m

TRAJECTORY_BUILDER_nD.min_range
TRAJECTORY_BUILDER_nD.max_range

如果将 3D 雷达用在 2D SLAM的话,提供一个"截断"的参数,就是把一定高度范围内的扫描点映射到 2D 的一个平面上.

TRAJECTORY_BUILDER_2D.max_z
TRAJECTORY_BUILDER_2D.min_z

如果 scan 中的点的 range 大于 max_range 时,会在 max_range 外面生成一个长度为TRAJECTORY_BUILDER_2D.missing_data_ray_length的空白区域.(?不太明白)

TRAJECTORY_BUILDER_nD.num_accumulated_range_data的作用及意义比较麻烦,会在下文range data标题下说到.

较近的表面(如路面)经常扫描得到更多的points,而远处的物体的points经常比较稀少. 为了降低计算量, 需要对点云数据进行下采样, 简单的随机采样仍然会导致低密度区的点更少,而高密度区的点仍然比较多.因此cartographer 采用 voxel_filter (体素滤波)的方法. 即将raw points(如何定义raw points? TODO) 为中心做一个边长为TRAJECTORY_BUILDER_nD.voxel_filter_size的立方体,然后只取立方体的形心.如果立方体较小的话会导致更密集的数据,而较大的话可能会导致数据丢失但是速度会更快.

不仅使用了定大小的 voxel_filter, Cartographer还用了 adaptive_voxel_filter, 该 adaptive_voxel_filter 可以在最大长度TRAJECTORY_BUILDER_nD.*adaptive_voxel_filter.max_length的限制下确定最佳的voxel_filter_size来实现目标的points数TRAJECTORY_BUILDER_nD.*adaptive_voxel_filter.min_num_points .

关于IMU数据的作用以及是否使用IMU数据的问题

IMU 数据用于观测精确的重力方向以及机器人的姿态.IMU 数据噪声较大但是整体的方向还是正确的.cartographer 内部有一套它自己处理IMU数据的流程.cartographer 并未使用 sensor_msgs/Imu 消息中的四元数信息,而是直接使用三轴线加速度与角速度.由于 2D SLAM 可以做到无外界信息来源而实时处理数据,所以 2D SLAM 可以选择是否使用 IMU 的消息.但是在 3D SLAM 中需要提供 IMU 数据作为扫描方向的初始猜测,可以大大降低 scan 匹配的复杂性.

cartographer中关于时间的参数单位均为s(秒).

TRAJECTORY_BUILDER_nD.use_imu_data = true
TRAJECTORY_BUILDER_nD
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值