LeGO-LOAM

一、介绍

LeGO-LOAM: Lightweight and Ground-Optimized Lidar Odometry and Mapping on Variable Terrain

2018 IEEE/RSJ International Conference on Intelligent Robots and Systems (IROS)

论文:该工作由Shan Tixiao完成,论文LeGO-LOAM: Lightweight and Ground-Optimized LiDAR Odometry and Mapping on Variance Terrain发表于2018年IROS会议,

代码:代码源生于LOAM的原始版本,开源于RobustFieldAutonomyLab/LeGO-LOAM,优化版本的代码见facontidavide/LeGO-LOAM-BOR

1
2
3
T. Shan and B. Englot, “Lego-loam: Lightweight and groundoptimized lidar odometry and mapping on variable terrain,” in 2018
IEEE/RSJ International Conference on Intelligent Robots and Systems
(IROS), 2018, pp. 4758–4765.

本文介绍的LeGO-LOAM是针对LOAM计算效率问题的优化,针对地面移动机器人在室内外环境下运行时的特点,针对性的对LOAM进行优化和改进,实现了一套轻量级的激光雷达SLAM系统。

LeGO-LOAM 不仅整合了 LOAM 的系统结构,同时对 LOAM 中的特征提取、位姿估计计算都进行了优化改进,此外还加入了回环检测和全局优化,将 LOAM 这一LO系统构建为完整的SLAM系统,整体工作的创新性和完整性都更加突出。

二、总结

主要工作

在 LOAM 基础上,提出了一种轻量级的基于地面优化的激光雷达里程计和建图方法 LeGO-LOAM ,用于在复杂环境中对 UGV 进行实时位姿估计。

LeGO-LOAM 为应对可变地面进行了地面优化,同时保证了轻量级。LeGO-LOAM是专门为地面车辆设计的SLAM算法,要求在安装的时候Lidar能以水平方式安装在车辆上;如果是倾斜安装的话,也要进行位姿转换到车辆上。而LOAM对Lidar的安装方式没有要求,即使手持都没有关系。作者的实验平台是一个移动小车(UGA),挂载了一个Velodyne VLP-16 线激光雷达,还配有一个低精度的 IMU;选用的硬件平台是 Nvidia Jetson TX2(ARM Cortex-A57 CPU);整体负载是 20Kg;移动速度为:2.0m/s;测试场景为:地面不平(比较颠簸)的草地

核心要点

  1. 通过分离地面点云,点云聚类分割,过滤掉不可靠的无价值特征点,减少特征点的数量。
  2. 使用两步L-M优化方法,分别计算位姿变换的不同分量,在优化估计精度保持不变的情况下极大提升收敛速度。
  3. 集成了回环检测的功能,以纠正运动估计漂移。

创新点

  1. 进行了地面优化,过滤掉不可靠的无价值特征点(草地、树叶),减少特征点的数量
  2. 点云进行聚类,打上了标签,减少匹配量,提高配准精度
  3. 两步L-M优化方法,分别计算位姿变换的不同分量,在优化估计精度保持不变的情况下极大提升收敛速度。

实验结果

与LOAM算法相比,LeGO-LOAM可以达到相似或更高的精度,同时计算时间也大幅减少。

相较于LOAM的改进:

前端:

  1. 对地面点进行分类和提取,避免一些边缘点的提取
  2. 用了一个简单的点云聚类算法,剔除了一些可能的outlier

后端:

  1. 使用SLAM关键帧的概念对后端部分进行了重构
  2. 引入回环检测和位姿图优化概念,使得地图的全局一致性更好

根据论文内容和代码,这一工作的主要创新点归纳为以下几点:

  • 相较于LOAM的第一个改进:增加基于柱面投影特征分割,对原始点云进行地面点分割和目标聚类。
  • 相较于LOAM的第二个改进:基于分割点云的线面特征提取,从地面点和目标聚类点云中提取线、面特征,特征点更精确。
  • 相较于LOAM的第三个改进:采用两步法实现laserOdometry线程的位姿优化计算,在优化估计精度保持不变的情况下收敛速度极大提升。
  • 相较于LOAM的第四个改进:采用关键帧进行局部地图和全局地图的管理,邻近点云的索引更为便捷。
  • 相较于LOAM的第五个改进:增加基于距离的闭环检测和全局优化,构成完整的激光SLAM解决方案。

三、论文精读

Abstract

我们提出了一种轻型的、基于地面优化的激光雷达里程计与建图的方法 LeGO-LOAM,用于地面车辆的实时六自由度姿态估计。LeGO-LOAM 是轻量的,可以在低功耗嵌入式系统上实现实时姿态估计。LeGO-LOAM 是基于地面优化的,它在分割和优化步骤中利用了地面。我们首先应用点云分割来滤除噪声,然后进行特征提取以获得独特的平面和边缘特征。然后采用两步 Levenberg-Marquardt 优化方法,利用平面和边缘特征来求解连续扫描中六自由度变换的不同分量。我们使用车辆在不同地形环境中收集的数据集,将 LeGO-LOAM 的性能与 LOAM 进行了比较,结果表明,LeGO-LOAM 在降低计算开支的情况下达到了与 LOAM 类似或更好的精度。我们还将 LeGO-LOAM 集成到 SLAM 框架中,以消除漂移引起的姿态估计误差,并使用 KITTI 数据集进行了测试。

