当你身处一个陌生的地方,要准确找到目的地和路线,十有八九会打开手机上的地图app,然后定位、输入目的地、规划路线、导航。
机器人也一样。当它们身处未知环境时,同样需要通过以上步骤才能做出正确的运动。只不过,机器人靠的不是手机地图app,而是SLAM技术。
SLAM全称SimultaneousLocalizationandMapping,中文名曰「同步定位与地图构建」,主要用于解决机器人在未知环境运动时的定位和地图构建问题。这更像一个概念,而不是某种算法。它本身包含许多步骤,其中的每一个步骤均可以使用不同的算法实现。
机器人、无人车、无人机、AR,无所不能的SLAM
两年前,SLAM最流行的应用场景还只是我们家里的扫地机器人。近几年,随着无人机、无人驾驶、服务机器人、仓储机器人以及AR的兴起,SLAM作为其中核心技术的一种,正变得越来越重要。
雷锋网的一篇报道曾引用SLAM技术发烧友GuangLing的话,来强调SLAM技术的重要性:
一个机器人也好,无人汽车也好,其中最核心,最根本的问题有四个,定位技术、跟踪技术、路径规划技术(PathPlanning),还有就是控制技术(Controlling)。
而这四个问题中的前三个,SLAM都扮演了最核心的功能。打个比方,若是手机离开了wifi和数据网络,就像无人车和机器人,离开了SLAM一样。
也许有读者好奇,为什么无人车也非常依赖SLAM?因为无人车被看作移动机器人的一种,也需要首先解决定位、避障和导航的问题。目前用在无人驾驶汽车上的SLAM主要是基于激光雷达传感器,后面会详细提到。
天上飞的的无人机同样需要SLAM来「添翼」。SLAM能让无人机知道障碍物在哪里,进而实现自动避障的功能。
香港科技大学助理研究员徐枭涵曾在知乎上如此形容SLAM对无人机的重要性:
所有的关于无人机的梦想都建立在SLAM之上,这是无人机能飞(具有定位,姿态确定以后)的时代以后,无人机最核心的技术。也是现代无人机和玩具的区别。
无人车、无人机,都可以算作机器人的一种,依赖SLAM很好理解。但与机器人没什么关系的AR设备,其实也是SLAM的一个重要应用。
如果没有SLAM加持,所有头戴眼镜就只是一个近眼投影设备。有了SLAM,AR眼镜才能知道自己的空间坐标和相对于室内各种障碍物的位置,同时识别出各种室内摆件的形状。这是AR设备人机交互的基础。
由于AR是将虚拟图像叠加在真实物体上,所以SLAM的应用讲究局部精度,要求避免出现漂移、抖动的现象,虚拟与真实才能完美地融合在一起。另外,AR对帧率、硬件体积、计算量、功率、成本等问题都更敏感。
激光雷达、单目、双目、RGBD,SLAM传感器的分类
实现SLAM的第一步,是选择传感器的形式和安装方式。传感器分为激光雷达和视觉两大类,视觉下面又分三小方向。
激光雷达
激光雷达能以很高精度测出机器人周围障碍点的角度和距离,而且速度快,计算量也不大,容易做成实时SLAM。激光雷达一般用于扫描一个平面内的障碍物,适用于适用于平面运动的机器人(如无人车、扫地机器人)。
许多行业分析师认为,激光雷达是实现全自动驾驶的关键传感器,其产品被以Google、百度为代表的企业认可。
不过,激光雷达制造成本高,价格十分昂贵,比如Google无人车目前使用的激光传感器单个定制成本在8万美元左右,百度采购一台激光雷达也要70万人民币。
成本已然成为激光雷达普及最大的拦路虎。2016年8月福特和百度一起投资了激光雷达厂商VelodyneLiDAR1.5亿美元,目的就是帮助Velodyne降低激光传感器的成本。Velodyne希望将激光雷达的价格降到300到500美元之间,以满足大众汽车市场。
视觉SLAM
视觉SLAM是21世纪SLAM研究热点之一。CPU、GPU处理速度的增长和硬件的提高,让许多以前被认为无法实时化的视觉算法,得以在10Hz以上的速度运行。
按照摄像头的数量和种类分,视觉SLAM分3个子方向:单目、双目(或多目)、RGBD。此外,还有鱼眼、全景等特殊摄像头,但是都属于少数。
单目相机SLAM只需要一个普通的2D摄像头,成本优势大。但普通2D摄像头没法获取深度信息,它捕获的仅仅是一张2D图像。深度信息缺失有什么影响?引用知乎用户「半闲居士」的一个回答:
没有距离信息,我们不知道一个东西的远近——所以也不知道它的大小。它可能是一个近处但很小的东西,也可能是一个远处但很大的东西。只有一张图像时,你没法知道物体的实际大小(Scale)。
另一方面,单目相机也无法依靠一张图像获得图像中物体离自己的相对距离。
但这两个问题都有对应的解决办法。比如,通过借助GPU和IMU(InertialMeasurementUnit,惯性测量器件)确定物体的大小,依靠运动中的三角测量,来求解相机运动并估计像素的空间位置。
双目SLAM消除了单目的很多麻烦。双目视觉和人眼类似,通过左右眼图像的差异来计算距离——也就是所谓的立体视觉(Stereo)。
但双目SLAM的计算量非常大,通常需要用到可编程门阵列FPGA。而且其其深度量程也受双目的基线与分辨率限制。
RGBDSLAM的传感器是深度摄像头,能直接记录深度信息。深度摄像头通过把光投射到物体表面,再测量反射的信息来计算距离,具体原理有两种:结构光或Time-of-Flight。它比传统相机能够提供更丰富的信息,也不必像单目或双目那样费时费力地计算深度。Kinect就是一种比较常见的深度摄像头。不过,现在多数RGBD相机还存在测量范围窄、噪声大、视野小等诸多问题。
总的来说,SLAM的实现方法多种多样,应用场景也不断打开。但「由于产品和硬件高度差异化,而SLAM相关技术的整合和优化又很复杂,导致算法和软件高度碎片化,所以市场上目前还没有一套通用普适的解决方案,在短时间内也不会有」。