相关注释代码链接为:cartographer代码注释

代码主要分为两个部分,其一为cartographer的核心实现,另一个为cartographer的ros封装壳。首先介绍其ros封装,可以看到大概的调用流程,然后再深入源码去剖析其实现过程。但是其代码可以说十分的繁琐且复杂,在只能大致理清楚其逻辑。
Cartographer-ROS
根据运行的命令 roslaunch cartographer_ros offline_backpack_2d.launch bag_filenames:=${HOME}/Downloads/b2-2016-04-05-14-44-52.bag可以知道,运行文件offline_backpack_2d.launch启动算法。
- 加载配置文件
backpack_2d.lua - 调用launch文件
offline_node.launch
因此,深入文件 offline_node.launch
- 运行节点
rviz - 运行节点
cartographer_occupancy_grid_node - 运行节点
cartographer_offline_node
因此对于cartographer-ros来说,主要的节点就是这两个,其在如下文件中分别实现
offine_node_main.ccoccupancy_grid_node.cc
occupancy_grid_node

主要实现的功能有
- 新建一个定时器,定时发布全局地图信息
- 构造回调函数,在回调函数内处理子地图列表信息
其子列表信息回调函数流程如下:
- 设置所有之前的子地图为待删除子地图
- 在待删除子地图中去掉当前子地图列表中还存在的
- 获取新子地图信息
FetchSubmapTextures- 发布一个srv,获取压缩后的子地图栅格信息
- 对栅格地图信息进行解压
- 转换子地图信息格式

本文详细介绍了Cartographer的ROS封装及其核心实现。Cartographer_ROS主要包含两个节点,occupancy_grid_node和offine_node_main,分别负责发布地图和处理传感器数据。在核心实现中,Cartographer通过AddTrajectoryBuilder初始化,并使用TrajectoryBuilderInterface处理传感器数据,进行局部和全局轨迹生成。关键类包括LocalTrajectoryBuilder2D、GlobalTrajectoryBuilder和PoseGraph2D,涉及激光数据处理、回环检测和图优化问题的解决。整个流程中,数据压缩、运动畸变矫正、Ceres优化和因子图模型等技术起到了重要作用。
最低0.47元/天 解锁文章
2348

被折叠的 条评论
为什么被折叠?