专为水平安装的Lidar设计的一个算法

I. INTRODUCTION

1.1 视觉SLAM和激光SLAM的对比

视觉SLAM在回环检测方面具有优势,但相机对于光亮和视角的变化太敏感,从而导致其不太可靠。

激光SLAM即使在夜间也能发挥作用,许多高分辨率的3D激光雷达可以获取大范围环境中的细节。

指明本文主要研究利用三维激光雷达来实现SLAM。

1.2 介绍现有的一些工作

寻找两帧激光点云之间位姿变换的典型方法是迭代最近邻点(ICP)。

通过逐点查找对应关系,ICP迭代对齐两组点,直到满足停止条件为止。

当扫描包含大量的点时,ICP可能会承受高昂的计算成本。

为了提高ICP的效率和准确性,已经提出了许多ICP变体:点到面、面到面、或者利用并行计算来提高效率。

基于特征的匹配方法通过从环境中提取具有代表性的特征来减少计算资源。

例如:点特征直方图(PFH)、视点特征直方图(VFH)、使用Kanade-Tomasi角点检测器从点云中提取通用特征、从密集点云中提取直线和平面特征的方法。

介绍了一些使用特征进行点云配准的算法。

介绍一种低漂移实时激光雷达里程计和建图(LOAM)方法。

1.3 目前面临的一些问题

由于尺寸有限,许多小型无人地面车辆(UGV)没有悬架和强大的计算单元。从3D激光雷达接收到的大量点对使用有限的车载计算资源进行实时处理提出了挑战。

小型无人地面车辆(UGV)在多变的地形上行驶时,经常会遇到非平稳运动(运动是颠簸的),采集的数据往往会失真(运动畸变,匀速运动模型无法适用于颠簸场景),使用LOAM很难在两帧之间找到可靠的特征对应。

由于在较大的运动下只有有限的重叠区域,在两次连续扫描之间也很难找到可靠的特征对应关系。

1.4 LOAM的一些局限性

LOAM在无人车以平滑运动和稳定特性运行,并且有足够的计算资源支持时,可以获得低漂移运动估计。

当资源受限时,LOAM的性能会降低,因为需要计算密集三维点云中每个点的平滑度(roughness),轻量级嵌入式系统上特征提取的更新频率不能始终跟上传感器的更新频率。

无人车在噪声环境中运行也会使LOAM的效果变差。由于在小型无人地面车辆(UGV)上,激光雷达的安装位置通常接近地面,因此来自地面的传感器噪声可能持续存在。例如:浮动的草丛和摆动的树叶的点云将被误提取为边缘特征点或平面特征点,这些特征是不可靠的,难以在连续帧之间获取准确的匹配,从而会造成较大的漂移。

引出本文工作:致力于为安装了3D激光雷达的地面车辆提供可靠、实时的六自由度姿态估计,其方式在小型嵌入式系统上可以实现高效运转。

1.5 本文提出的方法

LeGO-LOAM 提出了一种轻量化,面向地面优化(利用了地平面信息)的LOAM(LeGO-LOAM),用于复杂地形环境中对无人车的姿态估计。

LeGO-LOAM 是轻量级的,可以在嵌入式系统上实现实时姿态估计和建图。

首先,对采集到的点云进行聚类分割,分离出地面点云(地面点代表了绝大部分不稳定的特征点),然后丢弃掉那些可能代表不可靠特征的点,并滤出异常点。

LeGO-LOAM 为位姿估计提出了两步L-M优化的方法:在第一步中,使用从地面提取的平面特征来获得 [tzθrollθpitch][t_z,θ_{roll},θ_{pitch}] (利用前后帧匹配的地面点)。在第二步中,通过匹配分割点云后提取的边缘特征来获得变换的其余部分 [txtyθyaw][t_x,t_y,θ_{yaw}]

此外还集成了回环检测的功能,以纠正运动估计漂移。

1.6 本文组织结构

第二节介绍了用于实验的硬件。

第三节详细介绍了提出的方法。

第四节介绍了在各种室外环境下进行的一系列实验。

II. SYSTEM HARDWARE

2.1 介绍所用的3D激光雷达

Velodyne VLP-16测量范围高达 100 m100\mathrm{~m},精度为 ±3 cm±3\mathrm{~cm} 。它的垂直视野(FOV)为 3030^{\circ}±15±15^{\circ},上下15度),水平视野为 360360^{\circ} 。16线传感器提供 22^{\circ} 的垂直角度分辨率。根据旋转速率,水平角度分辨率从 0.10.1^{\circ}0.40.4^{\circ} 不等。

