标题:maplab: An Open Framework for Research in Visual-inertial Mapping and Localization
作者:Thomas Schneider, Marcin Dymczyk, Marius Fehr,
Kevin Egger, Simon Lynen, Igor Gilitschenski, Roland Siegwart
译者信息:
姓名:肖麟慧
单位:中国科学院电子学研究所
研究领域:SLAM,计算机视觉,机器人
联系方式:linhui.xiao@foxmail.com
欢迎个人转发朋友圈;其他机构或自媒体如需转载,后台留言申请授权
【译者按:
Maplab框架是ETHZ ASL实验室的成果,它具有集成度较高,灵活性较强的特点,自2017年11月底发布以来,备受SLAM领域关注。但目前国内对这一框架的研究偏少,现整理一篇maplab完整翻译稿,以便研究使用。为避免中文专业词汇的界定,翻译稿相关英文专业词汇在括号中标注】
摘要:
鲁棒性(Robust)和准确性(accurate)的视觉惯性估计对机器人当今的许多挑战至关重要。其能够对先验地图(prior map)进行定位(localize)并获得准确且无漂移的姿态估计,从而可以进一步推动这种系统的适用性。然而,目前大多数可用的解决方案都集中在单一场景用例上(a single session use-case),缺乏定位能力(localization capabilities)或端到端线程(end-to-end pipeline)。我们相信,只有一个完整的系统,结合最先进的算法,可扩展(scalable)的多场景(multi-session)建图工具,以及灵活的用户界面,可以成为一个有效的研究平台。
因此,我们提出了maplab,一个开放的,面向研究的(research-oriented)视觉-惯性建图框架,用于处理和操作多场景建图,用C++编写。一方面,maplab可以被视为一个现成的(ready-to-use)视觉惯性建图和定位系统。另一方面,maplab为研究界提供了一个包含地图合并、视觉-惯性批处理优化和闭环检测的多场景建图工具的集合。此外,它还包括一个在线前端,可以创建视觉惯性地图(visual-inertial maps),还可以在局部化地图内的做全局无漂移姿态跟踪。在本文中,我们提出了一个系统架构,五个用例,和公共数据集系统的系统评估。 maplab的源代码免费提供给机器人学术圈(robotics research community)进行研究。
I. INTRODUCTION 介绍
同歩定位和建图(SLAM)系统的不断增长给机器人界带来了新的挑战。无论在户外还是在室内,精确可用性、无漂移的姿态估计已经成为许多机器人应用(例如导航或操纵)的重要要求。视觉-惯性估计系统的日益普及对视角 (viewpoint)和外观变化(日光,天气,季节等)或快速运动的稳健性提供了强有力的动力。目前的研究工作致力于通过使用多样的工具(heterogeneous agents)收集数据,建立更大规模的地图,覆盖各种视觉外观条件,以及在更长的时间范围内维护地图(maintain maps)。研究这些和许多相关的挑战,需要一个多场景(multi-session)的端到端建图系统,可以很容易地部署在各种机器人平台上,并提供具有最先进性能的随时可用的算法。同时需要提供用于进行研究所需的高度灵活性。
大多数公开可用的视觉和视觉惯性SLAM的框架,或者专注于单一场景情况[1]([1]文指OKVIS框架, 2013),或者只提供大规模批量优化却没有在线前端的系统(online frontend)[2]( 2006)。通常,它们是针对特定的线程(specific pipeline)制作的,在地图结构和算法之间没有分离。他们往往缺乏完整性,不会提供完整的工作流程,比如一个地图能被生成、操作、和先前的地图融合,并在单个框架内的前端重新使用。这些系统损害了灵活性,这是快速开发(development)和研究的关键。
这项工作通过引入maplab 来解决这个问题,这是一个用C ++编写的开源视觉-惯性建图框架。与现有的视觉惯性SLAM系统相比,maplab不仅提供了从视觉惯性地图中生成地图和定位的工具,还提供了地图维护(map maintenance)和处理功能。这些功能是作为一套便利的控制台访问的工具提供的,可以通过插件系统轻松扩展。这些工具解决了多场景(multi-session merging),稀疏化(sparsification),闭环,稠密重建(dense reconstruction)和地图的可视化等问题。此外,maplab还包括基于ROVIOLI(ROVIO with Localization Integration),一个基于ROVIO的建图和定位前端[3],一个基于批处理(patch-based)的视觉惯性里程计系统。
Maplab已经过广泛的实地测试,并被部署在各种机器人平台上,包括微型飞行器[4],无人机[5,6],无人车[7],无人水下机器人[8]和步行机器人[9 ]。它还作为一个搜索平台用于地图概述(map summarization)[10-13],地图质量评估[14],多场景三维重建[15],拓扑建图[16],视觉定位[17-19]和分散建图[20]。
据我们所知,maplab是第一个在单个系统中集成了多种用例的可视化建图框架。Maplab是免费的,开源的,已经被证明对各种研究和工业项目有很大的用处。我们坚信,机器人社区将会利用它作为一个现成的(off-the-shelf)建图和定位解决方案,以及一个建图研究测试平台。这项工作的贡献可以概括如下:
1) 它介绍了一个通用的视觉惯性建图框架,使用基于特征地图和多场景支持;
2) 它引入了ROVIOLI,与定位系统紧耦合的鲁棒视觉惯性估测器;
3) 它提出用于修改和维护地图的算法和数据结构示例,包括地图融合,稀疏化,地点识别和可视化;
4) 它强调了系统的可扩展性,使其非常适合于研究;
5) 它提供了框架中组件(components)选定的评估。
II. RELATED WORK 相关的工作
有几个公开可用的视觉和视觉惯性SLAM系统。最早的例子之一就是PTAM [21],它是一种用于局部地图(local map)并行建图和寻迹(tracking)的轻量级方法。它最初是为增强现实应用开发的,因此它既不提供大规模定位,也不提供任何离线处理工具。最近的例子包括OKVIS [1],一种基于视觉惯性关键帧的估计器。这种方法从最近获取的关键帧中构建局部地图,其将局部漂移最小化。类似地,半稠密[22]和稠密[23]里程计框架通过使用光度误差公式(photometric error formulations)代替基于特征的匹配来实现高质量的姿态估计。但是,这些方法都不支持过往记录的地图全局定位(global localization)。
ORB-SLAM[24]和ORB-SLAM2[25]是基于视觉的框架,可以创建环境地图,然后在连续的场景中重复使用,这与我们在此提出的工作流程近似相关。与这些系统相比,maplab提供了一个以控制台用户界面为中心的离线处理工具包,该工具包保证了高度的灵活性,允许用户添加自己的扩展或修改处理线程。我们考虑将多个建图场景合并成一个单一的一致的地图,并使用视觉惯性最小二乘法优化来完善maplab的核心能力,以将其与ORB-SLAM区分开来。另一个值得强调的区别是maplab的在线前端ROVIOLI。即使在存在运动模糊的情况下,使用批处理中图像强度而不是点特征就可以保证高水平的鲁棒性[3]
合并处理多个地图的能力已经在SLAM研究界中引起了相当大的关注,它[26](2004)是最早将多个地图以混合度量-拓扑方法(hybrid metric-topological approach)结合到多场景建图中的作品之一。在[27]中提出了使用锚节点(anchor nodes)将多个建图场景(multiple mapping sessions)拼合成一个位姿图。试图建立地图之间的拓扑关联也在[28]中提出,其中地图被存储为一组经验 (experiences)。相反,maplab存储一个统一的局部地图,允许使用仔细选择的特征子集,例如,基于目前的外观条件[7]。
系统的目标是从大量无序图像集合重构3D结构 [2,29,30](29,SfM),也包含类似于maplab的功能。它们通常提供大规模集束调整优化(large-scale bundle adjustment optimization)和高级图像和特征匹配技术的高效实现。然而,他们缺乏处理惯性数据的算法,为了在线提供姿态估计,无法直接在机器人平台上运行。
III. THE MAPLAB FRAMEWORK MAPLAB框架
从使用者的角度来看,框架由两个主要部分组成:
I. 在线的(online)VIO和定位前端,ROVIOLI,采用原始的视觉惯性传感器数据。它输出(全局)位姿估计值,并且可以用来建立视觉惯性地图。
II.离线的(offline)maplab控制台(maplab-console),可让使用者以离线批处理方式在地图上应用各种算法。它也可以作为一个研究测试平台在视觉惯性数据上运行新算法。
maplab框架遵循可扩展和模块化设计。所有的软件组件都是以软件包的形式组织起来的,这些软件包使用ROS作为正式构建的系统并使用catkin构建的[31]。整个框架都使用C ++ 11标准,第三方依赖仅限于常用和维护良好的库(well-maintained libraries),其中包括用于线性代数的Eigen [32]和用于非线性优化的Ceres [33]。此外,该框架还提供了ROS接口,可以方便地输入原始传感器数据并输出结果,例如在机器人系统上轻松部署的位姿估计。该框架使用RViz作为三维可视化工具,以便可视化在线建图算法的状态以及从maplab控制台离线处理的结果。
A. Notation 符号
在整个这篇文档和源代码中,我们使用本节中定义的符号。变换矩阵采用一个矢量从参考帧到参考帧。它可以被分割成旋转矩阵和平移矢量 (translation vector),如下所示:
根据方程(1),操作符定义为在空间中平移一个矢量,从到,表示为。
B. Workflow for multi-session mapping and localization 多场景建图和定位的工作流程
对于在maplab系统中一个建图和定位的场景的典型工作流程如图2所示。通常,从多个建图场景构建单个定位地图是有许多优点的,以确保在覆盖的区域有一个好的空间和时间(spatial and temporal)优势(即不同外观)。首先,在VIO模式下使用ROVIOLI在每个场景中建立一个开环地图(open loop map)并存储到磁盘。 然后,地图可以使用各种(离线)工具(如环路闭合检测,视觉惯性优化或多个场景共同生成(co-registration)(地图合并))对地图进行细化(refined)。 使用大量不同的可视化,统计和查询,可以对地图进行详细检查。更高级的模块允许例如使用来自深度传感器或来自立体传感器的数据来创建环境的密集特征(dense representation)(TSDF,占用(occupancy)等)(TSDF,“截断有符号距离函数”(truncated signed distance function),KinectFusion使用的一种方法,译者注)。
图2:maplab中的典型工作流程:(a)在VIO模式下,ROVIOLI估计的一个关于(w.r.t. , with respect to, 关于)局部漂移帧的节点位姿; 另外根据这些估计建立地图。(b)可以将所得的地图加载到能应用的所有可用的算法的maplab控制台中,例如,地图校准(alignment)和融合,VI优化,闭环。(c)在LOC模式下,ROVIOLI可以加载更新的地图以在线追踪全局(无漂移)位姿。
然后,可以将生成的(多场景)地图导出为一个紧凑的局部地图,并在第二次访问同一地点时通过ROVIOLI(LOC模式)用于在线定位。持续的在线定位可以精确地跟踪一个全局位姿(w.r.t. 关于一个已知的三维结构),从而补偿(compensate)视觉惯性状态估计的漂移。
C. maplab console: the offline user interface. Maplab 控制台:离线使用者接口
maplab框架使用控制台用户界面进行离线地图操作。maplab可以同时将多个地图加载到控制台中,便于进行多场景建图实验。所有算法都可以通过控制台命令获得,并且可以应用于加载的地图。每个算法的具体参数由控制台标准(console flags)或标准文件(flag file)设置,并且可以在运行时修改。结合在RViz中地图的实时可视化,这极大地方便了算法的原型设计和参数调整。可以将多个算法结合起来并对整个处理线程进行实验。通过从磁盘保存和重新加载地图的中间状态,可以轻松地恢复更改。
控制台使用插件体系结构(更多在www.github.com/ethz-asl/maplab/wiki),并在运行时自动检测构建工作区内的所有可用插件。因此,可以在不改变核心包的情况下集成新的算法或功能是可能的。对于在标准的视觉惯性地图的数据类型上运行的算法(参见第III-D节),不需要接口工作。
D. Map structure 地图结构
该框架使用一个名为VI-map的数据结构,用于视觉惯性地图数据。VI图包含所有传感器的原始测量结果和已被覆盖环境的稀疏重建结构。每个地图可能包含多个任务(missions),每个任务都基于一个已记录的场景(session)。任务的核心结构是由顶点(vertices)和边(edges)组成的图形。一个顶点(vertex)对应于在某个时间点捕获的状态。它包含从(多)相机系统的状态估计(位姿,IMU偏差,速度)和视觉信息,包括关键点,描述子(BRISK [34]或FREAK [35]),跟踪信息和图像。一条边连接两个相邻的顶点。虽然在maplab中有几种不同类型的边,但最常见的类型是IMU边。它包含记录在边连接的顶点之间的惯性测量值。由多个顶点跟踪的视觉观察值被三角化为三维地标(3d landmarks)。地标本身存储在首先观察到的顶点内。环路闭合可能将一个任务的观测值与另一个任务中存储的地标联系起来。
图3:maplab和ROVIOLI中使用的坐标系::全局重力对齐地图坐标系; 所有的任务都固定在这个框架中。:重力对齐框架,代表任务k的起始点(origin),相当于VIO的起始点。:时间戳记为k(body frame,载体坐标系)的IMU坐标系。
图3说明了地图结构并介绍了相关的坐标系。使用一个变换,将每个任务固定在全局坐标系中。任务的位姿表示为w.r.t.与任务框架有关。因此,它能够操作变换将多个任务固定在单个全局坐标系中,而不需要更新任何顶点位姿或地标位置。
地图结构可以序列化为Google Protobuf格式,实现便携式文件序列化和网络传输。此外,可以使用资源管理系统将数据密集型对象(data-intensive objects)(如图像,密集重建等)附加到地图上。资源链接到一个顶点或一组任务或简单的时间戳,并存储在与主要建图数据分开的文件系统上。该体系结构允许(缓存)按需加载这些(可能较大的)对象,从而有效地减少峰值内存使用量。这有助于在密集重建和基于图像/增强定位等领域的大范围地图研究,否则可能会耗尽某些平台上的可用内存。
E. Core packages of maplab. Maplab核心包
maplab框架补充结合了几种最先进的算法。所有这些都可以从maplab控制台方便地访问。我们只简单地强调几个在我们看来能给机器人界带来特别价值的部分:
VIWLS:损耗项类似于文章[1]的视觉惯性加权最小二乘优化(visual-inertial weighted least-squares )。该框架的主要批量优化算法被用于改进地图,例如,在用ROVIOLI初始化之后或者在闭环建立之后。默认情况下,优化问题是使用视觉和惯性数据构建的,但也可以包括轮测距(wheel odometry),GPS测量或其他类型的位姿先验方法。
闭环回路/定位(Posegraph relaxation):一个基于二进制描述子的完整闭环回路和定位系统。搜索后端使用反向多索引(inverted multi-index)在投影二进制描述子上进行有效的近邻检索。该算法是[36]的(部分)实现。
ROVIOLI:在线视觉-惯性建图和定位前端,详见第III-F部分。
姿态松弛(Posegraph relaxation):使用闭环系统引入的边进行姿态图优化。该算法类似于[37]。可选地,可以使用Cauchy损失(Cauchy)来增加针对假环闭合的鲁棒性。
aslam cv2:计算机视觉数据结构和算法的集合。它包括各种相机和失真模型以及用于特征检测,提取,跟踪和几何视觉的算法。
地图稀疏化(Map sparsification):选择用于定位的最佳地标的算法[10,11]和关键帧选择来稀疏姿态图。用于处理大规模地图或长时间建图。
密集重建(Dense reconstruction):密集重建,深度融合和表面重建[38]算法的集合。还包括一个CMVS/PMVS2接口[39]。详情请参阅第IV-E部分。
F. ROVIOLI: online VIO and localization frontend. ROVIOLI:在线VIO和定位前端
ROVIOLI(ROVIO with Localization Integration,集成定位的ROVIO),是maplab的映射和本地化前端,用于从原始视觉和惯性数据构建地图并且本地化w.r.t.现有的在线地图。它建立在视觉惯性里程计框架ROVIO的基础上[3],并扩展增加了定位和建图能力。它可以使用以下两种操作模式:(i)VIO模式(视觉惯性里程计),即地图是基于VIO估计构建的;(ii)LOC模式,额外增加定位约束用于在给定的地图中处理追踪(无漂移)全局位姿估计。定位地图可以直接在先前的ROVIOLI的(单一场景)中创建,也可以从maplab控制台中导出。控制台内的局部地图的准备允许构建复杂的处理线程(例如,多场景地图,数据选择和压缩(compression))。
图4:ROVIOLI中的模块和数据流(带本地化集成的ROVIO [3])。
图4显示了ROVIOLI中(主要)数据流和模块的概况。特征跟踪模块(Feature Tracking)检测并跟踪BRISK [34]或FREAK [35]关键点。通过帧与帧之间的匹配描述子建立帧之间的特征对应关系。基于集成的陀螺仪测量来预测预期的匹配窗口,以提高效率和鲁棒性。在LOC模式下,帧定位模块(Frame Localization)处理包含特征点和描述子的关键帧,以与所提供的局部图建立2d-3d匹配。这些2d-3d匹配被用于获得全局位姿估计,w.r.t. 地图的参考帧使用一个在RANSAC方案内的3P算法(见图3)。原始的全局姿态估计用于ROVIO,它们与里程计约束进行融合以估计除了本地里程计位姿之外的变换。所有模块的输出在地图构建器(Map Builder)内同步地构建视觉惯性地图(visual-inertial map)(VI-地图)。生成的地图可以在随后的场景中用作局部地图,也可以加载到maplab控制台处进行进一步处理。
流程内部(process-internal)的发布者-使用者(publisher-subscriber)数据交换层管理着ROVIOLI内所有模块之间的数据流。这种结构使得在用新的算法去扩展当前的在线线程很容易,例如用在线的多节点建图(online multiagent mapping),语义SLAM(online multiagent mapping)或定位(localization)研究。
后续章节见《Maplab:一个用于视觉惯性建图和定位研究的开源框架(二)》
欢迎来到泡泡论坛,这里有大牛为你解答关于SLAM的任何疑惑。
有想问的问题,或者想刷帖回答问题,泡泡论坛欢迎你!
泡泡网站:www.paopaorobot.org
泡泡论坛:http://paopaorobot.org/bbs/