cartographer从入门到放弃2---框架

cartographer是基于图优化的算法,主要的目标是实现低计算资源的损耗,达到实时slam的目的,看具体代码之前现对整个框架介绍

主要参考:Cartographer源码阅读1——整体框架介绍

1.catrographer整体框架

cartographer的代码主要包括两个部分:cartographer和cartographer_ros。

cartographer主要负责处理来自Laser、IMU、Odemetry等传感器的数据并基于这些数据进行地图的构建。所以这一部分应该说是cartographer代码的核心部分。而cartographer_ros是基于ros的通信机制获取传感器的数据并将他们转换成cartographer中定义的格式传递给cartographer处理,与此同时也将cartographer的处理发布用于显示或保存。是基于cartographer的上层应用。所以,cartographer_ros相当于是对cartographer进行了一层ROS接口的封装。

cartographer_ros是基于ros的通信机制获取传感器的数据并将他们转换成cartographer中定义的格式传递给cartographer处理,与此同时也将cartographer的处理发布用于显示或保存。是基于cartographer的上层应用。所以,cartographer_ros相当于是对cartographer进行了一层ROS接口的封装。

2.cartographer算法流程(Cartographer ROS Integration

根据官网,cartographer的整体流程如下:

cartographer的整体框架可以分为 、Local_SLAM和Global_SLAM 滤波器等

input Sensor data主要是传感器数据的输入:lidar, Odometry, IMU,Fixed Frame pose(暂时不知)

Local SLAM也被称为Frontend,负责生成较好的子图。从传感器出发,Laser的数据经过两个滤波器后进行Scan Matching,用来构建子图submap, 而新的Laser Scan进来后也会插入到已经维护着的子图的适当位置。如何决定插入的最优位姿,就是通过Ceres Scan Matching来实现的。估计出来的最优位姿也会与里程计和IMU数据融合,用来估计下一时刻的位姿。

该部分相关的参数定义在/src/cartographer/configuration_files/trajectory_builder_2d.lua和/src/cartographer/configuration_files/trajectory_builder_3d.lua中。

Global SLAM也称为Backend. 负责进行全局优化,将不同的子图以最匹配的位姿贴在一起,该部分的主要任务是进行Loop Closure。如前所述,闭环检测本质上也是一个优化问题,文中将其表达成了pixel-accurate match的形式,采用Branch-and-Bound Approach (BBA)的方法来解决。

3.文件框架(cartographer和cartographer_ros)

整体框架

cartographer部分

 

cartographer_ros

1.src_carto/cartographer

src_carto/cartographer主要包含cartographer和configuration_files等,其中cartographer是核心代码,configuration_files为配置文件。

cartographer文件

src_carto/cartographer/cartographer部分源码主要分为了如图所示的几个文件夹:cloud、common、ground_truth、io、mapping、metrics、sensor、transform。其中一些文件夹的作用我们也能猜到:

1. common: 定义了基本数据结构和一些工具的使用接口。例如,四舍五入取整的函数、时间转化相关的一些函数、数值计算的函数、互斥锁工具等。详见Common部分源码分析

2. sensor: 定义了传感器数据的相关数据结构。详见sensor源码分析

3. transform: 定义了位姿的数据结构及其相关的转化。如2d\3d的刚体变换等。详见:transform部分源码分析

4. mapping: 定义了上层应用的调用借口以及局部submap构建和基于闭环检测的位姿优化等的接口。这个文件也是算法的核心。其中mapping_2d和mapping_3d是对mapping接口的不同实现。详见mapping部分源码分析

5. io: 定义了一些与IO相关的工具,用于存读取数据、记录日志等。详见io部分源码分析

6. cloud

src_carto/configuration_files

 

2.cartographer_ros下的文件如图所示:

cartographer_ros_msgs里定义了部分msg文件和srv文件。cartographer_rviz是与显示相关的函数。

 

参考文章:

1.cartographer源码详细解读

 

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值