在本文中,选择了 10 Hz10\mathrm{~Hz} 的扫描速率,它提供了 0.20.2^{\circ} 的水平角度分辨率。

HDL-64E(在本研究中通过KITTI数据集进行了探索)的水平FOV也为 360360^{\circ} ,但还有48个通道。HDL-64E的垂直视野为 26.926.9^{\circ}

2.2 介绍所用的无人车

本文使用的UGV是Clearpath Jackal。由270瓦时锂电池供电,最大速度为 2.0 m/s2.0\mathrm{~m}/\mathrm{s} ,最大有效载荷为 20 kg20\mathrm{~kg} 。Jackal还配备了一个低成本的惯性测量单元(IMU),即CH Robotics UM6方位传感器。

2.3 介绍实验平台

该框架在两台计算机上进行了验证:一台Nvidia Jetson TX2和一台配备 2.5GHz2.5\mathrm{GHz} i74710MQ CPU的笔记本电脑。Jetson TX2是一款嵌入式计算设备,配备ARM Cortex-A57 CPU。

Jackal UGV

III. LIGHTWEIGHT LIDAR ODOMETRY AND MAPPING

A. System Overview

该系统接收来自3D激光雷达的输入,并输出6个自由度的姿态估计。

整个系统分为五个模块:

  1. Segmentation模块:将单个扫描的点云投影到范围图像(range image)上进行分割。分离出地面点云,同时对剩下的点云进行聚类,并滤除掉数量较少的点云簇。
  2. Feature Extraction模块:对分割后的点云(已经分离出地面点云)进行特征提取。
  3. Lidar Odometry模块:根据提取到的特征,在连续帧之间进行边缘点和面点的特征匹配来找到相邻两帧之间的位姿变换矩阵。
  4. Lidar Mapping模块:进一步处理提取到的特征,并将它们在全局点云地图中进行配准。
  5. Transform Integration模块:融合Lidar Odometry和Lidar Mapping模块的姿态估计结果,并输出最终的姿态估计。
System overview

B. Segmentation

range image

Pt={p1p2pn}P_{t}=\left\{p_{1},p_{2},\ldots,p_{n}\right\} 为在时间 tt 扫描获得的点云,其中$ p_{i}$ 是 PtP_{t} 中的一个点。把 PtP_{t} 首先投影到距离图像(range image)上。

因为VLP-16的水平和垂直角度分辨率分别为 0.20.2^{\circ}22^{\circ} ,故投影距离图像的分辨率为 1800个点 × 16条线 。

PtP_{t} 中的每个有效点 pip_{i} 在距离图像中用唯一一个像素表示。

pip_{i} 关联的距离值 rir_{i} 表示从对应点 pip_{i} 到传感器的欧氏距离。

range image

如图所示,假设该表格就是一个range image,机械式激光雷达一帧点云数据每一个点都可以在range image中找到与之对应的小方格,且这个小方格所代表的值为该点距离激光雷达的距离。

由于斜坡地形在许多环境中都很常见,因此我们不认为地面是水平面。

提取地面点

在分割之前,对距离图像进行列式评估(column-wise evaluation),可视为地平面估计,以提取地面点(参考论文Fast Segmentation of 3D Point Clouds for Ground Vehicles,2010)。

由于由于激光雷达水平分辨率为16即16线激光雷达,所以,通过判断其竖直维度的特性,可以很好的标记出地面点和非地面点。通过VLP-16的激光扫描束的范围为[-15, 15]度 ,地面点必然出现在 [-15, 1]度扫描线上。

这个是一个常识,因为激光束如果相对水平面向上了,永远也不可能照射到水平地面;但是这里并不假设地面都为水平的,所以选择[-15,1]度之间的激光束作为地面点。

在此过程之后,可能代表地面的点被标记为地面点,不用于后续分割(分类)。

不同类点云的分割(除地面点)

然后,应用基于图像的分割方法(参考论文Fast Range Image-based Segmentation of Sparse 3D Laser Scans for Online Operation, 2016),将距离图像中的点分为多个组(进行聚类),每个组都指定了唯一的标签(地面点是一种特殊的组)。

基于图像的分割方法,这里可以理解为广度优先搜索方法bfs。

对点云进行分割聚类后再进行处理可以提高处理效率和特征提取的精度。

为了使用分割的点云进行快速可靠的特征提取,忽略少于30个点的组。

分割前后的点云可视化如下图所示,即噪声环境中扫描的一帧点云进行特征提取的过程。

原始点云如(a)所示,其中许多点是从周围可能产生不可靠特征的植被中获取的。

假设机器人在含有噪声的环境中工作,小物体(例如草地和树叶)可能会形成琐碎和不可靠的特征,因为在两次连续扫描中不太可能看到相同的草叶或树叶。使用这些特征可能会导致不准确的对齐和较大的漂移。

