开源的一篇基于事件相机的实时SLAM论文,记录一下文章要点
摘要
由于事件相机的特性,该算法不受运动模糊影响,而且在光照变化强烈的高动态情况下表现很好。通过并行结合image-to-model的跟踪和3D重建来实现这个算法,并且输出结果可用来重建intensity images。
引言
- 介绍事件相机原理 <x,y,t,p>
- 介绍事件相机优势:低延迟(microseconds),鲁棒(HDR环境下),高效(低功耗,低带宽,低冗余信息)
- 在仅依靠事件相机实现跟踪和建图的目标上,列举了近年来的一些研究,与Kim运行在GPU的工作相比,本文不需要image intensity,防止了这部分带来的误差,而且可实时运行在CPU上。
研究现状
在三个维度上该目标被逐步解决:
- dimensionality of the problem: localization -> tracking and mapping
- type of motion: rotational or planar(3-DOF) -> freely moving camera(6-DOF)
- type of scene: artificial scenes -> natural scenes
Method
EVO包含两个交错运行的跟踪和建图模块,跟踪模块在3D地图已知的条件下,通过事件流估计相机位姿,建图模块在位姿给定下通过新获取的事件信息来构建地图。
-
位姿跟踪 Pose Tracking
跟踪模块主要核心是image-to-model alignment, 在之前的基于图像帧的直接法VO中,将新来的图像通过3D刚体模型与关键帧配准,通过优化光度误差来获取相机位姿。本文中采取类似方法,去优化两个边缘信息图片的几何对齐误差,如式(1),两个图片配准过程如图3:其中 event image I是由一些事件信息累积的边缘信息图, M是已知相机位姿下的半稠密地图。
∑ u ( M ( W ( u ; Δ T ) ) − I ( W ( u : T ) ) ) 2 (1) \sum_u(M(W(u;\Delta T)) -I(W(u:T)))^2 \tag1 u∑(M(W(u;ΔT))−I(W(u:T)))2(1)
通过inverse compositional LK方法累迭代计算 Δ T \Delta T ΔT来最小化式(1),其中W是更新从M所在图像帧到图像I的刚体变换:
T ← T ⋅ ( Δ T ) − 1 (2) T \gets T \cdot (\Delta T) ^ {-1} \tag2 T←T⋅(ΔT)−1(2)
W被定义为
W ( u ; T ) : = π ( T ⋅ π − 1 ( u , d u ) ) (3) W(u;T):=\pi(T\cdot\pi^{-1}(u, d_{u})) \tag3 W(u;T):=π(T⋅π−1(u,du))(3)
u是M的图像平面上的一点,T是刚体变换, π \pi π和 π − 1 \pi^{-1} π−1是相机投影和反投影, d u d_u du是u的深度值,式1则是计算所有的候选点,使用李群李代数表示变换。
The inverse compositional LK方法相对其他LK方法具有更低的计算复杂度,可以在迭代时提前计算矩阵的导数,且计算结果可复用。 -
建图 Mapping
EVO的建图主要是基于Event-based Multi-View Stereo(EMVS),是基于单独事件相机3D重建的纯几何方法,主要思想如图4(a)所示:事件信息反投影的射线会容易集中在3D边缘区域。EMVS通过DSI空间来统计每个网格中与voxel相交的射线数目(图4b)。
DSI的极值位置通过两步提取转化为点云:
(1) DSI(图5a)可生成一个深度图和一个2D置信地图(图5b);
(2) 置信地图通过自适应阈值来生成一个半稠密地图(图5c),并最终转化为点云(图5d)。
-
Parallel Tracking and Mapping
采用基于关键帧的方法,当上一个关键帧的距离与场景平均深度的比值达到15%,则插入一个关键帧。关键帧的创建会引起相关局部地图的创建,mapping thread会处理"Reset DSI",此时tracking thread仍在跟踪之前的地图,需要尽快切换到新地图,其他时候则是使用新的事件信息更新DSI,即图2所示的"Update DSI"。 -
Bootstrapping
通过假设传感器平行于平面场景,先运行pose tracker再计算初始化地图,方法虽然简单但是有效。 -
Intensity Image Reconstruction
EVO本身不需要进行intensity image的重建,但是EVO的结果可以用来做这个。由于事件相机的性质,重建的intensity image具有高分辨率和高动态范围的性质,而且不受动态模糊的影响。
IMPLEMENTATION DETAILS 实验细节
- Pose Tracking
(1) 3D地图投影产生的图片M使用高斯滤波平滑,event image I使用当前3D地图点数量的70%来累积;
(2) 优化代价函数时,在每次循环时只使用部分候选点u代替全部点,每个batch size大概300-500个像素点,一张图需要20-30 batches。另外由于事件相机连续两张图片在时间上十分接近,位移变化很小,所以不使用coarse-to-fine的对齐方法,只用在更大的图像运动之间。 - Mapping
(1)为了对远处物体建图,使用逆深度的深度平面均匀分割DSI空间,通常使用50个深度平面,其他情况则根据深度范围再确定。
(2) 使用median filter 和 radius filter
EXPERIMENTS 实验
在具有挑战性的序列上,对EVO的精确性进行了定量和定性的分析,结果展示了可靠的精准的位姿跟踪,甚至在普通相机失败的场景下。
-
Accuracy Evaluation
使用了两个序列用来说明EVO的鲁棒性和准确性,第一个是在办公场景下快速具体的运动,具有single-keframe性质(图6a),第二个则是multi-keyframe的轨迹(图6b),对地面有图案的箱子进行拍摄,两个场景都有开关灯的剧烈光照变化。
(1) Single-keyframe trajectory:如图7所示,虚线区域表示开关灯,蓝色线是估计的轨迹值,红色线是真值,灰色区域重点展示在剧烈变化时z和yaw值的跟踪状态。在整个过程中,EVO展现了高准确度(在35m轨迹中,平均2°旋转误差和2cm位移误差,0.057%的相对位置误差)
(2) Multi-keyframe trajectory:
EVO在整个过程中准确性十分棒,如图8,9(在30m轨迹中,平均3°旋转误差和6cm位移误差,0.2%的相对位置误差),而且没有进行任何地图或者姿态优化。
-
Computational Performance
因为事件相机响应场景中的视觉变化,事件的输出速率不是一个常量,而是依据场景的明显变化,纹理的数量,传感器参数而改变。下表二展现了在书桌场景中,事件速率和EVO性能分别在和高速运动下的表现。 在一个标准笔记本上(Intel Core i7-4810MQ CPU @2.80GHz),EVO平均每秒处理150万个事件,可以达到以适当的速度下实时处理序列。并将RTF定义为每分钟处理的事件数量与事件速率的比值(比值大于1,则说明算法处理速度比实时运行更快)。可从表中看出,在通常的速度下,EVO处理比实时快1.25-3倍,最差的高速运动下,比实时慢3倍。
-
Experiments in Outdoor Environment
(1) Outdoor sequence with aggressive motion:如图11所示,在室外场景中,左图是DAVIS的图片,右图是EVO输出结果构建的图片,没有过爆和欠爆发生。
(2) Outdoor sequence, pointing at the sun: 为了显示EVO的潜力,对比了在日光前的道路信号牌的跟踪效果,结果表明EVO可以在高动态范围下仍可以跟踪成功。
-
Discussion
本方法可以在自然场景中只使用事件相机来估计深度和6-DOF运动,相对对于普通相机,EVO结果十分准确,甚至在极具挑战性的环境中(剧烈运动,突然的光照变化,高动态场景),而且它足够轻量,可以在计算受限的平台上实时运行。 另外过程中依靠纯几何的方法,不需要intensity reconstruction,消除了一个错误来源并加快了地图收敛。
EVO不像传统VO系统,没有在跟踪建图时直接解决数据关联问题,而是在跟踪上间接解决:
(1) 通过累积事件信息创建边缘图片
(2)借用了光度图像对齐的隐式pixel-to-pixel的数据关联
(3)随机抽样使表示稀疏化
尽管地图收敛速度较快(2百万事件信息,对应1-4s),与跟踪相比较慢,需要在multiple-keyframes场景中限制VO部分的速度,对很多应用来说这不是个问题。CONCLUSIONS
EVO充分展示了事件相机的优势,仅通过事件流中的几何信息就可以精准地计算相机的位姿(≤ 0.2 % position error and ≤3° orientation error),并构建半稠密地图。这个方法可以在普通笔记本电脑CPU上实时运行,甚至减少部分准确度,可以在移动平台上MAVs上运行。