初识SLAM

SLAM是什么?

SLAM是Simultaneous Localization and Mapping,也就是同时定位与地图构建

SLAM指的是搭载特定传感器(视觉SLAM中主要指相机)的主体,在没有环境先验信息的情况下,于运动过程中构建环境的模型,同时估计自己的运动

所以,SLAM主要的任务也就是告诉机器人:
1. 我在什么地方?——定位。
2. 周围的环境怎么样?——建图。

传感器

当然,传感器在SLAM中是必不可少的。我们姑且把传感器分为两类:
1. 携带于机器人本体上的,例如机器人的轮式编码器、相机、激光等。不会受传感器的约束。
2. 安装于环境中的,例如导轨、二维码标志等。这类传感器约束了外部环境。

相机

按照相机工作方式,我们把相机分为单目(Monocular)、双目(Stereo)、深度相机(RGB-D)。

单目相机
就是只有一个摄像头来做SLAM,被称为单目SLAM。单目相机得到的只是三维空间中的二维投影,那怎么去还原三维结构呢?——通过移动相机的视角。这样我们就能得到它的运动与场景中物体的远近和大小(结构)。

运动:就是说,相机往有运动的时候,场景的物体就会往左移动。这样就能判断出运动;
结构:当相机移动的时候,近处的物体动得快,远处的物体动得慢。这样就能判断出物体离相机的远近。   这也就是我们所说的视差

使用单目相机除了需要提前移动之外,还存在一个问题:尺度不确定性,也就是单目SLAM估计的轨迹、地图与实际的轨迹、地图相差一个比例因子(尺度)。我们却无法通过图像确定这个尺度。

双目相机
双目相机由两个单目相机组成,但这两个相机之间的距离(基线)是已知的。可以通过基线来估算每个像素的空间位置。

  • 消除了尺度不确定性。
  • 计算机上的双目相机需要大量的计算才能(不太可靠地)估计每一个像素点的深度。
  • 双目相机测量到的深度范围与基线有关。
    • 基线距离越大,能够测量到的就越远(例:无人车上搭载的双目通常非常大)。
  • 配置与标定均较为复杂。
  • 深度量程和精度受双目的基线与分辨率限制。
  • 视差的计算非常消耗资源,需要使用GPU和FPGA设备加速后,才能实时输出整张图像的距离信息。

深度相机

  • 可以知道距离与深度。
  • 主要有两种原理:ToF红外结构光

经典SLAM框架

大家可以参考高博书中的图,主要分为:
1. 传感器数据读取。
2. 前端 视觉里程计
3. 后端 非线性优化
4. 回环检测
5. 建图

视觉里程计(VO)
知道这一刻图像和下一刻图像,下一刻图像和下下刻的图像,估计两两之间的运动,从而估计出来轨迹。

  • 通过相邻图像估计相机运动。
  • 基本形式:通过两张图像来计算运动和结构
  • 将不可避免地出现累计漂移(也就是误差的累积)。

由于累积漂移,我们还需要后端优化和回环检测。

后端优化
主要就是处理SLAM过程中的噪声问题。

除了解决“如何从图像估计出相机运动”之外,还要关心这个估计带来多大的噪声,这些噪声是如何从上一时刻传递到下一时刻的、我们定义当前的估计又有多大自信。

后端优化要考虑的问题,就是如何从这些带有噪声的数据中,估计整个系统的状态,以及这个状态估计的不确定性有多大——这称为最大后验概率估计(MAP)。这里的状态包括机器人自身的轨迹,也包含地图。

后端主要是滤波非线性优化算法。

回环检查
主要解决位置估计随时间漂移的问题。为了实现回环检查,我们需要让机器人具有识别曾到达过的场景的能力。例如,我们可以判断图像间的相似性,来完成回环检测。

建图
Mapping是指构建地图的过程。地图是对环境的描述,但这个描述并不是固定的,需要视SLAM的应用而定。大体上来讲,可以将其分为度量地图拓扑地图

度量地图:强调精确地表示地图中物体的位置关系,通常用稀疏稠密来进行分类。
拓扑地图:相比于度量地图的精确性,拓扑地图则更强调地图元素之间的关系。

数学表述

运动方程:我们要考虑从k-1时刻到k时刻,机器人的位置x是如何变化的。
运动方程xk=f (xk-1,uk,wk)
其中:x表示机器人的位置,uk表示运动传感器的读数(有时也叫做输入),wk为噪声。

观测方程:假设机器人在k时刻,于xk处探测到了某一个路标yj,我们要考虑这件事是如何用数学语言来描述的。
观测方程zk,j=h(yj,xk,vk,j
其中:zk,j为这次观测到的数据,vk,j为这次观测里的噪声。


本博客所有内容均整理自高博的《视觉SLAM十四讲》,欢迎大家交流讨论。

你可能感兴趣的:(计算机视觉,人工智能,算法)