随着最近几年机器人、无人机、无人驾驶、VR/AR的火爆,SLAM技术也为大家熟知,被认为是这些领域的关键技术之一。本文对SLAM技术及其发展进行简要介绍,分析视觉SLAM系统的关键问题以及在实际应用中的难点,并对SLAM的未来进行展望。
1. SLAM技术SLAM(Simultaneous Localization and Mapping),同步定位与地图构建,最早在机器人领域提出,它指的是:机器人从未知环境的未知地点出发,在运动过程中通过重复观测到的环境特征定位自身位置和姿态,再根据自身位置构建周围环境的增量式地图,从而达到同时定位和地图构建的目的。由于SLAM的重要学术价值和应用价值,一直以来都被认为是实现全自主移动机器人的关键技术。
如下图,通俗的来讲,SLAM回答两个问题:“我在哪儿?”“我周围是什么?”,就如同人到了一个陌生环境中一样,SLAM试图要解决的就是恢复出观察者自身和周围环境的相对空间关系,“我在哪儿”对应的就是定位问题,而“我周围是什么”对应的就是建图问题,给出周围环境的一个描述。回答了这两个问题,其实就完成了对自身和周边环境的空间认知。有了这个基础,就可以进行路径规划去达要去的目的地,在此过程中还需要及时的检测躲避遇到的障碍物,保证运行安全。
2. SLAM发展简介自从上世纪80年代SLAM概念的提出到现在,SLAM技术已经走过了30多年的历史。SLAM系统使用的传感器在不断拓展,从早期的声呐,到后来的2D/3D激光雷达,再到单目、双目、RGBD、ToF等各种相机,以及与惯性测量单元IMU等传感器的融合;SLAM的算法也从开始的基于滤波器的方法(EKF、PF等)向基于优化的方法转变,技术框架也从开始的单一线程向多线程演进。下面介绍这些过程中一些代表性的SLAM技术。
(1)激光雷达SLAM发展
基于激光雷达的SLAM(Lidar SLAM)采用2D或3D激光雷达(也叫单线或多线激光雷达),如下图所示。在室内机器人(如扫地机器人)上,一般使用2D激光雷达,在无人驾驶领域,一般使用3D激光雷达。
激光雷达的优点是测量精确,能够比较精准的提供角度和距离信息,可以达到<1°的角度精度以及cm级别的测距精度,扫描范围广(通常能够覆盖平面内270°以上的范围),而且基于扫描振镜式的固态激光雷达(如Sick、Hokuyo等)可以达到较高的数据刷新率(20Hz以上),基本满足了实时操作的需要;缺点是价格比较昂贵(目前市面上比较便宜的机械旋转式单线激光雷达也得几千元),安装部署对结构有要求(要求扫描平面无遮挡)。
激光雷达SLAM建立的地图常常使用占据栅格地图(Ocupanccy Grid)表示,每个栅格以概率的形式表示被占据的概率,存储非常紧凑,特别适合于进行路径规划。
现任Udacity创始人CEO、前Google副总裁、谷歌无人车领导者Sebastian Thrun大神(下图)在他2005年的经典著作《Probabilistic Robotics》一书中详细阐述了利用2D激光雷达基于概率方法进行地图构建和定位的理论基础,并阐述了基于RBPF粒子滤波器的FastSLAM方法,成为后来2D激光雷达建图的标准方法之一GMapping[1][2]的基础,该算法也被集成到机器人操作系统(Robot Operation System,ROS)中。
2013年,文献[3]对ROS中的几种2D SLAM的算法HectorSLAM,KartoSLAM,CoreSLAM,LagoSLAM和GMapping做了比较评估,读者可前往细看。
2016年,Google开源其激光雷达SLAM算法库Cartographer[4],它改进了GMapping计算复杂,没有有效处理闭环的缺点,采用SubMap和Scan Match的思想构建地图,能够有效处理闭环,达到了较好的效果。
(2)视觉SLAM发展
相比于激光雷达,作为视觉SLAM传感器的相机更加便宜、轻便,而且随处可得(如人人都用的手机上都配有摄像头),另外图像能提供更加丰富的信息,特征区分度更高,缺点是图像信息的实时处理需要很高的计算能力。幸运的是随着计算硬件的能力提升,在小型PC和嵌入式设备,乃至移动设备上运行实时的视觉SLAM已经成为了可能。
视觉SLAM使用的传感器目前主要有单目相机、双目相机、RGBD相机三种,其中RGBD相机的深度信息有通过结构光原理计算的(如Kinect1代),也有通过投射红外pattern并利用双目红外相机来计算的(如Intel RealSense R200),也有通过TOF相机实现的(如Kinect2代),对用户来讲,这些类型的RGBD都可以输出RGB图像和Depth图像。