cartographer源码学习1——整体框架介绍

主要参考链接:

  1. April Lee的cartographer源码详细解读
  2. slamcode的cartographer源码分析
  3. cartographer 超详细注释代码
  4. cartographer官网

一. 代码框架

cartographer开源代码主要包含两个部分:casrtographer、cartographer_ros。cartographer主要负责处理来自激光雷达、IMU、里程计的数据,并基于这些数据进行地图的构建,是cartographer理论的底层实现。cartographer_ros则是基于ros的通信机制获取传感器的数据并将它们转换成cartographer中定义的格式传递给cartographer处理,与此同时也将cartographer的处理结果发布用于显示或保存,是基于cartographer的上层应用。cartographer_ros相当于对cartographer的ROS封装。

算法流程如下:
在这里插入图片描述
cartographer可以分为两部分:

  1. 前端,Local SLAM部分;该部分主要任务是建立维护Submaps,但是会随时间产生累计误差。该部分相关参数定义在 src/cartographer/configuration_files/trajectory_builder_2d.luasrc/cartographer/configuration_files/trajectory_builder_2d.lua 中。
  2. 后端,Global SLAM部分;该部分主要进行回环检测以及后端优化。回环检测本质上也是一个优化问题,文中将其表达成 pixel-accurate match形式,采用Branch-and-Bound Approach(BBA)方法来解决。

cartographer运行是两个比较重要的节点:

  • cartographer_node 订阅传感器数据,生成submap_list
    |==@订阅的topic
    |----------scan (sensors_msgs/LaserScan) 激光传感器数据
    |----------echoes (sensors_msgs/MultiEchoLaserScan) 超声波数据
    |----------points2 (sensors_msgs/PointCloud2) 点云数据
    |----------imu (sensors_msgs/Imu) IMU数据
    |----------odom (nav_msgs/Odometry) 里程计数据
    |==@发布的topic
    |----------scan_matched_points2 (sensors_msgs/PointCloud2) 匹配好的点云数据,用来scan-to-submap matching
    |----------submap_list (cartographer_ros_msgs/SubmapList) 发布构建好的submap
    |==@提供的Service
    |----------submap_query (cartographer_ros_msgs/SubmapQuery) 可以提供查询submap的服务,获取到查询的submap
    |----------start_trajectory (cartographer_ros_msgs/StartTrajectory) 维护一条轨迹
    |----------finish_trajectory (cartographer_ros_msgs/FinishTrajectory) 结束一条给定ID的轨迹
    |----------write_state (cartographer_ros_msgs/WriteState) 将当前状态写入磁盘文件中
    |----------get_trajectory_states (cartographer_ros_msgs/GetTrajectoryStates) 获取指定trajectory的状态
    |----------read_metrics (cartographer_ros_msgs/ReadMetrics)
    
  • cartographer_occupancy_grid 订阅submap_list,生成栅格地图

cartographer_node节点的入口函数 /cartographer_ros/cartographer_ros/node_main.cc

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值