视觉SLAM十四讲学习笔记——第一&二章

版权声明:这些都是咸鱼Nova最后的挣扎,各位大佬转载请注明出处 https://blog.csdn.net/weixin_40883049/article/details/86485364

课程视频传送门

在这里插入图片描述

1 基本概念与预备知识

1.1. SLAM的基本概念

  1. SLAM 是 Simultaneous Localization and Mapping 的缩写,中文译作“同时定位与地图构建” 。它是指搭载特定传感器的主体,在没有环境先验信息的情况下,于运动过程中建立环境的模型,同时估计自己的运动。如果这里的传感器主要为相机,那就称为“视觉 SLAM”。
  2. SLAM解决的两个问题:
    • 定位——即自身的状态
    • 建图——即周围的环境
  3. 实时性没有先验知识是特点。
  4. 目前工业界的典型应用:扫地机器人,无人机,AR,无人驾驶。

1.2. 传感器

在这里插入图片描述

  1. 传感器是SLAM问题的中心工具。
  2. 传感器分为两类:
    • 一类传感器是携带于机器人本体上的,例如机器人的轮式编码器、相机、激光。
    • 另一类是安装于环境中的,例如前面讲的导轨、二维码标志
  3. 安装于环境中的传感设备,通常能够直接测量到机器人的位置信息,然而,由于它们必须在环境中设置,在一定程度上限制了机器人的使用范围。
  4. 携带于机器人本体上的传感器,它们测到的通常都是一些间接的物理量而不是直接的位置数据,它没有对环境提出任何要求,使得这种
    定位方案可适用于未知环境

1.3. 摄像机

在这里插入图片描述

  1. 摄像机是以一定速率拍摄周围的环境,形成一个连续的视频流的工具,普通的摄像头能以每秒钟 30 张图片的速度采集图像。
  2. 按照相机的工作方式,主要分为3类:单目相机(Monocular)、双目相机(Stereo)和深度相机(RGB-D)。
  3. 单目相机
    1. 定义:只使用一个摄像头进行 SLAM 的做法称为单目SLAM(Monocular SLAM)。
    2. 优势:结构简单、成本低
    3. 照片:本质上是拍照时的场景(Scene),在相机的成像平面上留下的一个投影, 它以二维的形式反映了三维的世界。
    4. 缺陷:在单目相机中,我们无法通过单个图片来计算场景中物体离我们的距离
    5. 解决策略:近处的物体移动快,远处的物体则运动缓慢。于是,当相机移动时,这些物体在图像上的运动,形成了视差。通过视差,我们就能定量地判断哪些物体离得远,哪些物体离的近。
    6. 仍有问题:知道了物体远近,它们仍然只是一个相对的值。单目 SLAM 估计的轨迹和地图,将与真实的轨迹、地图,相差一个因子,也就是所谓的尺度(Scale),又称为尺度不确定性
      在这里插入图片描述
  4. 双目相机
    • 定义:双目相机由两个单目相机组成,这两个相机之间的距离(称为基线(Baseline))是已知的,通过这个基线可估计每个像素的空间位置。
      在这里插入图片描述
    • 多目相机:对双目相机进行拓展,可以搭建多目相机,本质上是相同的。
    • 作用:双目相机测量到的深度范围与基线相关。基线距离越大,能够测量到的就越远。
    • 适用范围:双目相机的距离估计是比较左右眼的图像获得的,并不依赖其他传感设备,所以它既可以应用在室内,亦可应用于室外
    • 缺点:双目或多目相机的缺点是配置与标定均较为复杂,其深度量程和精度受双目的基线与分辨率限制,而且视差的计算非常消耗计算资源。目前,计算量是双目的主要问题之一。
  5. 深度相机
    在这里插入图片描述
    • 原理:可以通过红外结构光或 Time-of-Flight(ToF)原理,通过主动向物体发射光并接收返回的光,测出物体离相机的距离。
    • 优势:深度相机的功能不像双目那样通过软件计算来解决,而是通过物理的测量手段,所以相比于双目可节省大量的计算量
    • 缺陷:现在多数 RGB-D 相机还存在测量范围窄、噪声大、视野小、易受日光干扰、无法测量透射材质等诸多问题。
    • 适用范围:主要用于室内 SLAM,室外则较难应用。

2. 经典视觉 SLAM 框架

在这里插入图片描述

2.1. 概述

  1. 视觉 SLAM 流程分为以下几步:
    • 传感器信息读取。在视觉 SLAM 中主要为相机图像信息的读取和预处理。如果在机器人中,还可能有码盘、惯性传感器等信息的读取和同步。
    • 视觉里程计 (Visual Odometry, VO)。视觉里程计任务是估算相邻图像间相机的运动,以及局部地图的样子。 VO 又称为前端(Front End)。
    • 后端优化(Optimization)。后端接受不同时刻视觉里程计测量的相机位姿,以及回环检测的信息,对它们进行优化,得到全局一致的轨迹和地图。由于接在 VO 之后,又称为后端(Back End)。
    • 回环检测(Loop Closing)。回环检测判断机器人是否曾经到达过先前的位置。如果检测到回环,它会把信息提供给后端进行处理。
    • 建图(Mapping)。它根据估计的轨迹,建立与任务要求对应的地图。

2.2. 视觉里程计

