【泡泡点云时空】Voxel Map:针对视觉SLAM的体素地图
泡泡点云时空,带你精读点云领域顶级会议文章
标题:Voxel Map for Visual SLAM
作者:Manasi Muglikar, Zichao Zhang and Davide Scaramuzza
来源:ICRA 2020
编译:王宇杰
审核:lionheart
欢迎个人转发朋友圈;其他机构或自媒体如需转载,后台留言申请授权
摘要
在现代视觉SLAM系统中,一种标准做法是从重叠的关键帧中检索潜在的候选路标点,以进行进一步的特征匹配或直接跟踪。在这项工作中,我们认为关键帧并不是此任务的最佳选择,这是因为它存在一些固有的局限性,例如较弱的几何推理和较差的可拓展性。我们提出了体素图的表示方法,以有效地检索视觉SLAM的路标点。特别是,我们将路标点组织在规则的体素网格中,并通过射线投射对照相机视锥进行采样,从而查询获得相机当前位姿下的可见路标点。以上方法可以通过使用有效的体素哈希方法保证在恒定时间内实现功能。与关键帧相比,使用我们的方法检索到的路标点在几何上保证落入相机的视场,同时遮挡点可以在一定程度上被识别出来并移除。这种方法自然也可以扩展到大型场景和复杂的多相机配置中。实验结果表明,我们的体素图表示与包含5个关键帧的关键帧地图一样有效,并且在EuRoC数据集上提供了更高的定位精度(RMSE平均提高了46%)。本文提出的的体素图表示可以作为视觉SLAM中的通用方法,并广泛应用。
主要贡献
本文重点探讨了视觉SLAM的地图表示方法。理想情况下,地图表示应满足以下要求:(i)关注场景的几何形状,并且(ii)具有高效的计算和内存管理方案。图1显示了不同的地图表示在这两个方面的表现,我们比较了基于稀疏关键帧的地图表示的有效性。但是,理想的地图表示应允许更好的几何推理,从而带来更高的准确性,同时在效率方面与基于关键帧的方法相当,即图1 的右上角。
常见的方法是基于关键帧的地图表征,我们的方法有以下优势:
1)在几何推理上,基于关键帧的方法是通过共视的路标点来实现帧间的数据关联,但是不能保证重叠关键帧中的任意点都将落在当前帧的视锥中,如下图。而我们的基于射线投射方法返回的3D点可以保证都是落在相机FoV中的,同时一旦在较近的体素已经采样到足够多的3D点,我们就可以停止检查更远的体素,从而能够在一定程度上推理出遮挡情况。
上图展示了相同位姿(紫色三角形)下基于关键帧和体素的地图表征的路标点查询结果。蓝色:地图中的所有点;红色:从重叠的关键帧中查询的路标点;绿色:从本文提出的基于体素的地图表征下查询的路标点;灰色:基于射线投射查询到的采样点。
2)效率上,基于关键帧的方法随着关键帧数量的增加,查询时间会越来越长,而且针对多相机的设定,保留每个相机的关键帧会造成很大的冗余。而我们的方法只关注固定大小的空间区域(即相机的视锥),且可以拓展到多相机以及更通用的视觉SLAM环境中。
综上,我们认为使用关键帧并不是在跟踪过程中实现数据关联的最佳方法(尽管人们倾向于在其他的任务使用它,如BA和点检索)。据我们所知,这是旨在将基于体素的地图表示法融入稀疏SLAM系统的第一个工作,而且作为一个通用的方法可以成为各种SLAM系统的组成模块。
针对SLAM的体素哈希方法
本文提出的基于体素的地图表示是基于Nießner等人的“Real-time 3d reconstruction at scale using voxel hashing”工作,其中它将地图存储为哈希表,如下图所示。
以下为查询当前帧中可能可见的3D点方法(本质上与获取落入相机FoV中的所有点相同):
1、图像平面采样和射线投射:我们首先从图像平面上的规则网格中采样像素。然后,我们将这些采样像素反投影到3D空间中的方位向量,从而产生r个射线{Ri}。这些射线本质上是对相机FoV的采样。
2、射线采样:对于每个射线Ri,我们从Dmin到Dmax的深度范围采样s个点{Sji}。
3、3D点查询:在SLAM中,当我们查询3D点时通常具有当前相机位姿的先验(例如,上一帧相机位姿或依靠IMU)。有了这个先验,我们可以将上述采样点转换为世界坐标系,并使用体素哈希的方法查询这些采样点的体素。
前两个步骤(如左下图所示)实际上是在给定的距离范围内离散化了相机的视锥。由于离散化是在相机坐标系中完成的,因此只需要计算一次(可能是离线操作)。我们方法的时间复杂度是O(r·s),r表示射线个数,s表示每个射线里采样的点数。由于r和s与地图大小无关,因此即使地图增长,查询时间也保持恒定。相反,基于关键帧的地图的地图查询时间为O(k),其中k是关键帧的数量,并随地图大小而增加。
此外,我们要强调的是,每条射线的采样顺序是从最近的体素到最远的体素。这样,在查询沿每条射线的地图时,我们仅返回第一个出现的体素,从而避免了沿同一条射线被遮挡的体素,如右上图所示。
请注意,由于基于关键帧的BA对于优化地图仍然是必需的,因此我们不会完全放弃关键帧。
主要结果
地图尺寸增加时查询地图所用时间的比较
在有遮挡物5a的情况下测试地图查询的仿真环境俯视图。该地图由长长的U形走廊组成。地图中的墙壁的颜色跟相机的距离有关,红色距离较远,绿色距离较近,蓝色在FoV之外。相机在改变观看方向的同时沿着轨迹(黑色)移动。图5b展示了使用关键帧图的3D点查询。图5c展示了使用体素地图的3D点查询。
理想情况下,平面上较远距离的点(即红色点)应被较近的点(即绿色点)遮挡。基于关键帧的查询方法由于无法判断遮挡所以仍显示了红色点(图5b);而我们的方法由于采用了射线投射的查询方案,能够识别出同一条射线中被遮挡的更远的点(图5c)。
EuRoC数据集中测试序列的RMSE(m)原始误差。粗体字是列中的最佳值,带下划线的是次佳值。基于体素地图的方法,蓝色表示其性能优于KF5方法,红色表示性能最差。
每帧的平均总时间(毫秒)。粗体字是列中的最佳值,带下划线的是次佳值。
体素大小对MH 01序列的RMSE的影响。粗体值表示列中的最低值,带下划线的是次佳值。
Abstract
In modern visual SLAM systems, it is a standard practice to retrieve potential candidate map points from overlapping keyframes for further feature matching or direct tracking. In this work, we argue that keyframes are not the optimal choice for this task, due to several inherent limitations, such as weak geometric reasoning and poor scalability. We propose a voxel-map representation to efficiently retrieve map points for visual SLAM. In particular, we organize the map points in a regular voxel grid. Visible points from a camera pose are queried by sampling the camera frustum in a raycasting manner, which can be done in constant time using an efficient voxel hashing method. Compared with keyframes, the retrieved points using our method are geometrically guaranteed to fall in the camera field-of-view, and occluded points can be identified and removed to a certain extend. This method also naturally scales up to large scenes and complicated multi-camera configurations. Experimental results show that our voxel map representation is as efficient as a keyframe map with 5 keyframes and provides significantly higher localization accuracy (average 46% improvement in RMSE) on the EuRoC dataset. The proposed voxel-map representation is a general approach to a fundamental functionality in visual SLAM and widely applicable.
如果你对本文感兴趣,想要下载完整文章进行阅读,可以关注【泡泡机器人SLAM】公众号。
欢迎来到泡泡论坛,这里有大牛为你解答关于SLAM的任何疑惑。
有想问的问题,或者想刷帖回答问题,泡泡论坛欢迎你!
泡泡网站:www.paopaorobot.org
泡泡论坛:http://paopaorobot.org/bbs/