vSLAM 常用核心算法 快速入门
激光雷达
基于激光雷达的 2D SLAM 相对成熟,早在 2005 年,Sebastian Thrun 等人的经典著作《概率机器人学》将 2D SLAM 研究和总结得非常透彻,基本确定了激光雷达 SLAM 的框架。目前常用的 Grid Mapping 方法也已经有 10 余年的历史。2016 年,Google 开源了激光雷达 SLAM 程序 Cartographer,可以融合 IMU 信息,统一处理 2D 与 3D SLAM 。目前 2D SLAM 已经成功地应用于扫地机器人中。
RGBD摄像头
基于深度相机的 RGBD SLAM 过去几年也发展迅速。自微软的 Kinect 推出以来,掀起了一波 RGBD SLAM 的研究热潮,短短几年时间内相继出现了几种重要算法,例如 KinectFusion、Kintinuous、Voxel Hashing、DynamicFusion 等。微软的 Hololens 应该集成了 RGBD SLAM,在深度传感器可以工作的场合,它可以达到非常好的效果。
vSLAM
视觉传感器包括单目相机、双目相机、鱼眼相机等。由于视觉传感器价格便宜,在室内室外均可以使用,因此 vSLAM 是研究的一大热点。早期的 vSLAM 如 monoSLAM 更多的是延续机器人领域的滤波方法。现在使用更多的是计算机视觉领域的优化方法,具体来说,是运动恢复结构(structure-from-motion)中的光束法平差(bundle adjustment)。在 vSLAM 中,按照视觉特征的提取方式,又可以分为特征法、直接法。当前 vSLAM 的代表算法有 ORB-SLAM、SVO、DSO 等
VIO
视觉传感器对于无纹理的区域是没有办法工作的。惯性测量单元(IMU)通过内置的陀螺仪和加速度计可以测量角速度和加速度,进而推算相机的姿态,不过推算的姿态存在累计误差。视觉传感器和 IMU 存在很大的互补性,因此将二者测量信息进行融合的 VIO 也是一个研究热点。按照信息融合方式的不同,VIO 又可以分为基于滤波的方法、基于优化的方法。VIO 的代表算法有 EKF、MSCKF、preintegration、OKVIS 等。Google 的 Tango 平板就实现了效果不错 VIO。
常见的特征点提取算法
常见的特征点提取算法,性能上大致可以认为 SIFT>SURF>ORB>FAST,效率上可以认为 FAST>ORB>SURF>SIFT(大于号左边代表更优。性能主要包括匹配精度、特征点的数量和空间分布等)。为了在性能和效率上取得折中,通常采用 FAST 或者 ORB,只能舍弃性能更好的 SIFT、SURF 等。
匹配点的图像坐标与空间坐标之间的关系是非线性的,例如 2D-2D 点的对应满足对极几何、2D-3D 点的对应满足 PnP 约束。这些匹配数量较多,前后两帧图像中一般有几十至数百的匹配。这些匹配会引入众多约束关系,使得待估计变量的关系错综复杂。为了得到一个较优的估计,通常需要建立优化问题,整体优化多个变量。说起来这无非是一个非线性最小二乘优化问题,但实现起来并不简单,因为存在非线性约束、约束数量很多、存在误差和野值点,并且要将计算时间控制在允许范围。目前广泛采用关键帧技术,并且通过很多方法来控制问题规模、保持问题的稀疏性等。
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 原本只关注环境的几何信息,未来跟语义信息应该有更多的结合。借助于深度学习技术,当前的物体检测、语义分割的技术发展很快,可以从图像中可以获得丰富的语义信息。这些语义信息是可以辅助推断几何信息的,例如已知物体的尺寸就是一个重要的几何线索。