而与栅格地图特性相对应的是基于TSDF(Truncated Signed Distance Function)原理生成的栅格地图,TSDF生成的地图最大的特性就是生成的地图边界是可以保证单像素级别的,而基于概率更新的栅格地图的边界往往都会由多个像素“混合”在一起。
▲ TSDF示意图
▲ TSDF定义与栅格生成方法
02
激光SLAM主流方案
2.1 Gmapping
简介:
基于粒子滤波框架的激光SLAM,RBpf粒子滤波算法,即将定位和建图过程分离,先进行定位再进行建图,结合里程计和激光信息,每个粒子都携带一个地图,构建小场景地图所需的计算量较小,精度较高。但在高分辨率建图时,在静止状态下更新不好,存在震荡并noise过多。
Github链接:
https://github.com/ros-perception/openslam_gmapping
https://github.com/ros-perception/slam_gmapping
相关论文:
Giorgio Grisetti, Cyrill Stachniss, and Wolfram Burgard: Improved Techniques for Grid Mapping with Rao-Blackwellized Particle Filters, IEEE Transactions on Robotics, Volume 23, pages 34-46, 2007.
Giorgio Grisetti, Cyrill Stachniss, and Wolfram Burgard: Improving Grid-based SLAM with Rao-Blackwellized Particle Filters by Adaptive Proposals and Selective Resampling, In Proc. of the IEEE International Conference on Robotics and Automation (ICRA), 2005.
2.2 Hector_SLAM
简介:
利用优化方法进行帧间匹配的激光slam算法,search space不大,不需要里程计信息,代码较短。且只处理scan的endpoints(不利用laser scan structure),故而可利用IMU调整laser scan attitude。缺点是在雷达频率不够的设备上效果不佳,快速转向时容易错误匹配;没有loop closure故而若累计误差过大,HectorSLAM没有地图调整能力,且帧间优化匹配时也是全局地图上进行,cpu资源消耗大。
Github链接:
https://github.com/tu-darmstadt-ros-pkg/hector_slam
相关论文:
Kohlbrecher, Stefan , et al. “A flexible and scalable slam system with full 3d motion estimation.” 2011 IEEE International Symposium on Safety, Security, and Rescue Robotics IEEE, 2011.
2.3 Karto
简介:
基于图优化的SLAM,包含回环检测,适用于大面积建图。前端帧匹配采取的的是correlative scan matcher的方式进行粗、精两次匹配, 回环检测上karto没有submap的概念,全部以keyScan的形式存储在Mapper-sensor-Manager中,keyScan的插入依据pose的距离窗口生成localMap进行匹配。local与gloal的loop closure依据graph的结构和Mapper-sensor-Managerss顺序存储分配的ID信息,选择candidates生成localMap进行匹配,依据score进一步确定闭环。
Github链接:
https://github.com/ros-perception/open_karto
https://github.com/ros-perception/slam_karto
相关论文:
Olson, E. B. . “Real-time correlative scan matching.” Robotics and Automation, 2009. ICRA '09. IEEE International Conference on IEEE, 2009.
Konolige, Kurt , et al. “Efficient sparse pose adjustment for 2D mapping.” 2010 IEEE/RSJ International Conference on Intelligent Robots and Systems IEEE, 2010.
2.4 Cartographer
简介:
基于图优化的SLAM,源自谷歌,代码优美,是非常完整的激光slam系统,包含相对鲁棒的前端,基于submap和node约束独立的pose graph后端及各类评测工具。模块化、系统化、工程化程度很高, 封装很完善。可将其视为升级版本的Karto的顶配豪华版本,搭载了传感器同步、位姿外推器、激光数据预处理(去畸变、重复点云删除)功能,前端帧匹配上融合使用了karto的暴力匹配csm和hector的基于LM的梯度优化方法匹配,由于引入了submap的概念,后端回环检测上使用分支定界的方法进行快速搜索,后端优化过程基于SPA完成。同时carto还开放了landmark、GPS等数据融合的接口,提供了地图续扫和定位的功能。
Github链接:
https://github.com/cartographer-project/cartographer
相关论文:
Hess, Wolfgang , et al. “Real-Time Loop Closure in 2D LIDAR SLAM.” 2016 IEEE International Conference on Robotics and Automation (ICRA) IEEE, 2016.
2.5 LOAM方案
简介:
经典制作,长期霸榜kitti odometry门类第一,也衍生很多相关SLAM算法,如A-LOAM、LeGO-LOAM等。其主要思想是通过两个算法:一个高频激光里程计进行低精度的运动估计,即使用激光雷达做里程计计算两次扫描之间的位姿变换;另一个是执行低频但是高精度的建图与校正里程计,利用多次扫描的结果构建地图,细化位姿轨迹。在点云匹配与特征提取时,由于scan-to-scan匹配精度低但速度快, map-to-map匹配精度高但是速度慢,创新性使用scan-to-map来兼具精度与速度,这种思路给后续很多基于激光里程计或多传感器融合框架提供思路。原本的LOAM没有IMU辅助,不带有回环检测,因而不可避免引起漂移。沿着此思路,产生了很多算法如LeGO-LOAM, LINS, LIO-Mapping, LIO-SAM等。
Github链接:
LOAM中文注解版:
https://github.com/cuitaixiang/LOAM_NOTED
相关论文:
Ji Zhang and Sanjiv Singh. “LOAM: Lidar Odometry and Mapping in Real-time.” Proceedings of Robotics: Science and Systems Conference, 2014.
2.6 LeGo-LOAM方案
简介:
在LOAM的基础上细化了特征提取与优化,带有回环功能。可以在低功耗嵌入式系统上实现实时姿态估计。主要也是由一个高频低精度激光里程计与一个低频高精度建图回环检测组成。区别在于LeGO-LOAM在LOAM基础上采用地面分割方式将点云分为地面点与非地面点,进一步缩小特征提取范围,以加快计算速度,能够在嵌入式设备上实时运行;在建图模块添加了位姿图与回环检测,解决了LOAM没有后端优化的弊端,提供建图效率,其效果对比如下图。
Github链接:
LeGo-LOAM中文注解版:
https://github.com/wykxwyc/LeGO-LOAM_NOTED/tree/master/src
相关论文:
T. Shan and B. Englot, “LeGO-LOAM: Lightweight and Groundoptimized Lidar Odometry and Mapping on Variable Terrain,”IEEE/RSJ International Conference on Intelligent Robots and Systems,pp. 4758-4765, 2018.
2.7 LIO-SAM方案
简介:
这是LeGO-LOAM作者新作,通过平滑和匹配的紧密耦合激光雷达惯性SLAM框架。LIO-SAM在因子图(factor graph)上方制定了激光雷达惯性里程表,从而可以将不同来源的大量相对和绝对测量值(包括回路闭合)作为因子合并到系统中,通过惯性测量单元(IMU)预积分的估计运动使点云偏斜,并为激光雷达里程计优化提供了初始预测。为了确保实时高性能,将之前的激光雷达扫描边缘化以进行姿势优化,而不是将激光雷达扫描与全局地图匹配。选择性地引入关键帧以及以有效的滑动窗口将新的关键帧注册到固定大小的先验“子关键帧”集合中,在局部范围而不是全局范围内进行扫描匹配。
算法可以添加不同的模块,组合不同的方案。当同时禁用GPS和闭环检测时,此方法称为LIO-odom,它仅利用IMU预积分和激光雷达里程计因子;当添加GPS因子时,则将此方法称为LIO-GPS;若使用IMU、激光雷达里程计、GPS、回环检测时则称之为LIO-SAM方法。
Github链接:
https://github.com/TixiaoShan/LIO-SAM
相关论文:
T. Shan and B. Englot, “LIO-SAM: Tightly-coupled Lidar Inertial Odometry via Smoothing and Mapping,”IEEE/RSJ International Conference on Intelligent Robots and Systems”,2020.
性能介绍:
在论文作者录制的数据集上,对比了LOAM、LIOM与自身几种组合方案的建图效果如下左图所示,也比较了几种算法在平移误差及处理单帧数据时所耗时间如右图所示,由此可见LIO-SAM处理速度较LOAM提高很多,精度上也有一定提高。
2.8 hdl_graph_slam方案
简介:
这是一个基于图优化的3D激光SLAM框架,主要由激光里程计、回环检测以及后端图优化构成,同时融合了IMU、GPS以及地面检测的信息作为图的额外约束。算法首先读入激光雷达的点云数据,然后将原始的点云数据进行预滤波,经过滤波后的数据分别给到点云匹配里程计以及地面检测节点,两个节点分别计算连续两帧的相对运动和检测到的地面的参数,并将这两种消息送到hdl_graph_slam节点进行位姿图(pose graph)的更新以及回环检测,并发布地图的点云数据。hdl_graph_slam在资源消耗、代码复杂度等方面具有优势,且带有定位模块,右图显示了带GPS的室外建图结果。
Github链接:
https://github.com/koide3/hdl_graph_slam
相关论文:
Kenji Koide, Jun Miura, and Emanuele Menegatti, “A Portable 3D LIDAR-based System for Long-term and Wide-area People Behavior Measurement”, Advanced Robotic Systems, 2019
2.9 SegMap方案
原理介绍:
这是一种基于3D点云中线段提取的方式去建图与定位的解决方案。将三维点云进行分割,把不同的环境目标划分为不同的段(segment),从而提出了一种新的地图表达方法:Segmap。相比于现有仅用来做定位的特征提取器,Segmap利用了数据驱动(深度学习)的描述子提取了语义特征信息。在语义信息层进行数据处理大大减小了计算量,较小维度的语义特征描述子解决了单机器人与多机器人系统的实时数据压缩问题。这种利用CNN语义信息的3D激光SLAM框架,在多机器人全局路径规划场景时比传统SLAM更具有优势。
Github链接:
https://github.com/ethz-asl/segmap
相关论文:
R. Dubé, A. Cramariuc, D. Dugas, J. Nieto, R. Siegwart, and C. Cadena. “SegMap: 3D Segment Mapping using Data-Driven Descriptors.” Robotics: Science and Systems (RSS), 2018.
R. Dubé, MG. Gollub, H. Sommer, I. Gilitschenski, R. Siegwart, C. Cadena and , J. Nieto. “Incremental Segment-Based Localization in 3D Point Clouds.” IEEE Robotics and Automation Letters, 2018.
R. Dubé, D. Dugas, E. Stumm, J. Nieto, R. Siegwart, and C. Cadena. “SegMatch: Segment Based Place Recognition in 3D Point Clouds.” IEEE International Conference on Robotics and Automation, 2017.
2.10 SuMa方案
原理介绍:
此算法使用Surfel地图去实现前端里程计和闭环检测,此前Surfel地图曾被用在RGBD-SLAM中,第一次被用在在室外大场景三维SLAM中。Surfel地图最早是用在基于RGB-D相机的三维重建任务中的。SuMa的整体流程就是先处理点云把点云从三维展开成二维,然后生成局部地图用来给当前帧做匹配,接着通过ICP方法进行位姿更新,然后更新surfel地图,最后做闭环检测与后端优化。
Github链接:
https://github.com/jbehley/SuMa
相关论文:
J. Behley, C. Stachniss. Efficient Surfel-Based SLAM using 3D Laser Range Data in Urban Environments, Proc. of Robotics: Science and Systems (RSS), 2018.
以视觉传感器作为主要感知方式的SLAM称为视觉SLAM 。按照建图稀疏程度来分,视觉SLAM技术可以分为稀疏SLAM、半稠密SLAM和稠密SLAM。虽然同为SLAM系统,但它们的侧重点并不完全一样。
SLAM 系统最初的设想是为机器人提供在未知环境中探索时的定位和导航能力,其核心在于实时定位。以定位为目的,需要建立周围环境的路标点地图,进而确定机器人相对路标点的位置,这里的路标点地图即稀疏地图,地图服务于定位。
但随着算法和算力的进步,SLAM逐渐被用于对环境的重建,也即把所有看到的部分都完整的重建出来,此时,SLAM所建立的地图必须是稠密的,而SLAM系统的首要任务也从定位转变为了建立环境的精确稠密地图。这种首要任务的差异最终会反映在SLAM系统的技术方案上,稠密SLAM系统对精度的评价也从“定位精度”转变为“建图精度”。此外,相比于稀疏SLAM系统,稠密SLAM的建图部分要消耗大得多的算力,通常都需要GPU加速来达到实时性。
3.1 LSD-SLAM 方案
LSD-SLAM 即 Large-Scale Direct SLAM,兼容单目相机和双目相机。LSD-SLAM是一种基于光流跟踪的直接法SLAM,但是实现了半稠密建图,建图规模大,可以在线实时运行。作者有创见地提出了像素梯度与直接法的关系,并利用这种关系实现了简单直接法所无法实现的半稠密重建。作为一种基于关键帧的SLAM系统,LSD-SLAM的主要处理流程为: