Abstract
这个是一篇关于视觉雷达里程计融合的文章。使用视觉slam来为激光SLAM提供一个初始的位姿来参与优化,可以得到一个更好的性能。利用ORBSLAM2和ALOAM结合来实现的。
I. INTRODUCTION
大多数的情况下,激光SLAM 是优于视觉SLAM的。
视觉惯性SLAM一共有三种类型:
1、雷达协助视觉SLAM:利用雷达来增强视觉特征点的深度。
2、视觉协助雷达SLAM:利用视觉来进行回环检测和识别地图纹理。
3、视觉与雷达融合SLAM:分为紧耦合和松耦合
对于历史雷达来增强视觉特征点的深度难点:在雷达特征点比较稀疏的情况下,图像特征点深度的增强会没有那么容易实现。
这篇文章的主要贡献:
1、是一个视觉雷达紧耦合SLAM。解决LOAM退化场景的问题。
2、一个新的尺度矫正算法。不需要增强视觉特征点的深度,保证了视觉里程计的输出不会有很大的尺度偏移。
II. RELATED WORK
A. LiDAR-assisted Visual SLAM
深度增强方法:
方法一:雷达的深度直接应用到特征点中,惊醒特征点的深度增强。(这里不是很懂,怎么匹配?)
方法二:雷达的数据投影到图片上面去。然后利用重投影误差来计算位姿。这个方法没有优于特征点的深度增强而导致的误差,但是需要精确地计算相机和雷达之间的外参。
回环检测协助:
视觉的容易受到光照的影响,所以可以使用雷达的描述子来协助减少光照的影响。方法:雷达一个特征点生成一个三个描述子,然后利用双目相机的特征点也生成一个三份的描述子,然后将他们之间相匹配。
B. Vision-LiDAR Coupled SLAM
松耦合:系统构造简单,精度高,但是鲁棒性没有那么强。
紧耦合:由于参加了状态估计,所以鲁棒性会更强。
III. METHODOLOGY
A. System Overview
主要分为三个部分:
1、单目视觉里程计VO,利用光流法和对极几何计算位姿,然后用其定义的culling算法去除outliter。
2、将雷达数据和图片进行对其,然后利用雷达的深度进行尺度因子的初始化。
3、最后将里程计的位姿传给雷达里程计作为初始位姿进行mapping。
B. Scale Corrector: Keypoint Extraction
1) Projection and Matching:
利用下面公式进行图片和激光点云特征之间的匹配。
x
j
i
−
1
=
1
d
j
i
−
1
K
T
L
C
p
j
i
−
1
x_{j}^{i-1} = \frac{1}{d_{j}^{i-1}}KT_{L}^{C}p_{j}^{i-1}
xji−1=dji−11KTLCpji−1
2) Culling:
(这一段的理解可能有误)
在提取了光流点之后,因为很多的点不是FAST角点,所以进行估计位姿需要进行剔出outliter。
我的理解中剔出的方法是用下面的方法进行RANSAC操作,但是文中并没有说这个是一个RANSAC操作。。。
分为以下几步:
1、随机抽取几点进行一个对极几何,利用本质矩阵求解出两帧之间的位姿。
(
x
j
i
)
T
K
−
T
(
t
C
i
−
1
C
i
)
☓
R
C
i
−
1
C
i
K
−
1
x
j
i
−
1
=
0
(x_j^i)^TK^{-T}(t^{C_i}_{C_{i-1}})☓R^{C_i}_{C_{i-1}}K^{-1}x^{i-1}_{j} = 0
(xji)TK−T(tCi−1Ci)☓RCi−1CiK−1xji−1=0
2、利用两个条件剔出掉不符合的特征点 :
1)点到极线的距离
2)特征点梯度与极线之间的夹角
经过多次的迭代(RANSAC)最后得到一个收敛值位姿与剩下的inliter特征点。
3) Scale Calculation:
利用特征点三角化之后深度与雷达投影的深度进行得到一个比例关系,进行尺度因子的初始化。
s
j
i
−
1
=
d
j
i
−
1
v
j
i
−
1
s^{i-1}_{j} = \frac{d_{j}^{i-1}}{v^{i-1}_{j}}
sji−1=vji−1dji−1
特征点 v是三角化之后的深度。
求出的多个尺度因子s,则使用RANSAC进行筛选outliter点。
C. Scale Corrector: Scale Correction
这篇文章中去除掉了就换检测,反而使用雷达和图片之间的投影关系,来实现误差的纠正。
当 ∣ s c a l e − 1 ∣ > 2 |scale - 1|> 2 ∣scale−1∣>2% 的时候,就会触发一次local BA,来进行修复误差。这个scale是进行了初始化之后的scale大小(初始化之后尺度就确定了)。