当前位置: 华文星空 > 汽车

学习两年多,感觉SLAM太难了,大家对此有什么想法?

2020-04-17汽车

SLAM2.0: Towards AI Agent Era

这是一个有趣的问题,我也简单写一下 。

简单来说,我觉得SLAM的时代才刚刚开始。 或者更为准觉得说,SLAM2.0时代的开始。SLAM,其实不只是一门技术,更是一门艺术,是一个道」门「,至于这道门会通向哪里,全掌握在各位SLAMer手里。
Fig.1 SLAM 2.0 概念图

SLAMer「温故而知新」

作为一个被研究了几十年的方向,」SLAM这个领域还有没有搞头?「这个问题我印象中已经被问了很多次,最早一次我记得是Sebastian Thrun时代,2010年有人在一次访问中就问过他」Is SLAM solved?「 他那个时候说常规意义上的SLAM的理论体系已经完备了,但是还有很多Corner Case解决不了。正当那个时代的SLAMer们认为SLAM也就那样了的时候,突然出现了以下几个成果:

  1. 2015年,ORB-SLAM第一代诞生,从此开启了Graph-based的视觉VIO大浪潮;
  2. 2017年,MSCKF-VIO诞生,Filter VIO扳回一局,老一代SLAMer振臂高呼「不要放弃」经典;
  3. 2018年,VINS-Mono诞生,一种紧耦合方案惊艳四方,成为小白们的VIO必修课。

虽然这个问题被问起过非常多变,我们似乎总可以从不同的角度对SLAM进行不断的优化和提升。如前段时间,我也分享过(能否推荐几个比较有研究价值的slam方向?)可能的几个有趣的SLAM方向,简单总结来说就是: 对于当前的SLAM系统,只要是能更好的满足真是需求,那就能有更好的突破性工作。 但是这句话说起来简单,做起来却是太难,其困难程度可以参考我之前写的这个分析(机器人领域的顶刊TRO/IJRR和CV领域的TPAMI,TIP相比含金量如何?)。

这对于很多初涉SLAM(即便是资深研究者)的人来说确实是一种挑战。而且在这种现状之下,如果所有SLAMer都只从传统的思维模式「卷」SLAM算法(比如绝对精度,高速下的鲁棒性等传统指标),那么这个领域确实很难再出大型的成果;或者想出也可以,其系统级复杂度都是初级SLAMer无法预期的。这就好比:一个多级倒立摆,别人已经实现10级倒立摆,你如果想做11级别,其代价是先熟悉掌握10级倒立摆的控制特性,你还需要有独到的策略实现11级的控制方案。

听到这里,估计很多人都在开始打退堂鼓了==!,不过「老乡留步「,我们其实还有其他路可以走,且往下看。

SLAM的初衷

现在先让我们静下来考虑一个问题,不论各位的SLAM背景,我们先抛出所有对于SLAM这个领域的固有认知,找一个安静的地方,开始冥想。

」什么是SLAM?「