在(b)中,红色点标记为地面点,其余的点是分割后保留的点。

在(c)中,蓝色点表示 FeF_{e} 中的明显边缘特征,黄色点表示 FpF_{p} 中的明显平面特征。

在(d)中,绿色点表示 Fe\mathbb{F}_{e} 中的非明显边缘特征,粉色点表示 Fp\mathbb{F}_{p} 中的非明显平面特征。

Feature extraction process for a scan in noisy environment

图3:噪声环境中一帧的特征提取过程

点云分割后,距离图像中仅保留可能代表大型对象(例如树干)的点(图2(b))和地面点,以供进一步处理。

保存的信息

对于这些保存下来的点,获得了其中每个点的三个属性(这些属性将在以下模块中使用):

  1. 该点作为地面点或分割点的标签。
  2. 该点在距离图像中的行列索引。
  3. 该点的距离值。

C. Feature Extraction

特征提取过程类似于LOAM中使用的方法,但不是从原始点云中提取特征,而是从地面点和分割后的点中提取特征。

SS 为距离图像中与 pip_{i} 同一行的连续点集合, SS 中的一半点位于 pip_{i} 的两侧。本文将 S| S | 设置为10。

使用分割期间计算的距离值,来估计在 SS 中的点 pip_{i} 的平滑度(roughness),公式如下:

c=1SrijS,ji(rjri)c=\frac{1}{\left| S \right| \cdot \left\| r_i \right\|} \left\| \sum_{j\in S, j\ne i}{\left( r_j-r_i \right)} \right\|

为了从各个方向均匀地提取特征,将距离图像水平地分割为几个相等的子图像(sub-images)。

根据roughness值 cc 对子图像中每行的点进行排序。与LOAM类似,使用阈值 cthc_{th} 来区分不同类型的特征。将 cc 大于 cthc_{th} 的点称为边特征点,将 cc 小于 cthc_{th} 的点称为面特征点。

从子图像的每一行中,选择非地面点中具有最大 cc 值的点 nFen_{ \mathbb{F}_{e} } 作为边缘特征点。选择地面点或其他分割点中具有最小 cc 值的点 nFpn_{ \mathbb{F}_{p} } 作为平面特征点。最终获得所有子图像的非明显的边缘特征集合 Fe\mathbb{F}_{e} 和平面特征集合 Fp\mathbb{F}_{p} ,这些特征如图2(d)所示。

从子图像的每一行中,选择非地面点中具有最大 cc 值的点 nFen_{ {F}_{e} } 作为边缘特征点。选择地面点中具有最小 cc 值的点 nFpn_{ {F}_{p} } 作为平面特征点。最终获得所有子图像的明显的边缘特征集合 Fe{F}_{e} 和平面特征集合 Fp{F}_{p} ,这些特征如图2(c)所示。

注意:上面两个特征提取过程在平面特征点的选取上有所不同,显然 FeFeF_e \subset \mathbb{F}_eFpFpF_p \subset \mathbb{F}_p

在本文中,将 360360^{\circ} 的距离图像分为6个子图像。每个子图像的分辨率为 300个点 × 16条线(1800/6 = 300)。

将明显的边缘特征点和平面特征点的数量设置如下: nFe=2n_{ {F}_{e} } = 2nFp=4n_{ {F}_{p} } = 4nFe=40n_{ \mathbb{F}_{e} } = 40nFp=80n_{ \mathbb{F}_{p} } = 80

D. Lidar Odometry

激光雷达里程计模块会从上一帧的特征集 Fet1\mathbb{F}_{e}^{t-1}Fpt1\mathbb{F}_{p}^{t-1} 中找到当前帧的特征集 FetF_{e}^{t}FptF_{p}^{t} 中点的对应特征。通过点到边和点到面的帧间匹配,估计相邻两帧之间的传感器运动。具体过程可以参照LOAM。

本文对LOAM中的处理过程进行了一些改变,以提高特征匹配的准确度和效率:

(1)基于标签的匹配

由于当前帧的特征集 FetF_{e}^{t}FptF_{p}^{t} 中的每个特征点在聚类分组后都拥有了标签,因此只能从上一帧的特征集 Fet1\mathbb{F}_{e}^{t-1}Fpt1\mathbb{F}_{p}^{t-1} 中找到具有相同标签的点的对应关系。

对于 FptF_{p}^{t} 中的平面特征点,仅使用在 Fpt1\mathbb{F}_{p}^{t-1} 中标记为地面点的点来查找planar patch作为对应关系。对于 FetF_{e}^{t} 中的一个边缘特征,仅使用分组后的 Fet1\mathbb{F}_{e}^{t-1} 中查找edge line作为对应关系。

