cartographer源码阅读(1)——算法整体结构

今天尝试阅读cartographer源码这个大魔王,把自己的理解写下来。首先最重要的是cartographer文档里这张图,描述了算法的结构,首先对这张图分析。

cartographer算法结构分析

整个算法分为两大部分:Local SLAM (前端检测),还有Global SLAM (后端闭环)。

这里输入的传感器数据有四个:Range Data(激光雷达,摄像头等),Odometry Pose(里程计数据),IMU Data,FixedFramePose(我理解是确定的位置)。

里程计与数据与IMU数据共同进入PoseExtraPolator,这里做航迹推算,给定一个里程计与IMU得到的位置估计,具体的方法很简单,用两次以上里程计计算平均速度,用两次以上IMU数据计算平均角速度,然后推算出下一时刻的位置姿态,然后给到Scan Matching中作为扫描匹配的初值。

然后Range Data数据经过体素滤波(一种滤波方法)和自适应体素滤波,然后进入scanMatching,作为观测值,这里scanMatching用Real-Time Loop Closure in 2D LIDAR SLAM论文中介绍的基于ceres优化的scanMatching方法获得观测最优位置估计,经过Motion Filter滤波,作为位置最优估计构建submap。这里scanMatching方法比较有趣,匹配部分对每个栅格点的概率进行双三次样条插值平滑,然后构建优化问题如下,后面M那项即概率,概率值为0到1的一个数字,因此M这项越大,1-M就越小,这个优化函数目标是获取一个概率最高的位置。

这里介绍一下Submap的概念,submap字面意思子地图,即真的是cartographer构建的子地图,在Real-Time Loop Closure in 2D LIDAR SLAM论文中为许多帧激光雷达扫描出来的,其地图每个像素点更新公式如下图。cartographer理论认为连续的多帧扫描具有很小的累积误差,因此这样构建submap作为地图的一个小单元,最后cartographer再通过Sparse Pose Adjustment方法进行闭环优化,得到地图。

上面讲完了Local SLAM部分,Local SLAM部分获得了很多Submap,然后这些submap进入Global SLAM部分进行优化,干的事情用下图形容比较形象

猜你喜欢

转载自blog.csdn.net/u013721521/article/details/81477005