本文为对综述论文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中主要方法:
SLAM帮助语义(SLAM helps semantics)
语义帮助SLAM(semantics help SLAM)
SLAM与语义联合推理(joint SLAM and semantic inference)
待解决的问题(open problem)
语义SLAM不像几何度量SLAM那样有一套成熟的框架,而是尚处于研究的早期阶段。
语义建图不只是一个分类问题
语义概念要被处理为更加特定的信息,比如地图中实体的affordance和actionability(affordance指的是,对于给定的环境或者物体,给定的agent可能采取的动作的集合,actionability指的是这些动作的预期效用),以及环境中不同agent之间可能产生的交互。如何表示这些属性和相互关系,是高层的人机交互需要解决的问题。
忽略、察觉和适应(ignorance, awareness, and adaptation)
给定一些先验知识,机器人要能够推理出新的概念和它们的语义表示。也就是说,机器人要能够发现环境中新的目标和类别,在与其它机器人或人类的交互中学习新的属性,对环境中缓慢的或者突然的变化,自适应地采取相应的表示方法。
举个例子,一个轮式机器人需要分辨地形是否可行驶,然后通知导航系统。如果机器人发现道路上有泥巴,根据之前的分类结果,道路是可行驶的,机器人需要根据穿越这个泥泞地形的难度学习出一个新的类别,如果机器人察觉到有其它车辆陷在了泥泞中,那么它也要相应地调整它的分类器。
基于语义的推理
对于人类而言,我们可以利用语义信息,对环境进行压缩,以及加速对环境的推理,而确定精确的集合度量对人类来说是很困难的事情。然而对于目前的机器人来说,却不是这样,机器人可以处理(带有颜色信息)的集合度量表示,但它们不能真正地利用语义信息。目前我们的机器人还不能够通过环境中的语义信息(类别、相互关系和属性),进行有效的、高效的定位和持续建图。
举个例子:当机器人探测到一辆汽车时,它应该能够推理出汽车下的 地面(即使有遮挡),而且当这辆汽车移动时,机器人的传感器会获取新的数据,地图更新应该可以优化之前猜测的地面。甚至,在优化地面的同时,机器人应该能够通过单一有效的操作,将汽车作为一个整体更新其全局坐标,而不是更新每一个单一的体素。