这是一个愚蠢的问题,我们经常认为SLAM的目的就是两个,帮助机器人定位,辅助机器人进行建模,在此基础上我们才能进一步开发一系列的复杂应用,不管是无人驾驶还是服务机器人,SLAM都是他们的底层核心。但如果我们回到这个问题的本质,为什么Agent系统需要一套SLAM,如果回到第一性原理,其实他只是用来回答Where am I这个问题。举几个例子,

  • Where am I in the City?
  • Where is the house?
  • Where am I in the house?
  • Where can I pick up the book in the house?
  • 因此SLAM 的核心其实是」Where「,精度和效率只不过是他的一部分评价指标,注意只是一部分。而且我们会发现这个Where其实包含的东西很多,也很模糊,比如规模、精度、关系等。而且这个where很杂,一般别人问我们某个地方怎么走,我们会说」过了前面那个红绿灯,右拐约莫几十布的地方就是,旁边有个咖啡厅「。我们经常用这种」Rough「的信息描述Where,但是大部分时间我们都很理解。就类似于下面这张藏宝图,说真的,大航海早期的航海图就是这样的:)。

    Fig.2 藏宝图

    紫炉熏香,古琴绕梁。。。所以一个有趣问题映入了我们的脑海中,既然人类可以只依靠粗略的信息获取Where的属性, 那我们为何要用精度来限制SLAM的使用空间或者评价一个SLAM方法优劣的唯一指标呢? 如果我们不在纠结精度这一限制条件,是否这个思路就打开了呢?而且,我们可以考虑另一个有意思的事情,如果不再限定于精度,那么还会有哪些问题对Where属性的认知更有价值呢?我这里可以简单写几个:

    1. 长航程的鲁棒性: 常见的SLAM通常只能用在短暂的工作阶段,而无法实现长期(24小时/7天)稳定的定位导航能力,这方面虽然有一些工作,但还没有可以看到类似ORB-SLAM这样的milestone。很多人吐槽这是工程问题,但是在我看来,这确实实实在在的SLAM基本问题,甚至比精度的意义更加重大,比如对于火星车和月球车。
    2. 大规模的鲁棒性: 一般来说提到规模,常见的SLAM系统很难适应与几公里甚至几十公里以上的场景,而这些应用对于人类的生活来说都是家常便饭的事情。很多人会Challenge说,「有GPS啊!」,但是实际情况是,我们一般希望的机器人工作环境不见得会有第三方GPS或者UWB系统,比如复杂室内,Shopping Mall等。从第一性原理出发,这种事情人可以做,那么机器就必然可能。而这种通用性是否需要高精度的SLAM建模能力,我看未必。
    3. 增量式的学习性: 不知大家有没有注意到这一点,从OrbSLAM开始,视觉类SLAM的主要闭环检测方法就主要在用BoW,用了这么多年的一项技术为什么不考虑一下升级呢。虽然ORB是一类非常稳定的场景描述子提取器,但是他还是依赖于之前喂给他的训练数据。而这类训练数据往往不能cover真实场景中光照、天气、动态障碍物等造成的场景差异性。虽然目前有一些learning的算法可以达到更好的场景关联能力,但是我们不能指望用有限的数据就能确保SLAM系统可以持续更新优化,真是场景是多变且多样的。有人也会Challenge说,这种太过于工程了。但是,这些问题就是SLAM系统自身所存在的缺陷,我们可以回避,但他会一直存在。
    4. 语义类的关联性: 语义SLAM这个命题被提起了很多年,但是鲜有做的非常耐用的。这个愿意也很复杂,此前受制于感知算法或者自然语言处理的局限性,语义SLAM总给人一种听者很玄乎但实际上没有太大实用价值的系统。但随着最近大模型和CLIP等技术的不断成熟,语义SLAM有望崛起,比较具有代表性的就是Scene Graph之类的工作。

    以上这些,只是SLAM在当前的发展中面临的部分问题,如果详细展开还有非常多的点,不过限于篇幅,我们点到为止,后续具体可以参考(能否推荐几个比较有研究价值的slam方向?)。不过这些问题,也只是为下面要讲的SLAM 2.0做一个铺垫,请大家系好安全带,我们开车走起。

    SLAM2.0的含义

    Fig.3 经典SLAM系统

    如图三所示,经典SLAM系统往往包括三个核心模块:Place Recognition,Odometry Estimation,和Factor Graph。我们一般在讲视觉SLAM的时候,往往会混淆SLAM系统和VIO系统。如果只包含odometry和FG,那么这个系统也就只是一个VIO。在过去的几十年里,Place Recognition一直是一个被人忽视的环境,在近5年有所改观。对于基于以上三个模块的SLAM系统,

    在上一章,大家不难发现,在传统SLAM问题中,很多问题都只聚焦在了精度上,而忽视了很多实际应用中面临的现实问题。那么我们应该如何打造一套具有足够适配能力的SLAM系统呢?怀着这个目的,我们引入了SLAM2.0系统,如下图所示:

    Fig.4 SLAM2.0系统框架

    这套框架想对于经典SLAM系统多了以下几个主要模块:

    1. Map Evaluation :主要负责对于局部地图的细节进行评估,这种评估可以是3D环境的建模精度、矢量精度或者环境语义信息相关性的分析等;
    2. Scene Operator: 用于构建拓扑抽象的地图结构,建立Hierarchical的层级地图表达;
    3. Memory Tank :用于存储时空地图,可以在不同维度和尺度分析地图信息;
    4. Action :根据当前地图和历史地图的信息,在线动态的调整机器人的SLAM决策。

    SLAM2.0的拓展

    有空再写