SLAM 技术基础

机器人想实现自主移动和导航必须知道自己在哪,周围什么情况等;SLAM就是帮助机器人实现定位与地图构建功能的一种方案或技术。SLAM的全称为Simultaneous Localization And Mapping「同时定位与地图构建」,最早用于军事核潜艇中的海底定位。

关于SLAM

机器人想要在未知的环境中实现自主移动、自主避障就必须知道自己在哪「定位」,环境中有什么障碍物、周围是什么情况「建图」等。SLAM就是帮助机器人实现定位与地图构建功能的一种方案或技术。SLAM的全称为Simultaneous Localization And Mapping「同时定位与地图构建」。它最早用于军事核潜艇中的海底定位。最近几年由于机器人、无人机、自动驾驶、AI以及VRAR技术的发展,SLAM技术逐渐被人们熟知,因为SLAM技术是这些领域的核心与难点。

SLAM的实现方式有很多种,也有大量的硬件平台可供选择,比如思岚科技的SLAMWARE,整套硬件平台嵌入SLAM技术,配合自家产的激光雷达以及ROS中的导航功能包可实现室内机器人的自主定位与导航。SLAM是一个概念而不是一个单一的算法,SLAM过程有很多步骤组成,包括地标提取、数据关联、状态估计、状态更新以及地标更新等。并且每一个部分都可以由不同的算法来实现。其中EKF (Extended Kalman Filter)即扩展卡尔曼滤波即是一种实现SLAM过程的方法。

SLAM可以用于二维空间运动也可以用于三维空间运动,像目前流行的AR领域、无人机自主避障领域等即是SLAM的三维空间使用实例。

SLAM关键设备

完成SLAM首先需要一个机器人移动平台,可以借助无人机,或者移动机器人来实现。移动机器人平台一般选择轮式,有全向移动方式或者两轮移动方式。从轮子的转动圈数可以大致估计机器人的运动里程,但是这种方式通常是不准确的,因此还需要其他的测距设备来辅助完成机器人的位置估计。比如IMU惯性导航模块以及激光雷达测距设备等,当然还包括其他的单目、双目等视觉传感器设备。

激光雷达可以扫描环境中的障碍物,通过SLAM过程生成带有地标信息的环境地图,提供给机器人。因为激光雷达精度高、输出效率高、不需要太多的计算过程,所以应用广泛。但是激光雷达并不便宜,并且激光雷达不会检测到玻璃这种透明的障碍物,也不能用于水下,因为水会阻碍光的传输,因此激光雷达也有一定的应用场合限制。

视觉SLAM计算量很大,并且很容易受光照度的影响。但是近几年随着硬件性能的提升,视觉SLAM也得到快速的发展和应用。在大型的室外无人驾驶过程中一般同时选择视觉传感器、毫米波雷达、多线激光雷达、IMUGPS等多传感器组合完成,并且车身周围配备多台同类型传感器实现汽车对周围环境的自动感知。

SLAM过程

SLAM过程由若干步骤完成,其主要目的是利用环境来更新机器人的位置信息。大致过程包括地标提取、数据关联、状态估计、状态更新以及地标更新等。

单纯的依赖机器人的运动来估计其位置的方式是不准确的,因为机器人的里程计通常存在一定的误差。通常借助激光雷达等测距设备来获取环境信息后与里程计信息融合从而更准确的获取机器人的位置。这里通常有很多种方法实现,EKF即是常见的一种SLAM实现方式。EKFSLAM的核心,它持续的对机器人的位置和周围环境信息进行估计,通过迭代运算,较为准确的估计出机器人的位置。

下图是SLAM的简单过程描述:

机器人运动时,它的位置发生变化,机器人将里程计观测的信息以及激光雷达获取的地标信息进行关联,EKF将当前观测的位置、机器人的运动位置进行综合运算,估计出机器人的准确位置信息。

通过几张图我们详细的看一下位置估计的过程:




我们用一个三角形表示机器人,五角星表示地标;图1中机器人首先通过激光雷达测量地标相对于自身的距离和角度信息;图2中机器人开始向前移动,到达一个新位置;机器人首先根据里程计或运动方程预测它当前所处的位置;到达图3中的位置后,机器人会通过激光雷达重新测量各个地标相对于机器人的位置和角度信息。这个测量得到的距离和角度显然不一定和机器人根据运动方程所估计的位置重合,并且机器人更倾向于相信通过激光雷达测量得到的位置和角度信息;在图4中我们用实线三角形表示的机器人位置,用虚线三角形表示机器人通过运动方程估计的位置;显然两个位置不重合,机器人这个时候通过EKF综合预测和测量进行机器人真实位置的估计,图5中的实线三角形表示通过EKF运算后估计出的位置;

机器人通常依赖里程计来获取自身运动状态的估计,一般通过轮子的转动圈数来实现,在和激光雷达数据进行融合时必须要保证两个数据信息的时间同步性,否则会造成状态的错误估计;地标必须具备很强的区分性并易于观测。地标太少不容易被观察,并且地标不能随意变动,一般选取静止的物体作为观测地标。
下面贴一张使用cartographer技术实现的SLAM实例,详细可参考:
https://github.com/googlecartographer/cartographer

下面是香港科技大学开源的基于单目视觉与惯导融合的SLAM技术实例,有ROS版本和IOS版本,研究价值很高,详细可访问:https://github.com/HKUST-Aerial-Robotics/VINS-Mono


结语

SLAM技术随着AI技术的发展逐渐被人们所熟知,2D的激光雷达SLAM技术目前较为成熟,有很多实际的应用。视觉SLAM领域仍然存在很多问题,仍然有很大的研究和改进的空间。比如无人驾驶中的多传感器数据融合、数据关联的优化、回环检测机制以及重定位精度等问题。视觉SLAM也许是将来的重点研究领域和发展方向。

水平有限,欢迎指正交流。

参考:

  1. 「SLAM for Dummies」
  2. Cartographer
  3. 香港科技大学 VINS-Mono
您的支持是我原创的动力