SLAM(Simultaneous Localization and Mapping) 是业界公认视觉领域空间定位技术的前沿方向,中文译名为「同步定位与地图构建」,它主要用于解决机器人在未知环境运动时的定位和地图构建问题。本次阅面科技资深研究员赵季也将从 SLAM 方向着手,为大家展现更深层次的技术干货。
赵季:阅面科技资深研究员。2012 年获华中科技大学博士学位,2012 年至 2014 年在 CMU 机器人研究所做博士后。曾在三星研究院从事深度相机、SLAM、人机交互方面的研究。目前专注于空间感知技术的研发。
目前科技发展速度飞快,想让用户在 AR/VR、机器人、无人机、无人驾驶领域体验加强,还是需要更多前沿技术做支持,SLAM 就是其中之一。实际上,有人就曾打比方,若是手机离开了 WIFI 和数据网络,就像无人车和机器人,离开了 SLAM 一样。
SLAM 主要解决的是相机在空间中的定位、以及创建环境的地图。在当前比较热门的一些创业方向中,都可以看到它的身影:
在 VR/AR 方面,根据 SLAM 得到地图和当前视角对叠加虚拟物体做相应渲染,这样做可以使得叠加的虚拟物体看起来比较真实,没有违和感。
在无人机领域,可以使用 SLAM 构建局部地图,辅助无人机进行自主避障、规划路径。
在无人驾驶方面,可以使用 SLAM 技术提供视觉里程计功能,然后跟其他的定位方式融合。
机器人定位导航方面,SLAM 可以用于生成环境的地图。基于这个地图,机器人执行路径规划、自主探索、导航等任务。
SLAM 技术的发展距今已有 30 余年的历史,涉及的技术领域众多。由于本身包含许多步骤,每一个步骤均可以使用不同算法实现,SLAM 技术也是机器人和计算机视觉领域的热门研究方向。
SLAM 技术大解析
SLAM 的英文全程是 Simultaneous Localization and Mapping,中文称作「同时定位与地图创建」。SLAM 试图解决这样的问题:一个机器人在未知的环境中运动,如何通过对环境的观测确定自身的运动轨迹,同时构建出环境的地图。SLAM 技术正是为了实现这个目标涉及到的诸多技术的总和。
SLAM 技术涵盖的范围非常广,按照不同的传感器、应用场景、核心算法,SLAM 有很多种分类方法。按照传感器的不同,可以分为基于激光雷达的 2D/3D SLAM、基于深度相机的 RGBD SLAM、基于视觉传感器的 visual SLAM(以下简称 vSLAM)、基于视觉传感器和惯性单元的 visual inertial odometry(以下简称 VIO)。
基于激光雷达的 2D SLAM 相对成熟,早在 2005 年,Sebastian Thrun 等人的经典著作《概率机器人学》将 2D SLAM 研究和总结得非常透彻,基本确定了激光雷达 SLAM 的框架。目前常用的 Grid Mapping 方法也已经有 10 余年的历史。2016 年,Google 开源了激光雷达 SLAM 程序 Cartographer,可以融合 IMU 信息,统一处理 2D 与 3D SLAM 。目前 2D SLAM 已经成功地应用于扫地机器人中。
2006 年使用激光雷达生成的实验室地图
基于深度相机的 RGBD SLAM 过去几年也发展迅速。自微软的 Kinect 推出以来,掀起了一波 RGBD SLAM 的研究热潮,短短几年时间内相继出现了几种重要算法,例如 KinectFusion、Kintinuous、Voxel Hashing、DynamicFusion 等。微软的 Hololens 应该集成了 RGBD SLAM,在深度传感器可以工作的场合,它可以达到非常好的效果。
视觉传感器包括单目相机、双目相机、鱼眼相机等。由于视觉传感器价格便宜,在室内室外均可以使用,因此 vSLAM 是研究的一大热点。早期的 vSLAM 如 monoSLAM 更多的是延续机器人领域的滤波方法。现在使用更多的是计算机视觉领域的优化方法,具体来说,是运动恢复结构(structure-from-motion)中的光束法平差(bundle adjustment)。在 vSLAM 中,按照视觉特征的提取方式,又可以分为特征法、直接法。当前 vSLAM 的代表算法有 ORB-SLAM、SVO、DSO 等。
视觉 SLAM
视觉传感器对于无纹理的区域是没有办法工作的。惯性测量单元(IMU)通过内置的陀螺仪和加速度计可以测量角速度和加速度,进而推算相机的姿态,不过推算的姿态存在累计误差。视觉传感器和 IMU 存在很大的互补性,因此将二者测量信息进行融合的 VIO 也是一个研究热点。按照信息融合方式的不同,VIO 又可以分为基于滤波的方法、基于优化的方法。VIO 的代表算法有 EKF、MSCKF、preintegration、OKVIS 等。Google 的 Tango 平板就实现了效果不错 VIO。
总的来说,相比于基于激光雷达和基于深度相机的 SLAM,基于视觉传感器的 vSLAM 和 VIO 还不够成熟,操作比较难,通常需要融合其他传感器或者在一些受控的环境中使用。
Visual SLAM 为什么比较难?
我们通过分析传感器的测量信息做个定性的分析。激光雷达或者 RGBD 相机可以直接获取环境的点云。对于点云中的一个点,它告诉我们在某个方位和距离上存在一个障碍点。而视觉传感器获取的是灰度图像或者彩色图像。对于图像中的一个像素,它只能告诉我们在某个方位有障碍点、障碍点周围的表观(local appearance)如何,但它不能告诉我们这个障碍点的距离。要想计算该点的距离,需要把相机挪动一个位置再对它观察一次,然后按照三角测量的原理进行推算。
原理上很清晰,实际做起来并不简单。首先需要在两幅图像中寻找点的对应,这涉及到特征点的提取和匹配、或者准稠密点之间的匹配。计算机视觉发展到今天,其实还不存在性能和速度上很好满足 vSLAM 的特征提取和匹配算法。常见的特征点提取算法,性能上大致可以认为 SIFT>SURF>ORB>FAST,效率上可以认为 FAST>ORB>SURF>SIFT(大于号左边代表更优。性能主要包括匹配精度、特征点的数量和空间分布等)。为了在性能和效率上取得折中,通常采用 FAST 或者 ORB,只能舍弃性能更好的 SIFT、SURF 等。
其次,匹配点的图像坐标与空间坐标之间的关系是非线性的,例如 2D-2D 点的对应满足对极几何、2D-3D 点的对应满足 PnP 约束。这些匹配数量较多,前后两帧图像中一般有几十至数百的匹配。这些匹配会引入众多约束关系,使得待估计变量的关系错综复杂。为了得到一个较优的估计,通常需要建立优化问题,整体优化多个变量。说起来这无非是一个非线性最小二乘优化问题,但实现起来并不简单,因为存在非线性约束、约束数量很多、存在误差和野值点,并且要将计算时间控制在允许范围。目前广泛采用关键帧技术,并且通过很多方法来控制问题规模、保持问题的稀疏性等。
非线性优化问题的形象图示。圆饼代表待优化的变量(相机姿态、特征点的空间坐标),杆子代表约束(对线几何、PnP 等)。图片来源自 https://www.pinterest.com/81chevycowper/70s-80s-toys/
前面分析了 vSLAM 的两个困难。前者导致了前端的特征跟踪不易,后者导致了后端的优化不易。想做出一个高效率、鲁棒的 vSLAM 系统还是一个非常有挑战的任务。效率方面,SLAM 必须是实时运行的。如果不能做到实时,就不能称作 SLAM。不考虑实时性,采用从运动恢复结构(structure-from-motion)效果会更好。鲁棒性方面,一个脆弱的系统会导致用户体验很差,功能有限。
使用 structure-from-motion 对玲珑塔进行三维重建
vSLAM 的核心算法
预备阶段,包括传感器的选型和各种标定。Visual SLAM 自 PTAM 算法以来,框架基本趋于固定。通常包括 3 个线程,前端 tracking 线程、后端 mapping 优化线程、闭环检测(loop closure)线程。
前端 tracking 线程主要涉及到:
特征的提取、特征的匹配;
多视图几何的知识,包括对极几何、PnP、刚体运动、李代数等。
后端优化线程涉及到非线性最小二乘优化,属于数值优化的内容。闭环检测线程涉及到地点识别,本质上是图像检索问题。对于 VIO,还涉及到滤波算法、状态估计等内容。
将 SLAM 算法拆解了看,用到的技术是偏传统的。与当前大热的深度学习「黑箱模型」不同,SLAM 的各个环节基本都是白箱,能够解释得非常清楚。但 SLAM 算法并不是上述各种算法的简单叠加,而是一个系统工程,里面有很多 tradeoff。如果仅仅跑跑开源程序,没有什么核心竞争力。不论是做产品还是做学术研究,都应当熟悉各种技术,才能有所创造。
SLAM 的未来发展趋势
VSLAM 的发展感觉是中规中矩,各个环节在前人的基础上一点点优化,同时不断吸收其他方向的最新成果。短期内肯定会在现有框架下不停地改进。至于长远一些的趋势,IEEE TRO 2016 有一篇综述文章 Past, present, and future of SLAM: towards the robust-perception age。几位有声望的学者在文中对 SLAM 的趋势做了非常好的总结。这里仅就自己感兴趣的点提一些个人感想。
新型传感器的出现会不停地为 SLAM 注入活力。如果我们能够直接获取高质量的原始信息,SLAM 的运算压力就可以减轻很多。举例来说,近几年在 SLAM 中逐渐有使用低功耗、高帧率的 event camera(又称 dynamic vision system, DVS)。如果这类传感器的成本能降下来,会给 SLAM 的技术格局带来许多变化。
自从深度学习在诸多领域所向披靡,不少研究者试图用深度学习中 end-to-end 的思想重构 SLAM 的流程。目前有些工作试图把 SLAM 的某些环节用深度学习代替。不过这些方法没有体现出压倒性优势,传统的几何方法依然是主流。在深度学习的热潮之下,SLAM 涉及的各个环节应该会逐渐吸收深度学习的成果,精度和鲁棒性也会因此提升。也许将来 SLAM 的某些环节会整体被深度学习取代,形成一个新的框架。
SLAM 原本只关注环境的几何信息,未来跟语义信息应该有更多的结合。借助于深度学习技术,当前的物体检测、语义分割的技术发展很快,可以从图像中可以获得丰富的语义信息。这些语义信息是可以辅助推断几何信息的,例如已知物体的尺寸就是一个重要的几何线索。