Label 信息可以作为两帧匹配的约束条件,连续两帧之间只有同类标签点云簇才能进行配准。这种方式可以提高配准的精度和效率。换句话说,对于同一对象匹配的对应关系更有可能在两次扫描之间被发现,同时这一过程也缩小了潜在的对应候选点的范围。

(2)两步L-M优化

在LOAM中,将当前扫描的边缘和平面特征点之间的距离及其与前一次扫描的对应关系之间的一系列非线性表达式编译成一个综合距离向量。采用Levenberg-Marquardt(L-M)方法来求出相邻两帧之间的最小位姿变换。

本文介绍了一种两步L-M优化方法。通过两个步骤来计算最优位姿变换 TT

  1. 匹配 FptF_{p}^{t} 中的平面特征和它们在 Fpt1\mathbb{F}_{p}^{t-1} 中的对应关系,估计 [tz,θroll,θpitch][t_z, \theta_{roll}, \theta_{pitch}]
  2. 使用 [tz,θroll,θpitch][t_z, \theta_{roll}, \theta_{pitch}] 作为约束条件,匹配 FetF_{e}^{t} 的边缘特征在和它们在 Fet1\mathbb{F}_{e}^{t-1} 中的对应关系,估计剩余的 [tx,ty,θyaw][t_x, t_y, \theta_{yaw}]

由于第一步针对地面点的优化使用点到面的约束来构建约束,修改点的x,y和yaw角不会对点到面的距离产生影响,所以认为地面点之间的约束对 [tx,ty,θyaw][t_x, t_y, \theta_{yaw}] 不可观。

虽然也可以从第一个优化步骤中获得 [tx,ty,θyaw][t_x, t_y, \theta_{yaw}] ,但它们的精度较低,并且不用于第二个步骤。

融合两个步骤所估计的 [tz,θroll,θpitch][t_z, \theta_{roll}, \theta_{pitch}][tx,ty,θyaw][t_x, t_y, \theta_{yaw}] ,得到连续两帧之间六自由度的变换。

通过该方法,可以在到达相似精度的同时,节约 35% 的计算时间(表Ⅲ)。

两步L-M优化过程

图3:激光雷达里程表模块的两步优化。首先通过匹配从地面点提取的平面特征来获得[tz,θroll,θpitch]。然后,在应用[tz,θroll,θpitch]作为约束的同时,使用从分段点提取的边缘特征来估计[tx,ty,θyaw]。

E. Lidar Mapping

激光雷达建图模块将 {Fet,Fpt}\left\{ \mathbb{F}_{e}^{t}, \mathbb{F}_{p}^{t} \right\} 中的特征与周围的点云地图 Qˉt1\bar{Q}^{t-1} 进行特征匹配,以进一步优化位姿变换,但运行频率较低。然后,再次使用L-M方法来获得最终变换。具体匹配和优化过程参考LOAM。

LeGO-LOAM的主要区别在于最终点云地图的存储方式。LOAM存储单个点云地图,LeGO-LOAM存储每个单独的特征集合 {Fet,Fpt}\left\{ \mathbb{F}_{e}^{t}, \mathbb{F}_{p}^{t} \right\}

定义 Mt1={{Fe1,Fp1},,{Fet1,Fpt1}}M^{t-1}=\left\{ \left\{ \mathbb{F}_{e}^{1}, \mathbb{F}_{p}^{1} \right\}, \ldots,\left\{ \mathbb{F}_{e}^{t-1}, \mathbb{F}_{p}^{t-1} \right\} \right\} 为保存先前所有特征的集合。 Mt1M^{t-1} 中的每个特征集与扫描时传感器的位姿进行了绑定。

然后全局地图 Qˉt1\bar{Q}^{t-1} 可以通过两种方式从 Mt1M^{t-1} 获得。

(1)方法一: Qˉt1\bar{Q}^{t-1} 是通过选择传感器视野范围内的特征集合获得的(局部地图匹配)。

为简单起见,我们可以选择传感器位姿在当前传感器位置 100 m100\mathrm{~m} 范围内的特征集作为关键帧(key-frame),然后将这些关键帧转换并融合成一个局部点云地图 Qˉt1\bar{Q}^{t-1}

(2)方法二:将位姿图SLAM(pose-graph SLAM)集成到LeGO-LOAM中。

每个特征集的传感器位姿都可以建模为姿势图中的一个节点。特征集合 {Fet,Fpt}\left\{ \mathbb{F}_{e}^{t}, \mathbb{F}_{p}^{t} \right\} 可被视为此节点的传感器测量值。

由于激光雷达建图模块的姿态估计漂移非常小,我们可以假设在短时间内没有漂移。在这种方式中, Qˉt1\bar{Q}^{t-1} 可通过选择最近的一组特征集合形成,即 Qˉt1={{Fetk,Fptk},,{Fet1,Fpt1}}\bar{Q}^{t-1} = \left\{ \left\{ \mathbb{F}_{e}^{t-k}, \mathbb{F}_{p}^{t-k} \right\}, \ldots,\left\{ \mathbb{F}_{e}^{t-1}, \mathbb{F}_{p}^{t-1} \right\} \right\} ,其中 kk 定义 Qˉt1\bar{Q}^{t-1} 中滑窗的大小。

