本文为对综述论文Simultaneous Localization And Mapping: Present, Future, and the Robust-Perception Age的理解和心得,本文受众为,对SLAM问题有一个全面的基础认知,想进一步寻找SLAM研究方向的童鞋。 对该综述论文的学习还可以参考:
【泡泡机器人翻译专栏】SLAM: 现在,未来和鲁棒年代(一)
【泡泡机器人翻译专栏】SLAM: 现在,未来和鲁棒年代(二)
【泡泡机器人翻译专栏】SLAM: 现在,未来和鲁棒年代(三)
【泡泡机器人翻译专栏】SLAM: 现在,未来和鲁棒年代(四)
【泡泡机器人翻译专栏】SLAM: 现在,未来和鲁棒年代(五)

SLAM 研究的时代划分

Cadena等人把SLAM问题的研究划分为3个时代: 1. the classical age (1986 - 2004) 2. the algorithmic-analysis age (2004 - 2015) 3. the robust-perception age (now)

the classical age (1986 - 2004)

在SLAM问题研究的前20年,主要是提出问题和理清框架,这一阶段的主要有两个成果: 1. 对SLAM问题,引入了一些主要的概率形式表述(probabilistic formulation)和框架,包括基于扩展卡尔曼滤波器(Extended Kalman Filters),Rao-Blackwellised 粒子滤波器(Rao-Blackwellised Partical Filter)和极大似然估计的方法(maximum likelihood estimation); 2. 指出了SLAM问题在效率(efficiency)和鲁棒的数据关联(robust data association)方面面对的挑战。

the algorithmic-analysis age (2004 - 2015)

这一阶段对SLAM问题进行算法上的分析,主要成果为: 1. 研究了SLAM问题的基本性质,包括可观测性(observability),收敛性(convergence)和一致性(consistency); 2. 理解了SLAM问题的稀疏性(sparsity),更具体一点,是理解了增量方程中H矩阵结构的稀疏性,这对于SLAM的效率起着至关重要的作用。 3. 一些主要的开源SLAM框架也在这一阶段被开发了出来。

the robust-perception age (now)

Cadena等人认为,在我们正处于的这个时代,SLAM领域的研究有以下特点:

自主机器人真的需要SLAM吗?

SLAM问题被解决了吗?

在我初学SLAM的时候,这是一个很困扰的问题,因为一些现有的开源框架如ORB-SLAM2、SVO、DSO和、OKVIS、VINS-Mono等,在算法框架上已经很成熟了,而且在数据集上也有着很好的表现,似乎剩下的工作就只是将它们工程化、实用化,根据实际应用需求进行微小改动而已。 Cadena等人认为。

SLAM算法鲁棒性

SLAM算法鲁棒性面临的主要挑战

数据关联(data association)

数据关联错误,是导致SLAM算法失效的一个主要原因。数据关联把观测值和相应的状态进行关联。以特征点法视觉SLAM为例,它把每一个特征点与相应的路标点进行关联。感知混淆(perceptual aliasing,感知混淆是指,对于不同的输入,传感器感知到了相同信号的现象)使得正确的数据关联变得特别困难。感知混淆会导致数据关联建立错误的观测-状态(measurement-state)匹配关系(false positive,假阳性),这会导致后端优化作出错误的状态估计。

如果没有对环境的动态性(包括短期变化和长期的季节性变化)进行建模,数据关联错误的情况会很严重。当前的SLAM系统,通常都会假设机器人所处的环境是静态的。对于小尺度场景下的单次建图,如果环境在短期内没有动态性(比如没有人或者其它物体在周围移动),那么静态环境假设(static world assumption)是可取的。但是如果在更长的时间尺度和更大的空间尺度上进行建图,环境的变化是不可避免的,这种情况下静态环境假设就不合理了。环境的变化来自很多方面:昼夜变化,季节变化(比如树叶的变化),环境结构的变化(比如旧建筑物翻新)。这些环境变化都会影响SLAM系统的性能。比如:昼夜极端的光照变化,会使得依赖视觉特征复现性的SLAM系统失效;旧的环境结构消失,会导致基于环境几何结构的SLAM系统失效。

恶劣环境(harsh environment)

