0. 简介
在20年DARPA地下挑战赛中CoSTAR队伍提出了LOCUS这个深度学习模块,在两年后LOCUS2.0出世,LOCUS 2.0包括一种新的基于法线的广义迭代最近点(GICP)公式,该公式减少了点云对齐的计算时间,一种自适应体素网格滤波器,无论环境的几何结构如何,都能保持所需的计算负荷,以及一种滑动窗口建图方法,该方法限制了内存消耗。发布了LOCUS 2.0作为一个开放源代码库,具体在Github中可以找到。与主流的算法相比,表现优异。
1. 主要贡献
激光雷达里程计算法旨在利用扫描匹配来恢复机器人在连续激光雷达获取之间的运动。通过对固定环境特征的重复观测,机器人可以同时估计其运动、构建未知环境的地图并利用该地图跟踪其在其中的位置。虽然许多激光雷达里程计算法可以实现令人瞩目的准确性,但它们的计算成本仍可能对计算受限平台不利,从而减少了它们在异构机器人系统中的适用范围,其中一些机器人的计算资源可能非常有限。此外,许多现有方法为了定位目的而在内存中维护全局地图,使它们不适用于内存中地图大小显著增加的大规模探索。
本文的先前工作[1]介绍了LOCUS 1.0,这是一种多传感器激光雷达中心的高精度里程计和实时三维地图方案,具备一个多阶段的扫描匹配模块,配备了健康感知传感器集成,以松散耦合方案融合其他感知模态。虽然在感知退化环境中实现了令人瞩目的准确性和鲁棒性,但LOCUS 1.0的先前版本:
-
具有更大的计算负载
-
在内存中维护全局地图
-
对更广泛的传感器故障不够鲁棒,例如一个激光雷达传感器出现故障。
LOCUS 2.0提出了算法和系统级改进,以减少计算负载和内存需求,使系统能够在挑战性的感知条件下,在严格的计算和内存约束下,实现大规模探索的准确和实时的自我运动估计。本文的新特点和贡献包括:
- 基于法向量的GICP:一种新的广义迭代最近点(GICP)公式,利用点云法向量来近似点协方差计算,从而提高计算效率
- 自适应体素格滤波器,确保确定性和近似恒定的运行时间,独立于周围环境和激光雷达
- 两种滑动窗口地图存储数据结构的改进和评估:多线程八叉树、ikd树[2]
2. 系统概述
LOCUS 2.0提供了一种准确的基于广义迭代最近点(GICP)算法[17]的多阶段扫描匹配单元和一个健康感知的传感器集成模块,以松耦合的方式鲁棒地融合其他感应方式。如图2所示,该架构包含三个主要组件:i)点云预处理器,ii)扫描匹配单元,iii)传感器集成模块。点云预处理器负责管理多个输入激光雷达流以产生统一的3D数据产品,该产品可以被扫描匹配单元有效地处理。预处理模块包括点云的运动畸变校正(MDC),该模块使用IMU测量校正了由机器人运动引起的扫描期间传感器旋转的点云畸变。
接下来,点云合并器通过将来自机器人框架的不同激光雷达传感器的点云组合起来,扩大了机器人的视野。为了使多个激光雷达数据可靠地合并,我们引入了一个基于超时的健康监视器,动态更新哪些激光雷达应在点云合并器中进行组合(即如果其消息太延迟,则忽略激光雷达)。接下来,滤波器将会删除属于机器人的三维点。并通过自适应体素网格滤波器维护一定数量的体素化点,以管理CPU负载并确保确定性行为。与LOCUS 1.0相比,自适应体素网格滤波器将点云降采样策略从固定栅格叶大小和随机滤波这种盲目的体素化策略改为自适应系统。
扫描匹配单元执行GICP来完成scan-to-scan和scan-to-submap的策略,以估计机器人的6-DOF运动。LOCUS 2.0与其前身相比,不会重新计算协方差,而是利用一种新颖的GICP公式来使用法向量,这些法向量只需要计算一次并存储在地图中。在具有多模态感知的机器人中,如果可用,LOCUS 2.0 使用来自传感器集成模块的非激光雷达源的初始估计,来简化scan-to-scan匹配阶段中GICP的收敛,通过使用近似最优的种子来初始化优化,提高精度并减少计算,增强实时性能。
LOCUS 2.0 还包括一种更有效的地图存储技术。该系统采用滑动窗口方法,因为大规模区域无法在内存中维护。例如,在这里展示的其中一个洞穴数据集中,1厘米分辨率的全局地图需要50 GB的内存,远远超过小型移动机器人上通常可用的内存。这种方法需要高效的计算解决方案来进行插入、删除和搜索。