本次课给大家带来该文章的第三部分,SLAM系统的全自动化。
3. 全自动化的第一步:鲁棒性
SLAM系统可能很脆弱:会出现算法失效和硬件相关的失效。第一类主要由现有SLAM算法的局限造成的(比如,很难处理极端动态环境)。后面一类主要由于传感器和机器老化。明确地提出失效模式对长期运行非常关键,那样就不会对环境结构有要求(比如,要求大部分是静态环境)或者完全依赖板载传感器。本章,我们主要讨论解决算法鲁棒性时的挑战。然后讨论一些未解决的问题,比如当硬件失效时的鲁棒性。
算法失效的一个主要来源是数据关联。第2章提到数据关联将每次测量值与对应的状态进行关联。比如,在基于特征的视觉SLAM系统中,它将每个特征和特定的路标关联。直观对齐,可能会出现不同的传感器输入产生相同的传感器信息,导致这个问题非常难解决。在这个例子中,如果数据关联构建了错误的测量-状态匹配,后端可能会出现错误估计。
如果环境中短期或季节变化并且没有对动态环境构建模型,情况可能更糟糕,可能会欺骗短期或长期的数据关联。一个常用的SLAM要求是机器人走过的环境保持不变(换句话说就是,环境是静态的)。这个静态环境的要求在小场景中单一地图构建中是适用的,只要没有短期动态状态(比如,人和物体在周围移动)。如果地图构建是长时间在大场景中,变化就不可避免。昼夜变化,季节变换比如树叶或环境结构的改变旧建筑物变成新建筑物,所有这些都会影响SLAM系统的性能。比如,依赖于视觉特征的系统会在剧烈的昼夜变化中失效,当旧建筑消失环境几何方法也会失效。
另外一个鲁棒性要求是在恶劣的环境中使用SLAM,比如水下环境。这个例子中的挑战是可视光有限,一直在变化的环境,而且一般的传感器无法使用(比如镭射测距仪)。
简要回顾
对错误数据的鲁棒性问题可以用于SLAM系统的前端部分,也可以用于后端。传统方法中,前端用于构建正确的数据关联。短期数据关联是最容易处理的:如果传感器的数据采样率相对比较快,比机器人的运动快,对相同3D路标跟踪特征就比较容易。比如,如果我们想在连续的图像中跟踪3D云点同时图像帧率足够高,标准的基于描述子匹配和光流的方法可以确保可靠的跟踪。直观上,在高帧率情况下,传感器(相机,激光)视角改变不是很大,因此t+1时刻的特征与t时刻的特征非常接近。【马后炮:事实上短期数据关联比长时间中的数据关联更容易更可靠,这使得(视觉,惯性)里程计比SLAM更简单。】前端中长期数据关联更具有挑战性同时需要闭合回路的检测和校验。对前端闭合回路来说,暴力匹配方法可能不切实际,它在当前观测中(比如,图像)侦测特征而不是在之前检测到的所有特征进行匹配。词袋模型可以量化特征空间和进行更有效的搜索来避免这种难题。词袋模型可以设计成层级式字典树,可以在大范围数据集中有效查找。基于词袋模型的技术在处理单任务闭环回路检测中表现出非常可靠的性能。然而,这些方法无法处理剧烈的图像变化因为视觉单词无法匹配。这样就需要开发新的方法匹配图像序列处理这样的变动,收集不同的视觉贴图用于统一表示,或者同时采用空间和贴图信息。可以参考一个详细的综述,论文177,视觉位置识别综述。在基于激光的SLAM前端,基于特征的方法可以用来检测回环闭合;比如,论文273提供了2D激光扫描的FLIRT(Fast Laser Interest Region Transform)特征。
回环闭合校验,由附加的几何验证步骤来确认回环闭合的质量。在基于视觉的应用中,随机抽样一致性算法 RANSAC常用来做几何校验和离群点去除,参考论文248 VO1。在基于激光的方法中,可以通过确认当前激光扫描和已经扫描好的地图的匹配程度(匹配得有多好)来校验回环闭合(比如,扫描匹配产生的残差有多小)。
尽管这些流程可以使前端的回环闭合检测更鲁棒,在直观对齐的情况下,错误的回环闭合不可避免地被反馈给后端。错误的回环闭合会严重损害最大后
验估计的质量。为了处理这个问题,最近出现了很多研究提供了一些方法可以使SLAM后端对不合格(伪造)的观测值处理更有弹性。这些方法基于回环闭合的有效性进行推导,回环闭合通过优化过程中的残差进行约束。其他的方法,检测离群点先验信息,也就是,在做任何优化之前,识别不正确的回环闭合,但里程计不支持这种做法。
动态环境中的挑战主要有两方面。首先,SLAM系统必须检测,丢掉,跟踪变化。当主流的方法都尝试丢掉场景中的动态部分,有些研究工作将动态元素作为模型的一部分。第二个挑战是SLAM系统必须构建模型处理永久或半永久变化,理解如何和什么时候相应地更新地图。当前的SLAM系统处理动态环境,要么维护同一位置的多个(与时间相关)地图,要么只有一个表示但可以根据时间变动进行参数调整。
待解决的问题
本章我们回顾了一些未解决的问题,记录了SLAM生命周期中出现的新的研究问题。
失效保护SLAM和恢复机制:
尽管对SLAM后端进行了处理,当前SLAM方案在出现离群点时仍然比较脆弱。这主要因为鲁棒的SLAM是基于非凸集迭代优化。这样会有两个结果:首先,离群点去除的结果依赖于优化中初始估计的质量;其次,系统天生脆弱:任一一个离群点都会降低估计的质量,它又会反过来降低系统分辨离群点的能力。一个理想的SLAM系统应该是具有失效保护和失效侦测的功能,比如,系统必须能检测到即将发生的失效问题(比如:由于离群点或者硬件老化),还要具有恢复机制重建之前的操作任务。现有SLAM系统没有这种功能。
针对硬件的鲁棒性:
其实硬件失效并不是SLAM研究的问题,但这些失效会影响SLAM系统,SLAM系统具有重要作用检测传感器和减少运动失效。如果传感器精度由于误操作或老化而降低,传感器的测量(噪声和偏移)质量不能匹配后端的噪声模型(如3式),将会导致较差的估计。这就会差生不同的研究问题:我们如何检测不良传感器的运行状态?如何相应地调整传感器噪声数据统计模型(协方差,偏移)?
几何度量重定位:
与基于特征方法不同,基于贴图的方法可以在白天和夜晚的图像序列上实现回环闭合,在不同的季节实现回环闭合也是很自然的一件事了。对于几何度量重定位(比如对之前构建的地图估计相对位姿),基于特征的方法可能更规范化,但无法扩展到这样的环境中。如果视觉变成了针对不同应用的传感器的选择,回环检测变成了传感器位置匹配问题,也可以研究SLAM问题所需的其他信息和传感器。比如,Brubaker提出了轨迹匹配中相机的劣势。另外,先用一个相机建图,再在同一个地图中定位另一个相机,可能非常有用。Wolcott和Forster的工作在这个方向上有所进展。另外一个问题是从不对称的拍照角度上得到不同的照片中如何定位。Forster研究了在激光地图中的视觉定位问题,Majdik研究了如何在Google街景照片的3D纹理地形图上定位无人机。Behzadin演示了如何在手绘地图用激光扫描仪, Winterhatter演示了如何在2D户型图上用RGB-D定位。
时间变化和地图畸变:
主流SLAM方法都假设现实世界是固定不变的,然而真实世界由于其动态环境和物体畸变并非一成不变。一个理想的SLAM方案应该能够处理环境中的动态因素,包括非固定部分,能够长时间工作生成所有地形地图,并能实时处理这些工作。在计算机视觉领域,自80年代就开始尝试在有限的应用中从非固定的物体上恢复形状,比如Pertlend的论文需要物体结构属性的信息。Bregler要求限定物体的畸变,在人脸识别上做了一些演示。最近关于非固定运动结构,比如论文5,6,114,限制比较少,但主要应用于小场景。在SLAM领域,Newcombe针对小场景提出了非固定实例。然而,大场景非固定地图仍然需要大量研究。
自动参数调整:
SLAM系统(特别是数据关联模块)需要更多的参数调整,在给定的场景中正确地工作。这些参数,包括控制特征匹配的阈值,RANSAC参数,还有决定何时添加新的因子到因子图中或何时触发回环闭合算法搜索匹配。如果SLAM需要跳出受限的思维在任意场景中都适用,那么就需要考虑自动参数调整的方法。
4. 全自动化的第二步:尺度
现代SLAM系统已经成功地应用于室内场景,如图4上,在许多应用尝试中,机器人必须工作在室外大场景中长时间工作,如图4下。这些应用包括用于环境监控的海洋探索,城市中7天24小时工作的清洁机器人,高精度的农业机器人应用。对于这样的应用,SLAM因子图可能没有边界,因为随着运行时间的增加,不停地探索新的位置。在实际应用中,由于机器人资源限制,计算时间和存储容量有限,因此,设计不受计算时间和存储容量限制的SLAM方法非常重要。
最坏的情况下,基于直接线性器的连续线性方法的内存消耗随着6式中变量数量增加呈几何式增长。采用线性迭代器时(比如,共轭梯度法时),内存变量消耗空间呈线性增长。实际情况可能更复杂,当同一个地方多次路过时,
当节点和边缘持续加入到相同的空间中时, 因子图优化就变得没有效率,还不如采用稀疏图结构。
本章我们将回顾目前的控制方法,减少问题的复杂性,讨论未解决的问题。
简要回顾
我们主要考虑两种防范减少因子图优化的复杂性:(1)稀疏方法,为了内存和计算效率,会损失一些信息;(2)并行和多机器人方法,将计算任务分配到多个机器人/处理器上。
节点和边缘稀疏性。这套方法是规模问题,减小将要添加到途中的节点的数量,或者筛选具有较少信息得节点和因子。论文135用信息论方法添加非冗余节点和高信息含量观测值到图中。论文141,尽可能地避免在推导节点之间新的约束时添加新节点,这样变量只依赖于空间的扩大而非建图时间。论文162基于线性约束因子和非线性图稀疏方法。这些方法用一个筛选的节点马尔科夫链来处理,并计算一个毯的近似稀疏,论文129通过解决l1范式最小化问题将海塞矩阵稀疏处理。
并行SLAM:SLAM并行算法将因子图的计算分别放入多个处理器中计算。主要的方法是将因子图分解成几个不同的子图,用局部优化每一个子图,再加上一个全局优化。对应的算法通常称为局部构图算法。论文205提供了一种因子图优化的局部建图方法,缓存因式分解子地图加速计算。论文206用二值树状结构构建子图,嵌套分析减少了两个子树之间的依赖程度。论文304提出了一种大场景SLAM的近似策略处理子地图的顺序,用最小二乘法合并。论文104提出了一种多层松弛方法,论文116提出了一种子地图层次结构:无论什么时候去的观测值,最高层都会被修改,但只有受影响的那些低层级的区域才会更改。论文266基于层次分解提出了一种SLAM的近似方法。论文62通过ADMM并行计算。论文155并行计算两个非耦合线程。论文253优化局部领域相交参数法减少计算代价。论文263采用二步法,首先优化一个局部位姿特征图,再采用论文253的方法完成一个位姿到位姿变换图。论文295将因子图优化分解为一个快速滤波线程和一个慢速平滑线程,他们之间周期性地进行同步。
分布式多机器人SLAM:一种大场景建图的方法是采用多机器人SLAM,将场景分成小区域,每个地图用不同的机器人。这种方法有两个不确定因素:中心点,即机器人构建子地图,将局部信息传递给中心站用于执行推断,还有一种分散式的,没有中心数据融合,每个机器人基于一个通用的估计用局部通信达
成一致。论文201基于分布式共轭梯度法提出一种协作式定位方法。论文9采用分布式雅可比方法估计一组2D位姿图。论文11,调研了基于一致性信息方法合并地图。论文157用分布式梯度下降法估计3D位姿。论文73,74,用高斯消元法,开发了一种方法,称为DDF-SAM,每个机器人通过隔离器(不同机器人之间共享变量)交换高斯边缘。最近有个多机器人SLAM综述,如论文244。
高斯消元法已经是非常常用的方法,但有两个缺点。首先,机器人之间的边缘是稠密的,通信代价是隔离器数量的二次方。这就需要采用稀疏方法来减少通信代价,如论文220。其次,高斯消元法在这个问题中是需要进行线性化,因此,采用的方法,如DDF-SAM方法需要好的线性点和复杂的书签确保机器人之间线性点的一致性。高斯消元的另一种方法是论文63中高斯-赛德尔算法,通信负担与隔离器数量呈线性相关。
待解决的问题
尽管大量工作用来降低因子图优化的复杂性,该领域仍然和长时间进行方面有很大差距。
地图维护:一个很少涉及的问题是长期操作的时候如何存储地图。甚至当内存没有那么紧张的时候,比如数据存储在云端,原始数据比如云点或者立体地图由于内存的限制而没有用;类似的在视觉SLAM中存储特征描述子很快就会变得很庞大。一些早期的用于定位方案没有采用压缩的已知地图,用于高效内存稠密重建。
鲁棒的分布式建图:离群点的去除在单一机器人的案例中已经实现,多机器人SLAM的领域中完全没有离群点的问题。处理虚假的观测值特别有挑战性,主要有两个面的原因。 首先,机器人可能无法共享共同的参考帧,很难检测、去除错误的回环闭合。第一个处理这些工作的是论文136。其次,在分布式配置中,机器人必须要从每个部分和局部信息中检测出离群点;这种方法也没有探索过。
学习、忘记、记忆:一个长期建图的问题是更新地图信息的频率,如何判断信息过期,然后丢弃。何时可以忘记?什么可以忘记,什么重要信息必须保留?这些都是基于任务的问题,没有绝对的答案。
平台资源有限:另一个相关的未涉及的问题是如何将现有SLAM算法应用于计算资源有限的机器人平台。这个问题非常重要,当机器人平台不同的时候,
比如手机,微型无人机,机器昆虫。许多SLAM算法计算成本昂贵无法运行在这些平台上,希望可以有好的方法选择计算成本而放弃精度。类似的问题也出现在多机器人设置中:如何在带宽资源有限和通信不稳定的情况下确保多机器队伍可靠地运行?论文65的版本控制是第一次研究这个方向。
下次课给大家带来SLAM表示的部分,敬请期待。
【版权声明】泡泡机器人SLAM的所有文章全部由泡泡机器人的成员花费大量心血制作而成的原创内容,希望大家珍惜我们的劳动成果,转载请务必注明出自【泡泡机器人SLAM】微信公众号,否则侵权必究!同时,我们也欢迎各位转载到自己的朋友圈,让更多的人能进入到SLAM这个领域中,让我们共同为推进中国的SLAM事业而努力!
【注】商业转载请联系刘富强([email protected])进行授权。普通个人转载,请保留版权声明,并且在文章下方放上“泡泡机器人SLAM”微信公
众账号的二维码即可。
【编辑】王琛