SLAM算法鲁棒性面临的另一个挑战,是其在恶劣环境下的运行,比如水下环境。这些恶劣环境下面临的挑战是:低能见度(low visibility),持续变化的环境,以及无法使用一些常用传感器(如激光雷达等)。

研究现状

前端短期数据关联(short-term data association)

由数据关联错误造成的鲁棒性问题,既可以在SLAM系统的前端进行处理,也可以在SLAM系统的后端处理。一般来说,SLAM前端建立的数据关联是可信的。短期的数据关联是最容易处理的:如果传感器的采样频率,相比于机器人自身的运动足够快的话,那么对于同一3D路标的跟踪就比较容易。比如,我们想从连续图像中跟踪一个3D点,且假设图像的帧率足够高,那么基于描述子的普通匹配方法,或者光流法就可以实现可靠的跟踪。直观上讲,在高帧率情况下,传感器(摄像头、雷达)的视角变化不大,因此t+1时刻的特征与t时刻的特征非常接近(相比于长期数据关联,短期的数据关联问题更加简单,关联结果更加可靠,这也是视觉/惯性里程计比SLAM简单的原因)。

前端长期数据关联(long-term data association)

在SLAM前端进行长期数据关联更具有挑战性,它包括回环闭合的检测和验证(loop closure detection and validation)。

前端回环闭合检测(loop closure detection )

对于SLAM前端的回环闭合检测,一个比较直观的方法就是,在当前观测(比如图像)中检测特征,将其之前所有检测到的特征进行对比,但考虑到计算量,这种暴力求解方法是不切实际的。词袋模型(bag-of-words)通过对特征空间进行量化,从而实现了更加有效的搜索,避免了暴力搜索。词袋模型可以设计为层级式字典树(hierarchical vocabulary tree),这种结构可以实现大规模数据集中的高效查找。

基于词袋模型的方法,在单次任务回环闭合检测中表现出了非常可靠的性能。但是这些方法无法处理剧烈的光照变化,因为光照剧烈变化时,就无法与字典树中的视觉单词(visual word)匹配上了。为了处理这个问题,有的方法匹配图像序列,有的方法把不同的视觉特征整合为同一的表示,还有的方法同时使用空间信息和视觉特征,视觉场景识别的详细内容可参考综述论文Visual Place Recognition: A Survey。在基于激光雷达的SLAM前端,基于特征的方法也可以用来进行回环闭合检测。

前端回环闭合验证(loop closure validation)

回环闭合验证,指的是通过额外的几何验证步骤来确保回环闭合的质量。在基于视觉的方法中,通常使用RANSAC进行几何校验,剔除离群点(outlier)。在基于激光雷达的方法中,激光雷达通过之前的扫描已经建出了地图,可以通过计算当前激光雷达的扫描值与地图的匹配度,来完成对回环闭合的验证。

后端回环闭合验证

尽管可以通过各种方法去增强SLAM前端在回环闭合检测中的鲁棒性,错误的回环闭合检测还是无法被完全避免,比如出现感知混淆(perceptual aliasing)的时候。SLAM后端获取错误的回环闭合检测信息,会严重影响后端极大后验估计(MAP)的质量。为了处理这个问题,有一些研究提出了一些方法,可以使SLAM后端对于前端传递过来的错误回环闭合信息更加鲁棒。有些方法在后端优化中添加与回环闭合相关的残差项,通过残差值推断回环闭合检测的正确性。在有一些方法中,与里程计数据相悖的回环闭合检测结果被认为是错误的回环检测,进而在后端优化之前,获取离群点(outlier)的先验信息。

动态环境的处理

动态环境对SLAM的挑战主要有两方面: 1. SLAM系统需要检测、丢弃和跟踪环境中的变化。目前的主流方法选择剔除环境中动态变化的部分,但也有一些研究把动态变化的元素作为环境的一部分进行建模。 2. SLAM系统需要对环境中的永久变化(permanent change)或半永久变化(permanent change)进行建模,系统需要理解什么时候应该更新地图,以及该如何更新地图。现有的SLAM系统在处理动态场景时主要有两种方式:一是维护同一个位置的多个地图;二是只维护一个地图,但是构建地图的参数是时变的。

