【LIO-SAM】LIO-SAM论文翻译(2020年)
【LIO】LIO-SAM论文翻译(2020年)
- 1.Abstract
- 2.INTRODUCTION
- 4.通过平滑和映射实现激光雷达惯性里程计
- A. 系统概述
- B. IMU Preintegration Factor(推导过程参阅)
- C. Lidar Odometry Factor(激光雷达里程计因子)
- 1) 体素地图的关键帧子集
- 2) 扫描匹配
- 3) 相对变换
- 1. LOAM中的扫描匹配原理相同
- 2. LOAM中的扫描匹配过程相同
- 3. 输入和输出
- 4. 计算误差:
- 5. 优化位姿:
- 5. 伪代码
- 6. 总结
- D. GPS Factor
- E. Loop Closure Factor
- 5. EXPERIMENTS(性能总结)
- LIO-SAM Code
- Datasets
1.Abstract
提出了一种通过平滑和映射实现紧密耦合的激光雷达惯性里程计框架 LIO-SAM,该框架可实现高精度、实时的移动机器人轨迹估计和地图构建。LIO-SAM 在因子图上制定激光雷达惯性里程计,允许将来自不同来源的大量相对和绝对测量(包括回环)作为因子纳入系统。惯性测量单元 (IMU) 预积分估计的运动消除了点云的倾斜,并为激光雷达里程计优化产生了初始猜测。获得的激光雷达里程计解决方案用于估计 IMU 的偏差。为了确保实时高性能,我们将旧的激光雷达扫描边缘化以进行姿势优化,而不是将激光雷达扫描与全局地图匹配。在局部尺度而非全局尺度上进行扫描匹配可显著提高系统的实时性能,关键帧的选择性引入以及将新关键帧注册到固定大小的先前“子关键帧”集的有效滑动窗口方法也显著提高了系统的实时性能。所提出的方法在从三个平台收集的、不同尺度和环境下的数据集上进行了广泛的评估。
2.INTRODUCTION
状态估计、定位和地图绘制是智能移动机器人成功的基本先决条件,是反馈控制、避障和规划等众多功能所必需的。利用基于视觉和基于激光雷达的传感技术,人们付出了巨大努力来实现高性能实时同步定位和地图绘制 (SLAM),以支持移动机器人的六自由度状态估计。基于视觉的方法通常使用单目或立体摄像头,并对连续图像的特征进行三角测量以确定摄像头运动。虽然基于视觉的方法特别适合位置识别,但它们对初始化、照明和范围的敏感性使它们在单独用于支持自主导航系统时不可靠。另一方面,基于激光雷达的方法在很大程度上不受照明变化的影响。尤其是随着最近推出的远程高分辨率 3D 激光雷达(例如 Velodyne VLS-128 和 Ouster OS1-128),激光雷达变得更适合直接捕捉 3D 空间中环境的精细细节。因此,本文重点介绍基于激光雷达的状态估计和映射方法。在过去的二十年中,已经提出了许多基于激光雷达的状态估计和映射方法。其中,[1] 中提出的用于低漂移和实时状态估计和映射的激光雷达里程表和映射 (LOAM)方法是使用最广泛的方法之一。LOAM(2017年) 使用激光雷达和惯性测量单元 (IMU),实现了最先进的性能,在 KITTI 里程表基准站点 [2] 上发布以来一直被评为顶级的基于激光雷达的方法。尽管 LOAM 取得了成功,但它也存在一些局限性 - 通过将其数据保存在全局体素图中,通常很难执行回环检测并结合其他绝对测量(例如 GPS)进行姿势校正。当此体素图在功能丰富的环境中变得密集时,其在线优化过程的效率会降低。LOAM 在大规模测试中也会出现漂移,因为它的核心是一种基于扫描匹配的方法。
在本文中,提出了一种通过平滑和映射实现紧密耦合的激光雷达惯性里程计框架 LIOSAM,以解决上述问题。我们假设一个用于点云去偏的非线性运动模型,使用原始 IMU 测量值估计激光雷达扫描期间的传感器运动。除了去偏点云之外,估计的运动还可作为激光雷达里程计优化的初始猜测。然后使用获得的激光雷达里程计解决方案来估计因子图中 IMU 的偏差。通过引入用于机器人轨迹估计的全局因子图,我们可以使用激光雷达和 IMU 测量值有效地执行传感器融合,在机器人姿势之间结合位置识别,并在可用时引入绝对测量值,例如 GPS 定位和罗盘航向。来自各种来源的这些因子集合用于图的联合优化。此外,我们将旧的激光雷达扫描边缘化以进行姿势优化,而不是将扫描与 LOAM 等全局地图匹配。在局部尺度而不是全局尺度上进行扫描匹配可显著提高系统的实时性能,选择性引入关键帧以及将新关键帧注册到固定大小的先前“子关键帧”集的有效滑动窗口方法也是如此。我们工作的主要贡献可以概括如下:
• 建立在因子图之上的紧密耦合激光雷达惯性里程计框架,适用于多传感器融合和全局优化。
• 一种高效的、基于局部滑动窗口的扫描匹配方法,通过将选择性选择的新关键帧注册到固定大小的先前子关键帧集来实现实时性能。
• 所提出的框架已通过各种规模、车辆和环境的测试进行了广泛验证。
3.RELATED WORK
激光雷达里程计通常通过使用扫描匹配方法(例如 ICP [3] 和 GICP[4])来查找两个连续帧之间的相对变换。与匹配完整点云相比,基于特征的匹配方法由于其计算效率而成为一种流行的替代方案。例如,在 [5] 中,提出了一种基于平面的配准方法用于实时激光雷达里程计。假设在结构化环境中进行操作,它从点云中提取平面并通过求解最小二乘问题来匹配它们。[6] 提出了一种基于领线的方法用于里程计估计。在该方法中,从原始点云随机生成线段,随后用于配准。然而,由于现代 3D 激光雷达的旋转机制和传感器运动,扫描的点云经常倾斜。仅使用激光雷达进行姿态估计并不理想,因为使用倾斜的点云或特征进行配准最终会导致较大的漂移。因此,激光雷达通常与其他传感器(如 IMU 和 GPS)结合使用,进行状态估计和测绘。这种利用传感器融合的设计方案通常可分为两类:松耦合融合和紧耦合融合。在 LOAM [1] 中,引入了 IMU 来消除激光雷达扫描的倾斜,并为扫描匹配提供运动先验。然而,IMU 不参与算法的优化过程。因此,LOAM 可以归类为松耦合方法。[7] 提出了一种轻量级、地面优化的激光雷达里程计和测绘 (LeGOLOAM) (2018年)方法,用于地面车辆测绘任务 [8]。其 IMU 测量的融合与 LOAM 相同。一种更流行的松耦合融合方法是使用扩展卡尔曼滤波器 (EKF)。例如,[9]-[13] 在机器人状态估计的优化阶段使用 EKF 集成来自激光雷达、IMU 和可选 GPS 的测量值。紧耦合系统通常提供更高的精度,并且是目前正在进行的研究的主要焦点 [14]。在 [15]IN2LAMA(2019年) 中,预集成的 IMU 测量值被用于消除点云的倾斜。[16] 中介绍了一种以机器人为中心的激光雷达惯性状态估计器 LINS。LINS(2019年) 专为地面车辆设计,使用误差状态卡尔曼滤波器以紧耦合的方式递归地校正机器人的状态估计。[17] 介绍了一种紧耦合的激光雷达惯性里程计和测绘框架 LIOM。
LIOM 是 LIO-mapping 的缩写,它联合优化了来自激光雷达和 IMU 的测量值,与 LOAM 相比,实现了相似或更好的精度。由于LIOM 旨在处理所有传感器测量值,因此无法实现实时性能 - 在我们的测试中,它的运行速度约为实时的 0.6 倍。
4.通过平滑和映射实现激光雷达惯性里程计
A. 系统概述
首先定义整篇论文中使用的框架和符号。我们将世界框架表示为 W,将机器人主体框架表示为 B。假设 IMU 框架与机器人主体框架重合。机器人状态 x 写成:
x
=
[
R
⊤
p
⊤
v
⊤
b
⊤
]
⊤
x = \begin{bmatrix} \mathbf{R}^\top & \\\mathbf{p}^\top \\ \mathbf{v}^\top & \\\mathbf{b}^\top \end{bmatrix}^\top
x=
R⊤p⊤v⊤b⊤
⊤其中 R ∈ SO(3) 是旋转矩阵,p ∈ R^3 是位置向量,v 是速度,b 是 IMU 偏差,维度通常为6(加速度计偏差和陀螺仪偏差3+3)。从 B 到 W 的变换 T ∈ SE(3) 表示为:
T
=
[
R
|
p
]
T = \begin{bmatrix} \mathbf{R} | \mathbf{p} \end{bmatrix}
T=[R|p]
图 1 显示了所提出的系统的概述。系统从 3D 激光雷达、IMU 和可选的 GPS 接收传感器数据。我们试图利用这些传感器的观测来估计机器人的状态及其轨迹。这个状态估计问题可以表述为最大后验 (MAP) 问题。我们使用因子图来建模此问题,因为与贝叶斯网络相比,它更适合执行推理。假设高斯噪声模型,我们问题的 MAP 推理相当于解决非线性最小二乘问题 [18]。请注意,在不失一般性的情况下,所提出的系统还可以结合来自其他传感器的测量值,例如来自高度计的海拔或来自指南针的航向。我们引入了四种类型的因子以及一种变量类型来构建因子图。这个变量代表机器人在特定时间的状态,归因于图的节点。这四种类型的因子是:(a) IMU 预积分因子、(b) 激光雷达里程计因子、© GPS 因子和 (d) 环路闭合因子。当机器人姿势的变化超过用户定义的阈值时,新的机器人状态节点 x 会添加到图中。插入新节点后,使用增量平滑和贝叶斯树 (iSAM2) [19] 的映射对因子图进行优化。以下章节介绍了生成这些因子的过程。
B. IMU Preintegration Factor(推导过程参阅)
C. Lidar Odometry Factor(激光雷达里程计因子)
当新的激光雷达扫描到达时,首先进行特征提取。通过评估局部区域上点的粗糙度来提取边缘和平面特征。粗糙度值较大的点被归类为边缘特征,平面特征则按较小的粗糙度值分类。时间
i
i
i 的激光雷达扫描中提取的边缘和平面特征分别表示为
F
e
i
F_e^i
Fei 和$ F_p^i$ 。时间
i
i
i提取的所有特征组成激光雷达帧
F
i
F^i
Fi,其中
F
i
=
{
F
e
i
,
F
p
i
}
F^i = \{F_e^i, F_p^i\}
Fi={Fei,Fpi}。请注意,激光雷达帧
F
F
F以B坐标系下的表示。可以在文献 [1] 或 [7](如果使用范围图像)中找到有关特征提取过程的详细描述。
由于计算上难以处理每个激光雷达帧,因此我们采用关键帧选择的概念,该方法在视觉 SLAM 领域中广泛使用。使用简单但有效的启发式方法,当与先前状态
x
i
x_i
xi相比,机器人姿势的变化超过用户定义的阈值时,选择激光雷达帧
F
i
+
1
F^{i+1}
Fi+1作为关键帧。新保存的关键帧
F
i
+
1
F^{i+1}
Fi+1与因子图中的新机器人状态节点
x
i
+
1
x_{i+1}
xi+1 相关联。两个关键帧之间的激光雷达帧将被丢弃。通过这种方式添加关键帧不仅平衡了地图密度和内存消耗,还维护了相对稀疏的因子图,适用于实时非线性优化。在本研究中,添加新关键帧的位置和旋转变化阈值分别为 1m 和 10°。
如果向因子图添加一个新的状态节点
x
i
+
1
x_{i+1}
xi+1,与此状态相关联的激光雷达关键帧是
F
i
+
1
F^{i+1}
Fi+1。激光雷达里程计因子的生成步骤如下:
1) 体素地图的关键帧子集
我们实施滑动窗口方法来创建包含固定数量的最近激光雷达扫描的点云图。并非优化两个连续激光雷达扫描之间的转换,而是提取最近的
n
n
n个关键帧(称之为子关键帧)进行估计。使用与之相关的转换
{
T
i
−
n
,
…
,
T
i
}
\{T_{i-n}, \dots, T_i\}
{Ti−n,…,Ti}将子关键帧集
{
F
i
,
…
,
F
i
−
n
}
\{F^i, \dots, F^{i-n}\}
{Fi,…,Fi−n}转换为
W
W
W帧 。转换后的子关键帧合并形成体素图
M
i
M^i
Mi。由于在之前的特征提取步骤中提取了两种类型的特征,因此
M
i
M^i
Mi 由两个子体素图组成,分别表示为
M
e
i
M_e^i
Mei(边缘特征体素图)和
M
p
i
M_p^i
Mpi(平面特征体素图)。激光雷达帧和体素图之间的关系如下:
M
i
=
{
M
e
i
,
M
p
i
}
M^i = \{M_e^i, M_p^i\}
Mi={Mei,Mpi}
其中:
M
e
i
=
0
F
e
i
∪
0
F
e
i
−
1
∪
⋯
∪
0
F
e
i
−
n
M
p
i
=
0
F
p
i
∪
0
F
p
i
−
1
∪
⋯
∪
0
F
p
i
−
n
M_e^i = \ ^0F_e^i \cup \ ^0F_e^{i-1} \cup \dots \cup \ ^0F_e^{i-n} \\ M_p^i = \ ^0F_p^i \cup \ ^0F_p^{i-1} \cup \dots \cup \ ^0F_p^{i-n}
Mei= 0Fei∪ 0Fei−1∪⋯∪ 0Fei−n Mpi= 0Fpi∪ 0Fpi−1∪⋯∪ 0Fpi−n
0
F
e
i
^0F_e^i
0Fei和
0
F
p
i
^0F_p^i
0Fpi是在
W
W
W帧中变换后的边缘和平面特征。随后
M
e
i
M_e^i
Mei和
M
p
i
M_p^i
Mpi 进行下采样以消除落入同一体素单元的重复特征。在本文中,
n
n
n选择为 25(关键帧规模)。
M
e
i
M_e^i
Mei和
M
p
i
M_p^i
Mpi的下采样分辨率分别为 0.2m 和 0.4m。
2) 扫描匹配
通过扫描匹配将新获得的激光雷达帧 F i + 1 F^{i+1} Fi+1(即 { F e i + 1 , F p i + 1 } \{F_e^{i+1}, F_p^{i+1}\} {Fei+1,Fpi+1}与 $M^i $ 匹配。可以使用各种扫描匹配方法,如文献 [3] 和 [4]。在本研究中,选择了文献 [1] 中的方法,因其在各种挑战环境下具有计算效率和鲁棒性。首先将 { F e i + 1 , F p i + 1 } \{F_e^{i+1}, F_p^{i+1}\} {Fei+1,Fpi+1} 从 B转换为 W W W ,并获得 { 0 F e i + 1 , 0 F p i + 1 } \{^0F_e^{i+1}, ^0F_p^{i+1}\} {0Fei+1,0Fpi+1}。该初始变换通过使用来自 IMU 的预测机器人运动 T ~ i + 1 \tilde{T}_{i+1} T~i+1 获得。对于 0 F e i + 1 ^0F_e^{i+1} 0Fei+1或 0 F p i + 1 ^0F_p^{i+1} 0Fpi+1中的每个特征,在$M_e^i $或 M p i M_p^i Mpi中找到其边缘或平面对应关系。查找这些对应关系的详细过程可以参考文献LOAM [1]。
3) 相对变换
特征与其边缘或平面块对应关系之间的距离可以用以下公式计算:
d
e
k
=
(
p
e
i
+
1
,
k
−
p
e
i
,
u
)
×
(
p
e
i
+
1
,
k
−
p
e
i
,
v
)
p
e
i
,
u
−
p
e
i
,
v
d_e^k = \frac{(p_e^{i+1,k} - p_e^{i,u}) \times (p_e^{i+1,k} - p_e^{i,v})}{p_e^{i,u} - p_e^{i,v}}
dek=pei,u−pei,v(pei+1,k−pei,u)×(pei+1,k−pei,v)
d
p
k
=
(
p
p
i
+
1
,
k
−
p
p
i
,
u
)
(
(
p
p
i
,
u
−
p
p
i
,
v
)
×
(
p
p
i
,
u
−
p
p
i
,
w
)
)
(
p
p
i
,
u
−
p
p
i
,
v
)
×
(
p
p
i
,
u
−
p
p
i
,
w
)
d_p^k = \frac{(p_p^{i+1,k} - p_p^{i,u}) ((p_p^{i,u} - p_p^{i,v}) \times (p_p^{i,u} - p_p^{i,w}))}{(p_p^{i,u} - p_p^{i,v}) \times (p_p^{i,u} - p_p^{i,w})}
dpk=(ppi,u−ppi,v)×(ppi,u−ppi,w)(ppi+1,k−ppi,u)((ppi,u−ppi,v)×(ppi,u−ppi,w))
其中
k
,
u
,
v
,
w
k, u, v, w
k,u,v,w是其对应集合中的特征索引。对于
0
F
e
i
+
1
^0F_e^{i+1}
0Fei+1 中的边缘特征
p
e
i
+
1
,
k
p_e^{i+1,k}
pei+1,k,
p
e
i
,
u
p_e^{i,u}
pei,u和
p
e
i
,
v
p_e^{i,v}
pei,v是形成
M
e
i
M_e^i
Mei 中相应边缘线的点。对于
0
F
p
i
+
1
^0F_p^{i+1}
0Fpi+1 中的平面特征
p
p
i
+
1
,
k
p_p^{i+1,k}
ppi+1,k ,$p_p^{i,u}, p_p^{i,v}, p_p^{i,w}
形成
形成
形成M_p^i$ 中相应的平面面片。然后使用高斯-牛顿法通过最小化以下内容来求解最佳变换:
min
T
i
+
1
{
∑
p
e
i
+
1
,
k
∈
0
F
e
i
+
1
d
e
k
+
∑
p
p
i
+
1
,
k
∈
0
F
p
i
+
1
d
p
k
}
\min_{T_{i+1}} { \sum_{p_e^{i+1,k} \in ^0F_e^{i+1}} d_e^k + \sum_{p_p^{i+1,k} \in ^0F_p^{i+1}} d_p^k }
Ti+1min {pei+1,k∈0Fei+1∑dek+ppi+1,k∈0Fpi+1∑dpk }
最后,我们可以得到
x
i
x_i
xi 和
x
i
+
1
x_{i+1}
xi+1 之间的相对变换
Δ
T
i
,
i
+
1
\Delta T_{i,i+1}
ΔTi,i+1 ,这是连接这两个姿势的激光雷达里程计因子:
Δ
T
i
,
i
+
1
=
T
i
−
1
T
i
+
1
\Delta T_{i,i+1} = T_i^{-1} T_{i+1}
ΔTi,i+1=Ti−1Ti+1。我们注意到,另一种获得
Δ
T
i
,
i
+
1
\Delta T_{i,i+1}
ΔTi,i+1 的方法是将子关键帧转换为
x
i
x_i
xi 的帧中。换句话说,我们将
F
i
+
1
与
x
i
F^{i+1} 与 x_i
Fi+1与xi 的帧中表示的体素图相匹配。
1. LOAM中的扫描匹配原理相同
在LOAM中,扫描匹配的目标是通过最小化激光雷达扫描帧中特征点与环境地图(由之前的帧累积形成的)中相应特征的距离,来估计当前帧的位姿变化。LOAM提取两种主要特征:
- 边缘特征:激光雷达点云中曲率较大的点,用于代表物体的边缘。
- 平面特征:激光雷达点云中曲率较小的点,用于代表平滑表面。
对于新的激光雷达帧,LOAM将边缘特征与之前构建的环境中的边缘特征匹配,将平面特征与环境中的平面特征匹配,进而计算位姿变化。
2. LOAM中的扫描匹配过程相同
扫描匹配包括以下步骤:
- 特征提取:从新的激光雷达扫描帧中提取边缘和平面特征。边缘特征点的曲率较大,平面特征点的曲率较小。
- 初始变换估计:通过IMU数据或通过预测得到初始位姿估计 T ~ i + 1 \tilde{T}_{i+1} T~i+1,将当前帧的边缘和平面特征变换到世界系
- 特征匹配:对于当前帧中的每个边缘特征点,找到前一帧中相邻的两个边缘特征点,构成对应边缘;对当前帧中的每个平面特征点,找到前一帧中相邻的三个平面特征点,构成对应平面。
- 误差计算:
- 边缘特征的误差计算为点到线的距离。
- 平面特征的误差计算为点到平面的距离。
- 非线性优化:使用高斯-牛顿法(其他优化算法)最小化边缘特征和平面特征的误差,得到最佳位姿变换。
- 迭代优化:重复上述过程,直到误差收敛或达到最大迭代次数。
3. 输入和输出
- 输入:当前激光雷达扫描帧,上一帧的地图(边缘特征和平面特征),初始位姿估计(通过IMU或预测)。
- 输出:当前帧的位姿变化,即位姿变换矩阵 T i + 1 T_{i+1} Ti+1。
- 4. 详细算法描述
- 特征提取:
- 提取边缘特征 F e i + 1 F_e^{i+1} Fei+1和平面特征 F p i + 1 F_p^{i+1} Fpi+1 。
- 初始变换估计:
- 使用IMU提供的预测位姿 T ~ i + 1 \tilde{T}_{i+1} T~i+1,将当前帧的特征点从传感器坐标系 B转换到世界坐标系 W。
- 匹配对应特征:
- 对于每个边缘特征
p
e
i
+
1
,
k
p_e^{i+1,k}
pei+1,k:
- 在先前帧 M e i M_e^i Mei 中找到最近的两个边缘特征点 p e i , u , p e i , v p_e^{i,u}, p_e^{i,v} pei,u,pei,v,这些点形成一条线。
- 计算当前边缘点 p e i + 1 , k p_e^{i+1,k} pei+1,k 到这条线的距离。
- 对于每个平面特征
p
p
i
+
1
,
k
p_p^{i+1,k}
ppi+1,k:
- 在先前帧 M p i M_p^i Mpi中找到最近的三个平面特征点 p p i , u , p p i , v , p p i , w p_p^{i,u}, p_p^{i,v}, p_p^{i,w} ppi,u,ppi,v,ppi,w,这些点形成一个平面。
- 计算当前平面点 p p i + 1 , k p_p^{i+1,k} ppi+1,k到这个平面的距离。
4. 计算误差:
- 对于边缘特征,误差公式为:
d e k = ( p e i + 1 , k − p e i , u ) × ( p e i + 1 , k − p e i , v ) p e i , u − p e i , v d_e^k = \frac{(p_e^{i+1,k} - p_e^{i,u}) \times (p_e^{i+1,k} - p_e^{i,v})}{p_e^{i,u} - p_e^{i,v}} dek=pei,u−pei,v(pei+1,k−pei,u)×(pei+1,k−pei,v) - 对于平面特征,误差公式为:
d p k = ( p p i + 1 , k − p p i , u ) ( ( p p i , u − p p i , v ) × ( p p i , u − p p i , w ) ) ( p p i , u − p p i , v ) × ( p p i , u − p p i , w ) d_p^k = \frac{(p_p^{i+1,k} - p_p^{i,u}) ((p_p^{i,u} - p_p^{i,v}) \times (p_p^{i,u} - p_p^{i,w}))}{(p_p^{i,u} - p_p^{i,v}) \times (p_p^{i,u} - p_p^{i,w})} dpk=(ppi,u−ppi,v)×(ppi,u−ppi,w)(ppi+1,k−ppi,u)((ppi,u−ppi,v)×(ppi,u−ppi,w))
5. 优化位姿:
- 使用高斯-牛顿法最小化总误差:
min T i + 1 ∑ p e i + 1 , k ∈ F e i + 1 d e k + ∑ p p i + 1 , k ∈ F p i + 1 d p k \min_{T_{i+1}} \sum_{p_e^{i+1,k} \in F_e^{i+1}} d_e^k + \sum_{p_p^{i+1,k} \in F_p^{i+1}} d_p^k Ti+1minpei+1,k∈Fei+1∑dek+ppi+1,k∈Fpi+1∑dpk - 优化后的 T i + 1 T_{i+1} Ti+1是最终的位姿变换。
5. 伪代码
# 输入:当前帧点云 P_i+1,上一帧的边缘特征 M_e^i 和平面特征 M_p^i,初始位姿估计 T_i+1
# 输出:优化后的位姿变换 T_i+1
def scan_matching(P_i+1, M_e^i, M_p^i, T_initial):
# Step 1: 初始位姿估计
T_i+1 = T_initial
# Step 2: 特征提取
F_e_i+1, F_p_i+1 = extract_features(P_i+1)
# Step 3: 迭代优化
for iteration in range(max_iterations):
edge_errors = []
plane_errors = []
# Step 4: 边缘特征匹配与误差计算
for p_e_i+1_k in F_e_i+1:
# 在 M_e^i 中找到最近的两个点 p_e_i_u, p_e_i_v
p_e_i_u, p_e_i_v = find_nearest_edge_points(p_e_i+1_k, M_e^i)
# 计算边缘误差
d_e_k = calculate_edge_error(p_e_i+1_k, p_e_i_u, p_e_i_v)
edge_errors.append(d_e_k)
# Step 5: 平面特征匹配与误差计算
for p_p_i+1_k in F_p_i+1:
# 在 M_p^i 中找到最近的三个点 p_p_i_u, p_p_i_v, p_p_i_w
p_p_i_u, p_p_i_v, p_p_i_w = find_nearest_plane_points(p_p_i+1_k, M_p^i)
# 计算平面误差
d_p_k = calculate_plane_error(p_p_i+1_k, p_p_i_u, p_p_i_v, p_p_i_w)
plane_errors.append(d_p_k)
# Step 6: 优化位姿
total_error = sum(edge_errors) + sum(plane_errors)
T_i+1 = optimize_pose(T_i+1, total_error)
# 检查收敛条件
if check_convergence(total_error):
break
return T_i+1
6. 总结
LOAM中的扫描匹配主要通过将当前帧的特征(边缘和平面)与之前构建的特征地图进行匹配,并通过最小化点到线或点到面的距离来优化位姿变换。优化过程中使用高斯-牛顿法来求解最优变换,并且通过迭代收敛以提高精度。
D. GPS Factor
虽然我们可以通过仅使用 IMU 预积分和激光雷达里程计因子来获得可靠的状态估计和映射,但系统在长时间导航任务期间仍然会出现漂移。为了解决这个问题,我们可以引入提供绝对测量以消除漂移的传感器。这样的传感器包括高度计、指南针和 GPS。为了便于说明,我们讨论 GPS,因为它在现实世界的导航系统中被广泛使用。当我们收到 GPS 测量值时,我们首先使用 [21] 中提出的方法将它们转换为局部笛卡尔坐标系。在因子图中添加新节点后,将新的 GPS 因子与此节点关联。如果 GPS 信号与激光雷达帧不硬件同步,我们将根据激光雷达帧的时间戳在 GPS 测量值之间进行线性插值。我们注意到,当 GPS 接收可用时不断添加 GPS 因子是没有必要的,因为激光雷达惯性里程计的漂移增长非常缓慢。实际上,仅当估计的位置协方差大于接收到的 GPS 位置协方差时才添加 GPS 因子。
E. Loop Closure Factor
由于使用了因子图,与 LOAM 和 LIOM 不同,环路闭合也可以无缝地整合到所提出的系统中。为了说明起见,我们描述并实现了一种简单但有效的基于欧几里得距离的环路闭合检测方法。我们还注意到,我们提出的框架与其他环路闭合检测方法兼容,例如 [22] 和 [23],它们生成点云描述符并将其用于位置识别。
当新状态
x
i
+
1
x_{i+1}
xi+1 添加到因子图时,首先搜索该图并找到欧几里得空间中接近
x
i
+
1
x_{i+1}
xi+1的先前状态。例如,如图 1 ,
x
3
x_3
x3是返回的候选之一。然后尝试使用扫描匹配将
F
i
+
1
F_{i+1}
Fi+1与子关键帧
{
F
3
−
m
,
.
.
.
,
F
3
,
.
.
.
,
F
3
+
m
}
\{F_{3-m}, ..., F_3, ..., F_{3+m}\}
{F3−m,...,F3,...,F3+m}匹配。请注意,
F
i
+
1
F_{i+1}
Fi+1 和过去的子关键帧首先在扫描匹配之前转换到 W系下。我们获得相对变换
Δ
T
3
,
i
+
1
\Delta T_{3,i+1}
ΔT3,i+1 并将其作为闭环因子添加到图中。在本文中,我们选择索引 m 为 12(回环维护关键帧集合大小24),并将闭环的搜索距离设置为 15 米,从新状态
x
i
+
1
x_{i+1}
xi+1 开始。
在实践中,我们发现,当 GPS 是唯一可用的绝对传感器时,添加闭环因子对于校正机器人高度的漂移特别有用。这是因为 GPS 的海拔测量非常不准确——在我们的测试中,在没有闭环的情况下,高度误差接近 100 米。
5. EXPERIMENTS(性能总结)
- GPS 和环路闭合的效果测试:
- LIO-odom:仅使用 IMU 预积分和激光雷达里程计因子,没有 GPS 和环路闭合时轨迹出现明显漂移。
- LIO-GPS:使用 GPS 因子来纠正漂移,在部分区域有效,但由于 GPS 数据不连续,后半段无法闭环。
- LIO-SAM:使用所有可用因子(IMU、激光雷达、GPS、环路闭合),通过闭环因子消除漂移,与 Google Earth 对齐良好。
- 公园数据集:
- LIO-SAM:使用环路闭合因子消除漂移,解决了 LIO-GPS 由于高度漂移无法闭环的问题。
- LOAM、LIOM、LIO-odom:无绝对校正时发生显著漂移。
- 阿姆斯特丹数据集:
- 测试环境有桥梁和建筑遮挡、特征稀疏、激光雷达误检和 GPS 接收不连续,导致 LOAM、LIOM、LIO-odom 均未能产生有意义结果。
- LIO-SAM:依靠环路闭合因子,有效消除漂移。
- 运行时间与性能:
- LIO-SAM:比 LOAM 和 LIO-GPS 运行时间少,适合实时和低功耗系统。
- 能够以比实时快 13 倍的速度处理数据,特征图密度对运行时间影响较大,因子图规模影响较小。
- 总体结论:LIO-SAM 的运行性能优异,特别适合在 GPS 信号不稳定和特征稀疏的场景中使用。