在这里插入图片描述

  1. 概念:视觉里程计任务是估算相邻图像间相机的运动,以及局部地图的样子。 VO 又称为前端(Front End)。视觉里程计确实是 SLAM 的关键问题。
  2. 前提:定量地估计相机运动,必须在了解相机与空间点的几何关系之后进行。
  3. 原理:VO 能够通过相邻帧间的图像估计相机运动,并恢复场景的空间结构。
  4. 特点:只计算相邻时刻的运动,而和再往前的过去的信息没有关联。
  5. 缺陷:仅通过视觉里程计来估计轨迹,将不可避免地出现累计漂移(Accumulating Drift)。由于里程计的工作方式,先前时刻的误差将会传递到下一时刻,导致经过一段时间之后,估计的轨迹将不再准确
  6. 解决:需要后端优化和回环检测

2.3. 后端优化

  1. 概念:后端接受不同时刻视觉里程计测量的相机位姿,以及回环检测的信息,对它们进行优化,得到全局一致的轨迹和地图。由于接在 VO 之后,又称为后端(Back End)。
  2. 研究对象:如何从这些带有噪声的数据中,估计整个系统的状态,以及这个状态估计的不确定性有多大——这称为最大后验概率估计(Maximum-a-Posteriori, MAP)。这里的状态既包括机器人自身的轨迹,也包含地图
  3. 前端与后端的关系:前端给后端提供待优化的数据,以及这些数据的初始值。而后端负责整体的优化过程,它往往面对的只有数据,不必关心这些数据到底来自什么传感器。在视觉 SLAM 中,前端和计算机视觉研究领域更为相关,比如图像的特征提取与匹配等,后端则主要是滤波与非线性优化算法。
  4. SLAM 问题的本质: 对运动主体自身和周围环境空间不确定性的估计。

2.4. 回环检测

在这里插入图片描述

  1. 概念:回环检测判断机器人是否曾经到达过先前的位置。如果检测到回环,它会把信息提供给后端进行处理。
  2. 主要解决的问题:漂移问题。
  3. 前提:回环检测与“定位”和“建图”二者都有密切的关系,我们需要让机器人具有识别曾到达过的场景的能力
  4. 实质,视觉回环检测,实质上是一种计算图像数据相似性的算法。

2.5. 建图

  1. 概念:建图(Mapping)是指构建地图的过程。
  2. 地图:地图是对环境的描述,但这个描述并不是固定的,需要视 SLAM 的应用而定。
  3. 特点:建图并没有一个固定的形式和算法,形式随 SLAM 的应用场合而定。
    在这里插入图片描述
  4. 分类:度量地图和拓扑地图。
  5. 度量地图
    1. 特点:度量地图强调精确地表示地图中物体的位置关系
    2. 分类:稀疏(Sparse)与稠密(Dense)地图
    3. 稀疏地图:进行了一定程度的抽象,并不需要表达所有的物体,只需考虑我们希望研究的物体,由路标组成。
    4. 稠密地图:着重于建模所有看到的东西,通常按照某种分辨率,由许多个小块组成。
    5. 缺陷:
      ①这种地图需要存储每一个格点的状态,耗费大量的存储空间
      ②大规模度量地图有时会出现一致性问题
  6. 拓扑地图
    1. 特点:强调地图元素之间的关系
    2. 结构:由节点和边组成,只考虑节点间的连通性,例如 A, B 点是连通的,而不考虑如何从 A 点到达 B 点的过程。
    3. 优势:放松了地图对精确位置的需要,去掉地图的细节问题,是一种更为紧凑的表达方式。
    4. 劣势:拓扑地图不擅长表达具有复杂结构的地图。
    5. 问题:如何对地图进行分割形成结点与边,如何使用拓扑地图进行导航与路径规划。

3. SLAM 问题的数学表述

3.1. 数学模型

  1. 模型的建立
    在这里插入图片描述
  2. 对上式进行解释
    1. 第一个方程为运动方程,即考虑从 k 1 k− 1 刻到 k k 时刻,机器人的位置 x x 是如何变化的。其中 u k u_{k} 是输入, w k w_{k} 是噪声。用一个一般函数 f f 来描述这个过程,而不具体指明 f f 的作用方式
    2. 第二个方程为观测方程,即描述的是,当小萝卜在 x k x_{k} 位置上看到某个路标点 y j y_{j} ,产生了一个观测数据 z k , j z_{k,j} , 这里 v k , j v_{k,j} 是这次观测里的噪声。观测数据 z z 以及观测方程 h h 也许多不同的形式。
    3. 根据小萝卜的真实运动和传感器的种类,存在着若干种参数化方式(Parameterization)。
  3. 这两个方程描述了最基本的 SLAM 问题:当我们知道运动测量的读数 u u ,以及传感器的读数 z z 时,如何求解定位问题(估计 x x )和建图问题(估计 y y )?这时,我们把 SLAM问题建模成了一个状态估计问题:即如何通过带有噪声的测量数据,估计内部的、隐藏着的状态变量。

3.2. 状态估计问题

  1. 状态估计问题的求解,与两个方程的具体形式,以及噪声服从哪种分布有关。
  2. 按照运动和观测方程是否为线性,噪声是否服从高斯分布进行分类,分为线性/非线性和高斯/非高斯系统。
  3. 线性高斯系统最简单,它的无偏的最优估计可以由卡尔曼滤波器(Kalman Filter, KF)给出。
  4. 非线性非高斯系统(Non-Linear Non-Gaussian, NLNG 系统)较复杂,使用以扩展卡尔曼滤波器(Extended Kalman Filter, EKF)和非线性优化两大类方法去求解。
  5. 时至今日,主流视觉 SLAM 使用以图优化

4. 实践

github:第一、二章实践

猜你喜欢

转载自blog.csdn.net/weixin_40883049/article/details/86485364