待解决的问题(open problem)

SLAM失效保护和恢复(failsafe SLAM and recovery)

尽管SLAM后端已经取得了很大进步,现在的SLAM系统求解器在出现离群点(outlier)时依然很脆弱。这主要是因为,几乎所有的鲁棒SLAM方案都是基于非凸目标函数的迭代优化,这会导致两个结果:第一,离群点的去除效果取决于优化过程中初始估计的质量;第二,系统具有内生的脆弱性:后端优化即使只使用了一个离群点,都会降低状态估计的质量,糟糕的状态估计又会反过来降低系统剔除后续离群点的能力。

一个理想的SLAM系统应该具有失效保护和失效侦测的能力,系统必须能检测到突发的失效情况(比如由离群点或者硬件老化造成的失效),要有恢复机制进行适当操作,使得系统能够重新正常工作。现有的SLAM系统没有这些功能。

对硬件失效的鲁棒性(robustness to HW failure)

解决硬件失效问题并不属于SLAM的研究范畴,但硬件失效会影响SLAM系统,SLAM系统反过来会对,检测、减少传感器失效和运动失效,发挥重要作用。如果传感器精度由于硬件故障或老化而降低,那么传感器的测量(包含噪声和偏置),就不再与后端优化中所使用的传感器噪声模型相匹配,这会导致较差的估计结果。这就引出了各种需要研究的问题:如何检测传感器的不良运行状态?如何相应地调整传感器噪声模型中的协方差和偏置?

几何度量重定位(metric relocalization)

几何度量重定位,是指估计机器人当前时刻,在已建地图中的位姿。相对于基于特征(feature-based)的重定位,基于外观(appearance-based)的重定位能在昼夜、不同的季节之间实现回环闭合检测,但得到的回环闭合结果,本质上是拓扑的,是没有几何度量信息的。对于几何度量重定位来说,基于特征的方法仍然是最常用的,而这种方法不能被扩展到昼夜、不同季节场景下的重定位。

目前很多SLAM系统都选择视觉传感器(摄像头),魂环闭合问题变成了一个传感器信号匹配的问题。尽管摄像头是主要的传感器,其它的传感器数据和SLAM系统中的一些其它信息也可以用于帮助重定位。Brubaker等人使用轨迹(trajectory)匹配来克服相机的缺陷;先使用一种传感器模式进行建图,然后再建好的图中使用另一种传感器模式进行重定位,这也是一个研究方向。

另一个问题是,如何根据不同来源、不同视角的传感器数据进行定位。Forster等人研究了在激光雷达地图中的视觉定位问题。Majdik等人研究了如何在Google街景图片的3D纹理图上定位无人机。Behzadin等人展示了如何使用激光扫描仪在手绘地图中定位。Winterhalter等人演示了如何在给定的2D户型图上,使用RGB-D传感器进行定位。

随时间变化的、可变形的地图(time varing and deformable map)

主流SLAM系统都假设世界是静止的,然而由于物体的动态变化,以及物体天然的变形特性,真实世界不是一成不变的。一个理想的SLAM方案应该能够处理环境中的非刚体性(non-rigidity)等动态因素,能够长时间工作生成全地形图(”all terrain map”),而且能够实时完成这些工作。

在计算机视觉领域,从80年代起就有研究尝试恢复非刚性物体的形状,但它们只能在限定条件下使用。比如Pentland等人的论文需要知道关于目标力学性质的先验性息。Bregler等人的论文需要对目标的变形进行限定,他们展示了人脸形状恢复的例子。近期的非刚体SFM研究成果,限定条件减少了,但仍然只能应用于小场景。在SLAM领域,Newcombe等人解决了非刚体场景下的小规模重建问题。然而,非刚体场景的大规模重建问题仍有待研究。

自动化调参(Automatic parameter tuning)

SLAM系统(尤其是数据关联模块)需要大量的参数调整,以保证其在给定的场景中能够正常工作。这些参数包括控制特征匹配的阈值,RANSAC参数,向因子图中添加新因子的标准,判断回环闭合的标准。如果想要SLAM系统不经手动调整,就能在各种场景下使用,那就需要考虑参数自动调整。

SLAM的场景尺度(scalability)

