鉴于移动机器人三维激光SLAM技术的先进性,探讨激光雷达测距与建图算法,以及其两种改进算法:轻量级及地面优化激光雷达测距与建图(LeGO_LOAM)和LOAM的高级实现算法(A_LOAM),尤其对其低漂移、强实时的特性展开深入研究。通过设计对比实验,对不同SLAM算法的优劣进行分析。搭建移动平台,在实际大尺度室外场景和公开数据集KITTI下,从相对位姿估计误差入手完成对比实验。实验结果证明改进算法相比于LOAM可以达到更小的相对位姿估计误差。
摘要
鉴于移动机器人三维激光SLAM技术的先进性,探讨激光雷达测距与建图算法,以及其两种改进算法:轻量级及地面优化激光雷达测距与建图(LeGO_LOAM)和LOAM的高级实现算法(A_LOAM),尤其对其低漂移、强实时的特性展开深入研究。通过设计对比实验,对不同SLAM算法的优劣进行分析。搭建移动平台,在实际大尺度室外场景和公开数据集KITTI下,从相对位姿估计误差入手完成对比实验。实验结果证明改进算法相比于LOAM可以达到更小的相对位姿估计误差。
1 引 言
移动机器人(Mobile Robot)相对于固定工作的臂式机器人具有更大的工作范围,是当今机器人研究的热点。同时定位与地图构建(Simultaneous Localization and Mapping, SLAM)技术是移动机器人实现自主移动与定位的关键,得到广泛的研究与应用[1]。与视觉传感器相比,激光雷达可提供更加稳定和准确的信息,不受外部干扰,因此能够为 SLAM 提供一个更为可靠的解决方案。在过去 20 年里基于激光雷达的 SLAM 一直是移动机器人导航研究的基础。随着现代激光 SLAM 技术的发展,三维激光 SLAM成为目前最先进的移动机器人 SLAM 技术之一。主流的三维激光 SLAM 算法有:基于关键点的 LOAM及其改进算法 LeGO_LOAM 和 A_LOAM、LIO;基于数据驱动的 SegMatch 及改其改进算法 SegMap;基于扫描点的 BLAM、IMLS-SLAM、ICP-LO;基于图优化的 Karto SLAM 和 Cartographer 等[2]。张吉等人提出一个低漂移实时激光雷达测距建图算法[3-4](LidarOdometry and Mapping, LOAM),在公开数据集 KITTI(Karlsruhe Institute of Technology and Toyota Technological Institute)里程计数据集上仅使用激光雷达来估计移动机器人位姿的精度最高的算法[5],但 LOAM没有闭环检测功能,导致了漂移误差会随时间增加。铁小山等人提出一种轻量级和地面优化的激光雷达测距和建图算法[6](Lightweight and Ground-OptimizedLidar Odometry and Mapping,LeGO_LOAM),相比于LOAM,在减少计算量的情况下实现了相似或更好的精度及建图工作,其在线执行闭环检测的能力使其成为长时间导航任务的有用工具,但它的闭环检测有时会出现错误或识别遗漏。秦通等人提出了 LOAM的高级实现(Advanced implementation of LOAM, A_LOAM),用 Eigen 和 Ceres Solver 来简化代码结构[7],相比于 LOAM,代码更为简洁,无需复杂的数学推导和冗余操作。R. Dubé 等人提出了在三维点云中基于分割匹配的位置识别算法[8](Segment based loopclosure for 3D pointclouds, SegMatch),它可以用在室内和室外环境,然而算法依赖于初始位姿,没有全球定位系统传感器就无法工作。随后 R.Dubé 等人又提出了 SegMatch 的改进算法:使用数据驱动描述子进行 3D 片段建图算法[9](3D Segment Mapping usingData-Driven Descriptors, SegMap),该算法引入一种新颖的数据驱动的片段描述符,提取的语义信息可以提高对环境变化的鲁棒性,但基于分割匹配的三维激光 SLAM 算法 SegMatch 及其改进算法 SegMap产生的漂移随着时间推移累计成显著漂移。Google在 ICRA 会议上公布了 Cartographer 开源项目[10],在工程实现上构建了一套完整的室内雷达 SLAM 系统而非简单的算法,其技术框架完整,建图效率很高。文献[11]提出了一种新的基于三维激光雷达数据的SLAM 系统,使用隐式移动最小二乘(IMLS)表面来表示模型,提高了系统鲁棒性。Behley 和 Stachniss提出了一种基于面元的运动估计建图方法 SuMa[12],该方法允许表示大规模环境并且维护点云的详细几何信息,但是稀疏点云对其是一个挑战。廖瑞杰等人提出了以边匹配为主要依据的基于 K-公共子图判定的室外场景三维点云闭环检测算法并命名为SegGraph[13],采用公开数据集 KITTI 进行评估,实验结果显示该算法具有良好的准确度和运行效率。除了上述几种传统 SLAM 方法外,研究人员们还研究了使用深度学习的里程估算方法[14-15],但尚未达到同等水平。
针对上述研究现状及存在的问题,鉴于 LOAM及其改进算法 LeGO_LOAM 和 A_LOAM 是非常低漂移、实时的激光雷达测距方法,以下详细讨论分析新松大尺度室外环境和公开数据集 KITTI 下这三种算法的工作原理和相对位姿估计误差。
2 三维激光 SLAM 算法
2.1 LOAM 算法原理
LOAM 是一种使用 3D 激光雷达进行状态估计和建图的实时、低漂移的激光雷达测距方法。其关键思想是将复杂的 SLAM 问题划分为高频的运动估计和低频的环境建图,利用测程算法和建图算法的协作寻求同时优化大量变量,实现实时精确的运动估计和建图。其中测程算法以高频率但低保真度(低精度)进行里程测量以估计激光雷达的速度,消除了激光雷达运动引起的点云失真,通过保证快速计算来找到特征点的对应关系。建图算法利用未失真的点云以低一个数量级的频率但高保真度(高精度)运行用于点云的精确匹配和配准。将两个估计融合在一起即可产生高频率和高精度的单个运动估计。一方面,两种算法的组合允许实现实时建图,并行算法结构保证了实时求解问题的可行性,能够实现低漂移和低计算复杂度且无需高精度测距或惯性测量;另一方面,算法的基于特征的激光扫描数据匹配方法对边缘/平面执行点-特征扫描匹配,以此找到扫描之间的对应关系。相比于基于散点的传统方法,此法定位精度更高,易于扩展到大场景。LOAM 主要有四个模块组成:扫描匹配、激光雷达测程算法、激光雷达建图算法和变换融合。其软件系统如图 1 所示。
图 1 LOAM 软件系统结构图
首先令P为激光雷达一次扫描接收到的点,每次扫描期间,P在激光雷达坐标系中配准,在扫描 K期间,配准后的点云形成 PK。用两种算法处理 PK。激光雷达测程算法获取点云并计算两次连续扫描之间的激光雷达运动。估计的运动用于校正 PK 的失真。该算法以大约 10Hz 的频率运行。输出通过激光雷达建图算法进一步处理,算法以 1Hz 的频率将未失真的点云配准到地图上。最后将两种算法发布的位姿变换集成在一起,以产生相对于地图上的激光雷达位姿大约 10Hz 的变换输出。
2.2 LeGO_LOAM 算法原理
LeGO_LOAM 是一种轻量级和地面优化的激光雷达测距和建图方法,适用于具有可变地形的复杂环境,对移动机器人进行位姿估计,并实时估计地面车辆的六自由度位姿。与原始广义的 LOAM 框架相比,LeGO_LOAM 旨在提高地面车辆的效率和准确性。算法主要由五个模块组成:分割、特征提取、激光雷达测距算法、激光雷达建图算法和变换融合。其软件系统和激光雷达测程算法框架分别如图2和图3所示。