初识Cartographer

引言

在学习slam和ros的过程中,不少用到gmapping和cartographer等开源的pkg包来进行嵌入式设备的建图。作为一个学习者,还是有必要了解一下Cartographer的底层实现的。

Cartographer和Cartographer_ros

知乎链接
Cartographer的主要理论是通过闭环检测来消除构图过程中产生的累积误差[1]。用于闭环检测的基本单元是submap。一个submap是由一定数量的laser scan构成。
Cartographer主要负责处理来自Laser、IMU、Odemetry等传感器的数据并基于这些数据进行地图的构建。所以这一部分应该说是cartographer代码的核心部分。
Cartographer_ros是基于ros的通信机制获取传感器的数据并将他们转换成cartographer中定义的格式传递给cartographer处理,与此同时也将cartographer的处理发布用于显示或保存。
是基于cartographer的上层应用。所以,cartographer_ros相当于是对cartographer进行了一层ROS接口的封装。根据官网的说明来看,即使不采用ROS,也可以运行cartographer算法。

这样一来,我们就清楚了Cartographer和Cartographer_ros之间的关系。

Cartographer里的文件夹

一、 Cartographer源码文件目录

  1. bazel: 第三方库的构建包括eigen、ceres等
  2. cartographer: 源码部分
  3. cmake: 包括了cmake模块的FindXXX.make文件以及相关的函数
  4. configuration_files: cartographer的lua配置文件
  5. docs: cartographer相关的一些指导文档
  6. scripts: 一些工具与库的安装脚本

二、 Cartographer/cartographer

文件内有8个文件夹,分别是cloud、common、ground_true、io、mapping、metrics、sensor、transform。

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

  2. sensor: 定义了传感器数据的相关数据结构。

  3. transform: 定义了位姿的数据结构及其相关的转化。如2d、3d的刚体变换等。

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

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

  6. cloud: grpc进行远程调用,与多机协同有关。

  7. ground_truth: slam开发过程中评估用的工具

  8. metrics: cartographer过程数据的各种输出格式

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

LZZ and MYY

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值