现代SLAM系统已经成功地应用于室内场景。

研究现状

节点、边缘稀疏化(node and edge sparsification)

去中心化(并行)SLAM(out-of-core (parallel) SLAM)

分布式多机器人SLAM(distributed multi robot SLAM)

待解决的问题

地图维护(map maintenance)

鲁棒分布式建图(robust distributed mapping)

学习,遗忘,记忆(learning, forgetting, remembering)

资源有限的平台(resource-constrained platform)

地图表示:几何度量推理(metric reasoning)

几何度量地图,是编码环境几何信息的符号结构(symbolic structure)。在SLAM中,如何为SLAM选择合适的几何度量地图(或者扩展机器人当前所使用的几何度量地图),会影响许多研究领域,包括长时间导航、与环境的物理交互、人机交互。

在2D情况下,构建环境的几何模型相对简单,只有两种主要范式: 1. 路标地图(landmark-based maps)。在路标地图中,环境被建模为路标的稀疏集合 2. 栅格地图(occupancy grid maps)。在栅格地图中,环境被离散化为许多栅格,每一个栅格会被赋予一个概率值,该值表征了这个栅格被占据的概率。

2D环境中地图的标准化问题,已经被IEEE RAS Map Data Representation Working Group解决了,可参见他们的论文IEEE Standard for Robot Map Data Representation for Navigation。这个标准定义了平面环境的两种几何度量地图表示(还有拓扑地图),用于数据交换(data exchange),参照基准(benchmarking)和技术转移(techonology transfer)。

3D环境的集合建模相对复杂(delicate),如何有效地对3D环境进行几何建模,仍处于研究的早期阶段。下面会以一个跨越机器人学(robotics)、计算机视觉(computer vision)、计算机辅助设计(CAD, computer aided design)和计算机图形学(computer graphics)的广阔视角,回顾3D环境的几何建模方法。

稀疏路标表示(landmark-based sparse representation)

低层原始数据稠密表示(low-level raw dense representation)

边界和空间分割稠密表示(boundary and spatial-partitioning dense representation)

基于物体的高阶表示(high-level object-based representation)

待解决的问题(open problem)

以下这些关于SLAM中几何度量表示的问题,需要大量的基础研究,仍然有很多未知领域没有开发。

SLAM中的高层表示(high-level, expressive representations in SLAM)

最优表示(optimal representations)

自动、自适应表示(automatic, adaptive represetation)

地图表示:语义推理(semantic reasoning)

语义建图(semantic mapping)需要将语义信息与机器人所处环境中的几何实体进行关联。最近,人们已经意识到了纯粹几何地图的局限性,在构建环境语义地图方面产生了很多的重要工作。语义地图可以提升机器人的自主性和鲁棒性、使机器人能够处理更加复杂的任务(比如在行驶过程中避免泥泞道路)、从路径规划(path-planning)变成任务规划(task-planning),以及实现高级的人机交互。在语义地图方面,有着大量不同的方法,它们所使用语义信息的数量和类别不尽相同,也使用不同的方法将语义信息与环境中的不同部分进行关联。此外,也有一些方法将低层的语义分析表述为一个分类问题,它们考虑的是传感器数据与语义信息之间的简单映射。

语义SLAM vs 拓扑SLAM(semantic SLMA vs topological SLAM)

拓扑建图舍弃了几何度量信息,仅仅通过场景识别来构建图(graph,图论中的图),图中的节点(node)表示不同的位置,图中的边(edge)表示不同位置之间的连通情况。语义建图与拓扑建图完全不同,拓扑建图需要识别之前看到过的地方(不管它到底是厨房、走廊、或者别的什么),而语义建图则需要根据语义标签对这些位置进行分类。

语义的结构和具体内容(semantic SLAM: structure and detail of concepts)