获得周围地图后,可以利用L-M优化后获得的转换,来作为新节点和 Qˉt1\bar{Q}^{t-1} 中所选节点之间的空间约束。

可以通过执行回环检测来进一步消除漂移。

在这种情况下,如果使用ICP在当前特征集和之前的特征集之间找到了匹配项,则会添加新的约束。

然后,通过将位姿图发送到优化系统,更新传感器的估计姿势。

注意,只有 Sec.IV\mathrm{Sec}.IV(D)中的实验使用了位姿图优化来创建其周围的地图。

这里的回环比较简单,只要我们在历史的关键帧中找到一帧与当前帧比较近,使用ICP计算两帧的位姿变换,构建一个位姿图模型,来进行一个优化。

IV. EXPERIMENTS

设计了一系列的实验来定性和定量分析 LOAM 和 LeGO-LOAM 的表现性能。

在两种硬件安排上,带Cortex的JetsonTX2-A57,和带i7-4710MQ的笔记本电脑。这两种算法都是在C++中实现的,并使用Ubuntu Linux中的机器人操作系统(ROS)执行。

作者在户外的小场景和大场景中,分别对 LeGO-LOAM 和 LOAM 测试平台执行激烈和平缓的控制,来查看两者的建图效果和效率。

A. Small-Scale UGV Test

在植被覆盖的室外环境手动驱动机器人,来比较特征提取效果,进行定性比较分析,效果如下图所示。

两种算法特征提取的对比

图4:在被植被覆盖的室外环境中,由两种不同的激光雷达里程计法和建图框架获得的边缘和平面特征。边缘特征和平面特征分别为绿色和粉红色。从 LOAM 中获得的特征见(b)和©。从 LeGO-LOAM 中得到的特征见(d)和(e)。标签(i)表示树,(ii)表示石墙,(iii)表示机器人。

如图4(d)所示,在经过点云分割之后,LeGO-LOAM 的特征点数量相比 LOAM 要少很多。

其中大部分从树叶返回的点都被丢弃了,因为在多次扫描之后叶子是不稳定的特征。

由于从草中返回的点也有很多噪声,在评估后将得到较大的粗曲率值。使用原始的 LOAM 将不可避免地从这些点中提取出来边缘特征。如图4©所示,从地面中提取出来的边缘特征通常是不可靠的。

虽然可以通过修改 LOAM 中提取边缘和平面特征的平滑度阈值 cthc_{th} 来减少特征点的数量,过滤掉草和叶片中的不稳定特征,但实际应用后获得的效果却更差。

例如,提升阈值虽然能从环境中提取更稳定的边缘特征,但当机器人进入相对整洁的环境后,这种变化可能会导致提取到的有用的边缘特征数量不足。同理,当机器人从整洁环境移动到嘈杂环境时,降低阈值也会导致缺乏有用的平面特征。因此在所有实验中,LOAM 和 LeGO-LOAM 均使用相同的阈值 cthc_{th}

现在,我们在测试环境中比较来自这两种方法的建图结果。为了模拟一个具有挑战性的潜在UGV操作场景,测试中执行了一系列剧烈的偏航机动。

请注意,在本文的所有实验中,这两种方法都得到了相同的初始平移和旋转估计值,这是从IMU中获得的。

操作60秒后得到的点云地图如图5所示。由于不稳定的特征导致了错误的特征关联,来自LOAM的建图在操作过程中发散了两次。图5(a)中用白色箭头突出显示的三条树干实际代表了现实中的同一棵树。

两种算法在草地建图的对比

图5:LOAM和LeGO-LOAM分别在图4(a)所示地形上建的地图。在(a)中用白色箭头标记的树实际代表的是同一棵树。

结论:

在小场景的激烈运动过程中:LOAM 会把草丛、树叶提取为边缘点特征(草丛和树叶是不稳定特征的主要来源);而 LeGO-LOAM 会过滤掉这些不稳定的特征,只会在树干,地面,台阶等上提取稳定特征。

在LOAM框架中,剧烈的运动容易造成点云地图的发散。

B. Large-Scale UGV Tests

在三个大规模数据集上对 LOAM 和 LeGO-LOAM 进行定量比较分析,分别称为实验1、2和3。

前两个是在史蒂文斯理工学院校园收集的,有许多建筑、树木、道路和人行道。这些实验及其环境如图6(a)所示。

实验3横跨一条森林覆盖的徒步小径,以树木、沥青路和被草地和土壤覆盖的小径为主要特征。实验3所处的环境如图8所示。

每个实验的细节列在表一中。为了进行公平的比较,每个实验的性能和准确性结果都取自十次实验的平均值。

