当前位置: 代码迷 >> 综合 >> 机器人开发--Cartographer
  详细解决方案

机器人开发--Cartographer

热度:92   发布时间:2023-12-28 14:16:10.0

机器人开发--Cartographer

  • 1 介绍
  • 2 流程
  • 3 代码结构
  • 3 代码结构
  • 参考

1 介绍

artographer是一款可以跨多个平台和传感器配置提供2D和3D实时同步定位和绘图(SLAM)的系统。这个项目提供了Cartographer的ROS集成。
在这里插入图片描述
cartographer是google推出的一套基于图优化的SLAM算法。cartographer算法并没有给人惊艳的感觉,但该算法的主要目标是实现低计算资源消耗,达到实时SLAM的目的
引 该算法主要分为两个部分,第一个部分称为Local SLAM, 该部分通过一帧帧的Laser Scan建立并维护一系列的Submap,而所谓的submap就是一系列的Grid Map。当再有新的Laser Scan中会通过Ceres Scan Matching的方法将其插入到子图中的最佳位置。但是submap会产生误差累积的问题,因此,算法的第二个部分,称为Global SLAM的部分,就是通过Loop Closure来进行闭环检测,来消除累积误差:当一个submap构建完成,也就是不会再有新的laser scan插入到该submap时,算法会将该submap加入到闭环检测中。闭环检测的本质也是一个优化问题,该优化问题被表达成了一个pixel-accurate match的形式,解决优化问题的方法是Branch-and-Bound Approach.

2 流程

在这里插入图片描述

3 代码结构

引heimazaifei

在这里插入图片描述

  • mapBuilder:实现整个地图构建,包括前端local slam和后端 global slam。
  • 轨迹(trajectory): 可以理解为一次SLAM 从起点到终点过程中的机器人行走轨迹,建图中可以通过startTrajectory和finishTrajectory控制。在轨迹生成的过程中,完成sensor到sumap的生成,以及pose_graph的构建。TrajectoryBuilder(globalTrajectory类)主要通过sensor_collator(localTrajecory类)和pose_graph构成 。sensor_collator实现局部地图构建,最终结果传递给pose_graph;
  • 节点图(poseGraph):具体参考图优化的知识。简单理解图优化(如果没接触过图优化,下面估计看不懂,后续会详细讲):每个插入的激光和生成sumap,以及landmark(后续讲)都可以理解为图优化的一个节点,建图过程中,生成这些点之间的关系,这些关系便是图中的线,最终优化,就是调整点的位置,得到最优值。可以理解为PoseGraph主要实现全局优化(global slam)功能。
  • 代码流程:最终代码运行通过ROS node 方式实现。node中对应topic和service订阅和发布等功能通过MapBuilderBridge类实现。MapBuilderBridge顾名思义,实现ROS节点代码和cartographer功能代码之间的桥接,也可以理解为对cartographer主体代码的接口封装。cartographer主体代码主要功能通过构建地图MapBuilder类实现。此外,MapBuilderBridge 还包含sensorBridge类,实现传感信息ros格式和cartographer自定义格式之间的转换,这些传感器主要包括scan,imu,odom,tf 等。

3 代码结构

引linyicheng1

在这里插入图片描述

参考

1、Cartographer ROS Integration
2、对比几种在ROS中常用的几种SLAM算法
3、从零开始搭二维激光SLAM(类似高翔博士出的视觉SLAM14讲)
4、Cartographer源码阅读_预准备
5、SLAM- cartographer 简介与使用
6、github–cartographer
7、ROS–Cartographer
8、Cartographer源码阅读1——整体框架介绍
9、W. Hess, D. Kohler, H. Rapp, and D. Andor, Real-Time Loop Closure in 2D LIDAR SLAM, in Robotics and Automation (ICRA), 2016 IEEE International Conference on. IEEE, 2016. pp. 1271–1278.
10、cartographer 代码解读
11、linyicheng1博士