对于人类来说,可能有无数的概念,这些概念之间也有着无数的相互关系,但是人类是任务驱动的(task-driven),根据任务需求,人类可以更加睿智的去选择不同的层级和组织结构来使用这些概念。人类的这种特性,对于构建智能机器人是有借鉴意义的。语义的具体内容和组织方式,取决于机器人所处的环境,以及机器人所需要执行的任务。而语义的具体内容和组织方式,会在不同的阶段影响问题的复杂性。因此,构建语义地图需要确定以下两方面的内容: 1. 语义的层级和具体内容(level/detail of semantic concepts)。对于一个给定的机器人任务,比如“从房间A到房间B”,初步的分类(比如房间、走廊、门)就可以很好的完成这个任务。但是对于其它的一些任务,比如“拿起一个茶杯”,就需要更加精细的分类(桌子、茶杯、玻璃杯)。 2. 语义的组织形式(organization of semantic concepts)。语义信息并不是唯一的(exclusive),多个语义信息可以表达同一个实体(比如凳子、板凳),一个语义信息也可以表达多个实体(比如桌子一个词,既可以指课桌,也可以指饭桌)。一个实体可能有无穷多的属性。一个椅子的属性可能是“可移动的”和“可坐”,一个餐桌的属性可能是“可移动”和“不可坐”。椅子和餐桌都是家具,它们都具有“可移动”的共同属性,但是具有不同的用途。由于语义存在的这些特点,我们在组织语义信息时,不管使用扁平结构还是层级结构(flat or hierarchical organization),无论有没有共同属性,都必须要能够处理语义信息的多样性(multiplicity)。

语义建图的研究现状

在语义建图或赋予数据语义信息方面,目前有3中主要方法:

  1. SLAM帮助语义(SLAM helps semantics)

  2. 语义帮助SLAM(semantics help SLAM)

  3. SLAM与语义联合推理(joint SLAM and semantic inference)

待解决的问题(open problem)

语义SLAM不像几何度量SLAM那样有一套成熟的框架,而是尚处于研究的早期阶段。

人类通过语义理解,可以预测环境在不同时间尺度下的变化情况。以上图中中的一个工地为例,我们人类可以理解图片底部的吊车的运动,并且可以预测它在短期内不会移动,同时我们还可以预测工地在施工完成后的外形,这样在施工结束后,我们依然可以在完成自己在工地中的定位。这得益于人类可以对环境中目标的功能以及它们之间的相互关系进行推理,使机器人能够具备相似的能力是语义SLAM中有待解决的问题。从工地的例子中,可以发现语义SLAM面临的以下挑战。

语义建图不只是一个分类问题

语义概念要被处理为更加特定的信息,比如地图中实体的affordance和actionability(affordance指的是,对于给定的环境或者物体,给定的agent可能采取的动作的集合,actionability指的是这些动作的预期效用),以及环境中不同agent之间可能产生的交互。如何表示这些属性和相互关系,是高层的人机交互需要解决的问题。

忽略、察觉和适应(ignorance, awareness, and adaptation)

给定一些先验知识,机器人要能够推理出新的概念和它们的语义表示。也就是说,机器人要能够发现环境中新的目标和类别,在与其它机器人或人类的交互中学习新的属性,对环境中缓慢的或者突然的变化,自适应地采取相应的表示方法。

举个例子,一个轮式机器人需要分辨地形是否可行驶,然后通知导航系统。如果机器人发现道路上有泥巴,根据之前的分类结果,道路是可行驶的,机器人需要根据穿越这个泥泞地形的难度学习出一个新的类别,如果机器人察觉到有其它车辆陷在了泥泞中,那么它也要相应地调整它的分类器。

基于语义的推理

对于人类而言,我们可以利用语义信息,对环境进行压缩,以及加速对环境的推理,而确定精确的集合度量对人类来说是很困难的事情。然而对于目前的机器人来说,却不是这样,机器人可以处理(带有颜色信息)的集合度量表示,但它们不能真正地利用语义信息。目前我们的机器人还不能够通过环境中的语义信息(类别、相互关系和属性),进行有效的、高效的定位和持续建图。

举个例子:当机器人探测到一辆汽车时,它应该能够推理出汽车下的 地面(即使有遮挡),而且当这辆汽车移动时,机器人的传感器会获取新的数据,地图更新应该可以优化之前猜测的地面。甚至,在优化地面的同时,机器人应该能够通过单一有效的操作,将汽车作为一个整体更新其全局坐标,而不是更新每一个单一的体素。

SLAM中的新理论工具

主动SLAM(active SLAM)

SLAM中的新传感器