(1)Experiment 1
实验一路径

实验1的目的在于证明: LOAM 和 LeGO-LOAM 都可以在城市环境中的平滑运动过程中实现低漂移姿态估计。

实验1避免了剧烈的偏航动作,避免了驾驶机器人通过只能获得少数稳定特征的稀疏区域。在整个数据记录过程中,该机器人都在平稳的道路上运行。

机器人的初始位置为斜坡,如图6(b)所示。该机器人在行驶807秒后,以1.35米/秒的平均速度返回到相同的位置。

为了评估两种方法的位姿估计精度,通过比较最终位姿和初始位姿之间的平移和旋转差异。本文所有的实验都将初始位姿定义为[0,0,0,0,0,0]。

如表V所示,LOAM 和 LeGO-LOAM 在两种不同的硬件安排上都实现了相似的低漂移位姿估计。当在Jetson上运行时,来自LeGO-LOAM的最终地图如图6(b)所示。

实验1和实验2中的LeGO-LOAM地图

图6:实验1和实验2中的LeGO-LOAM地图。©中的颜色变化表示真实的海拔(高度)变化。由于实验1中机器人的初始位置是在斜坡上,所以(b)中的颜色变化并不代表真正的高度变化。

(2)Experiment 2
实验二路径

虽然实验2是在与实验1相同的环境下进行的,但其运动轨迹略有不同,实验2驾驶穿过了人行道,如图7(a)所示这条人行道代表了一个LOAM可能经常失败的环境。

人行道一端是墙壁和柱子,从这些结构中提取出来的边缘和平面特征是稳定的。

人行道的另一端是一个开阔的区域,覆盖了草和树木等噪声较大的物体,这些结构提取的边缘和平面特征是不可靠的。因此,在开车经过这条人行道后(图7(b)和(d)),LOAM的位姿估计会发散。

LeGO-LOAM则没有这样的问题,原因在于:

(1)没有从被草地覆盖的地面上提取出边缘特征

(2)在点云分割后过滤掉来自树叶上的传感器读数噪声

实验2局部对比

图7:在实验2中失败的场景越过穿过史蒂文斯校园的人行道(上图(a)中最左边的人行道)。人行道的一端由附近建筑的特色支撑着。人行道的另一端主要被嘈杂的物体包围着,比如草和树木。如果不进行点云分割,则将从这些对象中提取出不可靠的边缘和平面特征。图片(b)和(d)显示,加载经过人行道后失败。

两种方法的精度比较如表V所示。在本实验中,LeGO-LOAM的精度比LOAM高一个数量级。

结论:

作者在大场景的都市环境(是一个学校,不同地点的海拔误差在19m之内)里也进行多种测试以验证建图的精度,有人行道,水泥路,土路和草丛。LOAM 在人行道上的建图效果并不好,可能是一端存在树木叶子的干扰。

(3)Experiment 3
实验3中LeGO-LOAM的建图结果

图8:实验3中LeGO-LOAM的建图结果

实验3的数据集是来自一条森林覆盖的徒步小径,在那里UGV以平均1.3米/秒的速度行驶。机器人在驾驶35分钟后回到初始位置。该环境下的海拔高度变化约为19米。

UGV在三种路面上行驶:被泥土覆盖的小径、沥青路和被草地覆盖的地面(代表性图像分别为上图中 a, b, c)。保证道路至少一侧始终存在树木或灌木丛。

首先在这个环境中测试LOAM的准确性。所得到的地图在使用的两台计算机的不同位置出现发散。关于UGV初始位置的最终平移和旋转误差在Jetson上分别为69.40m和27.38°,在笔记本电脑上分别为62.11m和8.50°。在两种硬件安排上进行10次试验得到的轨迹如图9(a)和(b)所示。

当将LeGO-LOAM应用于该数据集时,最终的相对平移和旋转误差在Jetson上分别为13.93m和7.73°,在笔记本电脑上分别为14.87m和7.96°。图8上的最终点云图覆盖在卫星图像上。在图8的中心放大的局部地图显示,来自LeGO-LOAM的点云图与开放中可见的三棵树匹配得很好。在两台计算机上从LeGO-LOAM获得的所有路径显示出高度一致性。图9©和(d)显示了在每台计算机上运行的十次实验。

LOAM和LeGO-LOAM的运行结果如图9所示,显然 LeGO-LOAM 的误差比 LOAM 要低得多,同时 LeGO-LOAM 在所有路径间显示出高度一致性

实验3生成的路径

图9:LOAM 和 LeGO-LOAM 在2台计算机上使用实验3数据集进行10次实验所生成的路径。

C. Benchmarking Results(基准测试结果)

(1) Feature number comparison(特征点数量比较)

在表二中展示了两种方法的特征提取的比较。

特征点数量比较

