cartographer开发大法

cartographer开发大法

前言

最新项目需要,对cartographer做一个开发/学习手册。简单记录一下对cartographer代码的开发和应用,供实验室参考。

传送门:

官网

Github

参考博客

cartographer架构

Google推出的一套图计算算法,集成有2D和3D的SLAM感知,但是其思想就是奔着产品落地来的,实现了低计算资源消耗,很适合在嵌入式的系统上进行集成。也因此作为本项目的baseline,(落地优先)。

整理流程是采用了一个grid的思想对建图进行切分(大地图维护切分成很多个小子图来分别建图和维护),至于回环检测和全局一致性等等还是正常的BA问题。

直接从官方图片入手解读:

输入层: Lidar的范围信息;里程计和位姿;IMU;修正的帧位姿。

局部处理部分——前端:处理传感信息,建立局部子图

SLAM第一个需要位姿——来自里程计或者IMU提供先验。

对于Lidar预处理是基本的(自适应)体素滤波等操作,然后输出到匹配。匹配子图也是正常的需要一个当前的位姿信息。

submaps就基本上约等于打游戏开小地图,每次只维护周围的那一片(城邦),整体城邦可以拼接成一个国家地图;插入时,同时插入两个活跃的 submaps。每个时刻两个 submap 是活跃的,当前 submap 和上一个 submap。

局部SLAM的运动滤波器就类似视觉里程计里面的关键帧,取运动一段时间的关键帧来生成和维护地图。

后端:全局优化

前端生成了interaction data,就包含了当前的子图信息;插入到当前的整体的位姿图,利用约束关系(constraints),并根据参数,options_.optimize_every_n_nodes()决定什么时候运行一次全局优化.

对于这两个部分,由于整体的工程化其实已经相当的完善,我们重点开发的地方其实是对submap信息的处理和维护。

代码解析与开发(Ing)