摘要
本篇论文利用单目相机采用直接的视觉slam携带稀疏的激光雷达测到的点云深度构建了一个激光视觉的slam系统.
- 基于滑窗的跟踪方法
- 严格的位姿边缘化来得到精准的位姿图slam
- 带有深度的图象帧匹配得到大场景下的建图
贡献
- 我们提出了只要稀疏深度信息的视觉SLAM,运动估计时不利用视觉特征来克服雷达的稀疏性
- 利用基于滑窗的优化方法克服不同传感器的视场角不一样的问题,当进行位姿图优化时,我们严格的边缘化滑窗中的pose
- 为了解决在大场景中建图一致性,我们利基于关键帧的闭环约束
相关工作
单目相机的表现取决于初始化好坏,在估计全深度的地图和运动的时候需要GPU.
- DEMO是紧耦合的激光雷达和视觉系统,利用视觉里程计和跟踪视觉特征点,深度值可以得的时候,把特征和深度值做数据关联
算法概述
提出的方法包含基于跟踪的视觉里程计,一个闭环检测模块和位姿优化模块.
输入的图象帧包含已经同步的相机图片和激光雷达的点云,提出的方需要前端来约束位姿图,在后端进行优化,前端包含一个视觉里程计模块和基于appearance的场景重识别.
- tracking:利用滑窗优化进行位姿估计,输入的是单目图和激光雷达的点.多尺度图像金字塔和基于恒定运动模型的初始化被应用于跟踪过程.
- 窗口优化:一旦成功的跟踪,图象帧会被加入到滑窗中,边缘化掉旧的帧.然后窗口优化来优化窗口中的帧,这样的基于窗口的优化方法允许跟踪过程有一定的误差
- 闭环检测:前端的最后一个组件是场景重识模块,他是基于关键帧的.如果确认为有效的,则从相邻帧中合并深度信息以执行两视图匹配。
- 后端优化:优化的是位姿图,利用g2o
深度加强的直接视觉里程计
记号
一个图象帧提供一个RGB图像和一个稀疏的点云P_i,每个点被投影到图象帧上生成一个像素点(u,v),利用变换矩阵记录位姿和转换点云,利用李代数和李群来更新变换矩阵.
帧管理
帧生成
为了利用雷达的深度信息,两个传感器的时间同步性需要解决.,我们选择最近的时间戳的图像和雷达信息融合,即把雷达的点云投影到相机坐标系中(类似lego-loam中的range-image)
关键帧管理
- 跟踪成功时,将使用可投影点的比率来创建新的关键帧。 由于LiDAR和摄像机的FOV是固定的并且已知,因此两个视点之间的点投影可以轻松确定关键帧创建事件。我们仅将比率小于某一阈值的帧注册为关键帧。
- 当利用重叠比时,当运动比较小,光照变换的时候会有问题,为了解决这个问题我们在一定的时间间隔后才能保证鲁棒和光照变化
关键帧边缘
为了保持一定的关键帧,构建位姿图,我们需要边缘化滑窗中旧的关键帧,当新的关键帧生成的时候就需要执行这个操作:
- 我们始终至少保留两个关键帧。 如果创建了一个新的关键帧(例如,当最近帧中的可见点比率小于阈值时),则该关键帧将被插入到关键帧窗口中。
- 当关键帧的数量超过一定阈值的时候,对最老帧执行边缘化.不像利用单个相机把landmarks作为状态,这个论文的雷达点是没有被定义为状态的.我们然后执行迭代的优化利用剩余的高斯块.
扫描点管理
为了在保持运动估计精度的同时降低计算复杂度,该方法在帧中利用了分布均匀的点采样策略。 为了提取采样点,我们从2度乘2度的空间仓中均匀采样LiDAR数据。 然后,我们选择每个点集中具有最大梯度的点作为活动点。 因为点只是简单地用间隔隔开,所以低梯度区域中的点也可以被激活。
C.tracking
优化光度误差,计算量大,但是鲁棒性高.m帧中的点利用初始的旋转矩阵投影到当前帧,灰度的残差定义为:
r
(
p
m
)
=
Γ
n
(
π
(
T
m
n
p
m
)
−
Γ
m
(
p
m
)
r(p_m) = \varGamma_n(\pi(T_{m}^np_m) - \varGamma_m(p_m)
r(pm)=Γn(π(Tmnpm)−Γm(pm)
最后定义物体的跟踪方程:
E
t
r
a
c
k
=
∑
p
∈
Ω
w
(
r
(
p
)
)
(
r
(
p
)
)
2
E_{track} = \sum_{p\isin\Omega}w(r(p))(r(p))^2
Etrack=p∈Ω∑w(r(p))(r(p))2
这里
Ω
\Omega
Ω是图像块,w是基于t分布的权重矩阵:
w
(
r
)
=
v
+
1
v
+
r
σ
r
2
w(r) = \frac{v+1}{v+\frac{r}{\sigma_r}^2}
w(r)=v+σrr2v+1
这里v是自由度被设置生5,$\sigma_r$
是方差,现在,我们使用从粗到细的方案来防止局部极小值的优化并处理大位移。
D 基于滑窗的优化
当新的关键帧加入的时候会边缘化老的帧,然后执行batch的优化.局部优化在一定的区域克服了缺少深度测量的弊端,在精度和速度上取得了双赢,保存的帧的数量是5到10帧.在滑窗中的每个关键帧和他的特征点和位姿关联,利用滑窗的共视关系图把每个点投影到所有帧.这就会产生一个位姿图,我们只在关键帧的位姿执行优化,所有的滑中关键帧的光度误差被定义在一个patch上:
E
w
i
n
=
∑
ϝ
i
∈
W
ϝ
∑
p
k
∈
P
i
∑
p
k
∈
Ω
ω
(
r
(
p
k
)
)
(
r
(
p
k
)
)
2
E_{win}=\sum_{\digamma_i\isin W_\digamma}\sum_{p_k \isin P_i}\sum_{p_k \isin \Omega}\omega(r(p_k))(r(p_k))^2
Ewin=ϝi∈Wϝ∑pk∈Pi∑pk∈Ω∑ω(r(pk))(r(pk))2
和tracking线程的代价函数最大的不同是这里反映了所有关键帧的误差,我们在这里用了t分布的权重函数.
E.闭环检测
视觉里程计提供了一个位姿可以执行边缘化,我们把所有位姿的加入到一个优化的节点来产生一个从雷达来的共视点.一旦一个关键帧被边缘化了,我们检测Orented FAST和orb特征点以及描述子,然后我们利用词袋模型,为了防止假阳性的结果,我们利用当前帧和相邻帧的相似度得分来作为闭环候选帧的评测标准.
得到候选帧后我们分别得到当前帧到候选帧和候选帧到当前帧的位姿估计,而且因为这两帧都有激光雷达得到的深度信息,所以我们可以独立的计算这两个位姿,只有当得到显著的一致性的时候我们才把他当做闭环帧加入到地图中.我们将动态协方差缩放(DCS)应用于闭环的边以应对不可靠的约束
结果
实验利用30hz,fov为90度的单目相机,激光雷达为VLP16.在kitti数据上达到了0.98%的精度.