每次扫描的特征内容在每个数据集的10次实验中取平均值。经过点云分割后,特征集合 FeF_eFpF_pFe\mathbb{F}_eFp\mathbb{F}_p 中需要由LeGO-LOAM处理的特征点数量分别减少了至少29%、40%、68% 和 72%。

(2) Iteration number comparison(迭代次数比较)

应用所提出的两步L-M优化方法的结果如表三所示。

原始 L-M 优化与本文提出的两步 L-M 优化进行对比,以处理一帧终止时的平均迭代次数作为判断标准。

当采用两步L-M优化时,实验1和实验2分2次迭代完成第1步优化。虽然步骤2优化的迭代次数与原始L-M方法的数量相似,但处理的特征较少。

结果表明,采用两步L-M优化后,激光雷达测程仪的运行时间减少了34%至48%。(两步优化的运行时间如表IV所示)

两步LM优化的迭代效果
(3) Runtime comparison(运行时间比较)

在两台计算机上的LOAM和LeGO-LOAM的每个模块的运行时如表四所示。

特征提取和激光雷达里程计模块在LeGO-LOAM中的运行时间减少了一个数量级。激光雷达建图的运行时间也至少减少了60%。

注意,在Jetson上,这两个模块在LOAM中的运行时超过100ms。因此许多帧都被跳过了,因为 LOAM 在嵌入式系统上无法实现实时性。

运行时间比较
(4) Pose error comparison(位姿误差比较)

在所有实验中将初始位姿设置为[0,0,0,0,0,0],通过比较初始位姿与最终位姿间的位姿变换来计算相对位姿估计误差。

表V中列出了这两种方法在两种计算机上的旋转误差(以度为单位)和平移误差(以米为单位)。

通过使用所提出的框架,LeGO-LOAM 可以在更少的计算时间下实现相当或更好的位姿估计精确度

相对位姿误差比较(首尾在同一位置)

D. Loop Closure Test using KITTI Dataset

最后的实验将 LeGO-LOAM 应用于KITTI数据集。KITTI数据集上的 LOAM 测试以10%的实时速度运行,我们只探索 LeGO-LOAM 及其在嵌入式系统实时应用中的潜力,其中的行驶长度足以需要一个完整的SLAM解决方案。

使用序列00在Jetson上获得的LeGO-LOAM结果如图10所示。

为了在Jetson上实现实时性能,我们将扫描从HDL-64E降采样到在第三节中为VLP-16使用的相同范围的图像。换句话说,每次扫描的75%的点在处理前被省略。这里的ICP用于添加姿态图中节点之间的约束。然后使用iSAM2对图形进行优化。最后,我们使用优化后的图来校正传感器的姿态和地图。

回环检测测试

图10:Jetson使用LeGO-LOAM在KITTI数据集上进行回环检测测试。颜色变化表示海拔变化。

V. CONCLUSIONS AND DISCUSSION

CONCLUSIONS

本文提出了 LeGO-LOAM,一种轻量级的基于地面优化的激光雷达里程计和建图方法,用于在复杂环境中对 UGV 进行实时位姿估计。

LeGO-LOAM是轻量级的,可以用于嵌入式系统,并实现实时性能。

LeGO-LOAM也进行了地面优化,实现了地面分离、点云分割和改进的L-M优化。在此过程中,地面分离和点云分割过滤掉了可能表示不可靠特征的无价值点。两步L-M优化分别计算位姿变换的不同分量。

该方法在室外环境中收集的一系列UGV数据集上进行了评估。实验结果表明,与LOAM算法相比,LeGO-LOAM可以达到相似或更高的精度,同时计算时间也大幅减少

DISCUSSION

未来的工作包括探索其在其他类别载具上的应用。

尽管 LeGO-LOAM特别适合于地面车辆的姿态估计,但其应用也可以扩展到其他载具,如无人机(UAV),只需稍作改动。

当将LeGO-LOAM应用于无人机时,我们不会假设扫描中存在地面。扫描的点云将在不提取地面点的情况下进行分割。

特征提取过程与选择 FeF_{e}Fe\mathbb{F}_{e}Fp\mathbb{F}_{p} 的过程相同。不再从标记为地面点的点提取 FpF_{p} 中的平面特征,而是从分割后的所有点中提取 FpF_{p} 中的平面特征。

然后,将使用原始L-M方法来获得两次扫描之间的转换,而不是使用两步优化方法。

虽然经过这些变化后计算时间会增加,但LeGO-LOAM仍然是有效的,因为分割后在嘈杂的室外环境中忽略了大量的点。

估计的特征对应关系的准确性可能会提高,因为它们受益于分割。

此外,使用LeGO-LOAM在线执行回环检测的功能使其成为适合执行长期导航任务的有用工具。

换一句话说,如果要用到无人机,其地面的分割可以不要,而只需要将点云簇进行聚类分割,不要区分地面点,且优化时使用LOAM的LM优化即可,减少了计算量但增加了回环检测过程。