当前位置:   article > 正文

视觉SLAM十四讲学习笔记——初识SLAM(ch1-2)_basalt slam

basalt slam

视觉SLAM十四讲PDF

一、本节目标

理解一个视觉 SLAM 框架由哪几个模块组成,各模块的任务是什么
搭建编程环境,为开发和实验做准备。
理解如何在 Linux下编译并运行一个程序。如果它出了问题,我们又如何对它进行调试。
掌握cmake的基本使用方法
  • 1
  • 2
  • 3
  • 4
  1. SLAM:Simultaneous Localization and Mapping 同时定位与与地图构建
  2. 搭载特定传感器的主体,在没有环境先验信息的情况下,于运动过程中建立环境的模型,同时估计自己的运动。
  3. 视觉SLAM:以相机为主要传感器的SLAM
  4. 问题:从图像中估计相机运动以及环境的情况
  5. 应用:机器人、AR/VR、无人机、无人驾驶等
  6. 学习视觉SLAM的难处:在这里插入图片描述

二、传感器

小萝卜的例子:
假设有个叫“小萝卜”的机器人,搭载了传感器。

问题:
1.我在什么地方?一一定位。
2.周围环境是什么样?——建图。
定位”和“建图”,是相互耦合的两个问题,准确的定位需要精确的地图,精确的地图来自准确的定位。
可以看成感知的“内外之分”。一方面要明白自身的状态 (即位置),另一方面也要了解外在的环境 (即地图)。当然,解决这两个问题的方法非常之多。比方说,在房间地板上铺设导引线,在墙壁上贴识别二维码,在桌子上放置无线电定位设备。

下面展示了一些传感器的图片。

(a) 利用二维码进行定位的增强现实软件;
(b) GPS 定位装置
(c) 铺设导轨的小车;
(d) 激光雷达;
(e) IMU 单元;
(f) 双目相机。
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

获取这些信息需要通过传感器,传感器又可以分为携带于机器人本体上的安装于环境中的

2.1 传感器分类

2.1.1 携带于机器人本体上的传感器

例如机器人的激光传感器轮式编码器相机激光惯性测量单元 (Imertial Measurement Unit,IMU)等等,它们测到的通常都是一些间接的物理量而不是直接的位置数据。
1. 轮式编码器会测到轮子转动的角度
2. IMU 测量运动的角速度加速度
3. 相机和激光则读取外部环境的某种观测数据。

通过一些间接的手段,从这些数据推算自己的位置。虽然这听上去是一种迂回战术,但更明显的好处是,它没有对环境提出任何要求,使得这种定位方案可适用于未知环境。

2.1.2 安装于环境中的传感器

例如导轨磁条二维码MarkerGPS(室外) 等等。
安装于环境中的传感设备,通常能够直接测量到机器人的位置信息,简单有效地解决定位问题。
然而,由于它们必须在环境中设置,在一定程度上限制了机器人的使用范围。比方说,有些地方没有 GPS信号,有些地方无法铺设导轨,这时怎么做定位呢?
——————————————————————
在 SLAM 中,非常强调未知环境。在理论上我们没法限制小萝卜的使用环境,这意味着我们没法假设像 GPS 这些外部传感器都能顺利工作。因此,使用携带式的传感器来完成 SLAM 是我们重点关心的问题。
特别地,当谈论视觉 SLAM 时,主要是指如何用相机解决定位和建图问题。

SLAM中使用的相机与我们平时见到的单反摄像头并不是同一个东西。它往往更加简单,不携带昂贵的镜头,以一定速率拍摄周围的环境,形成一个连续的视频流。普通的摄像头能以每秒钟 30 张图片的速度采集图像,高速相机则更快一些。
按照相机的工作方式,我们把相机分为三个大类:

  • 单目 (Monocular)
  • 双目 (Stereo)
  • 深度相机(RGB-D)
    在这里插入图片描述
    此外,SLAM 中还有全景相机Event 相机等特殊或新兴的种类。

2.2 相机传感器分类

2.2.1 单目相机

只使用一个摄像头进行 SLAM 的做法称为单目 SLAM (Monocular SLAM)。
这种传感器结构特别的简单成本特别的低,所以单目 SLAM 非常受研究者关注。单目相机的数据:照片。照片本质上是拍照时的场景 (Scene),在相机的成像平面上留下的一个投影。它以二维的形式反映了三维的世界。显然,这个过程丢掉了场景的一个维度:也就是所谓的深度(或距离)。在单目相机中,我们无法通过单个图片来计算场景中物体离我们的距离(远近)一一之后我们会看到,这个距离将是 SLAM 中非常关键的信息。
在单张图像里,无法确定一个物体的真实大小。它可能是一个很大但很远的物体,也可能是一个很近但很小的物体。由于近大远小的原因,它们可能在图像中变成同样大小的样子。
在这里插入图片描述
不知深度时,手掌上的是真人还是模型?

由于单目相机只是三维空间的二维投影,所以,如果我们真想恢复三维结构,必须移动相机的视角。在单目 SLAM 中也是同样的原理。我们必须移动相机之后,才能估计它的运动(Motion),同时估计场景中物体的远近大小,不妨称之为结构 (Structure)。那么,怎么估计这些运动和结构呢?从生活经验中我们知道,如果相机往右移动,那么图像里的东西就会往左边移动一一这就给我们推测运动带来了信息。
另一方面,单目 SLAM 估计的轨迹和地图,将与真实的轨迹、地图,相差一个因子也就是所谓的尺度 (Scale)。由于单目 SLAM 无法仅凭图像确定这个真实尺度,所以又称为尺度不确定性
平移之后才能计算深度,以及无法确定真实尺度,这两件事情给单目 SLAM 的应用造成了很大的麻烦。本质原因是通过单张图像无法确定深度。所以,为了得到这个深度,人们又开始使用双目和深度相机。

2.2.2 双目相机Stereo

尽管都是为测量距离,但双目相机与深度相机测量深度的原理是不一样的。
双目相机(Stereo) 的目的,在于通过某种手段测量物体离我们的距离,克服单目无法知道距离的缺点。如果知道了距离,场景的三维结构就可以通过单个图像恢复出来,也就消除了尺度不确定性
双目相机由两个单目相机组成,两个相机之间的距离称为:基线(Baseline)是已知的。通过这个基线来估计每个像素的空间位置一这和人眼非常相似。
(如果对双目相机进行拓展,也可以搭建多目相机,不过本质上并没有什么不同。)
双目相机测量到的深度范围与基线相关,基线距离越大,能够测量到的就越远。 双目相机的距离估计是比较左右眼的图像获得的,并不依赖其他传感设备,所以它既可以应用在室内,亦可应用于室外。双目或多目相机的缺点是配置与标定均较为复杂,其深度量程精度受双目的基线分辨率限制,而且视差的计算非常消耗计算资源,需要使用 GPU 和FPGA 设备加速后,才能实时输出整张图像的距离信息。因此在现有的条件下,计算量是双目的主要问题之一。
在这里插入图片描述

2.2.3 深度相机RGB-D

深度相机又称 RGB-D 相机,是2010 年左右开始兴起的一种相机,它最大的特点是可以通过红外结构光或 Time-of-Flight (ToF)原理,像激光传感器那样,通过主动向物体发射光并接收返回的光,测出物体离相机的距离。

  • 通过物理的测量手段,所以相比于双目可节省大量的计算量
  • 目前常用的 RGB-D 相机包括: Kinect/Kinect V2、Xtion live pro、Realsense 等。
  • 现在多数 RGB-D 相机还存在:测量范围窄、噪声大、视野小、易受日光干扰、无法测量透射材质等诸多问题。
  • 在 SLAM 方面主要用于:室内 SLAM室外则较难应用

TOF是飞行时间(Time of Flight)技术的缩写,即传感器发出经调制的近红外光,
遇物体后反射,传感器通过计算光线发射和反射时间差或相位差,来换算被拍摄景物的距离,
以产生深度信息,此外再结合传统的相机拍摄,
就能将物体的三维轮廓以不同颜色代表不同距离的地形图方式呈现出来。
  • 1
  • 2
  • 3
  • 4

在这里插入图片描述

2.2.4 总结

  • 单目相机
  1. 单目相机判断运动:平移;
  2. 单目相机判断远近:视差(远的移动慢,近的移动快);
  3. 单目相机无法确定物体真实尺度
  • 双目相机
  1. 双目相机获取深度的方法:基于双目的基线值
  2. 基线值越大,深度值越大
  3. 室内室外均可用
  4. 深度量程精度受双目的基线分辨率限制
  5. 消耗计算资源,需要使用 GPU 和FPGA 设备
  • RGB-D相机
  1. RGB-D测距原理:红外结构光或 Time-of-Flight (ToF);
  2. 相比于双目可节省大量的计算量;
  3. RGB-D相机存在问题:测量范围窄、噪声大、视野小、易受日光干扰、无法测量透射材质等;
  4. 主要用于室内SLAM。
    ——————————————————————————
    经过对几种常见相机的讨论,视觉 SLAM的目标是通过这样的一些图像,进行定位和地图构建。它不是某种算法,只要我们输入数据,就可以往外不断地输出定位和地图信息了。SLAM 需要一个完善的算法框架,而经过研究者们长期的研究工作,现有这个框架已经定型了

三、视觉SLAM框架

在这里插入图片描述
整个视觉 SLAM 流程分为以下几步:

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

3.1 视觉里程计

  • 视觉里程计(Visualodometry,VO)
    • 相邻图像估计相机运动;
    • 基本形式:通过两张图像计算运动和结构;
    • 不可避免的产生漂移
  • 方法
    • 第七讲 特征点法;
    • 第八讲 直接法(最近比较流行)。
      在这里插入图片描述

3.2 回环检测

  • 回环检测(Loop Closing)
    • 检测机器人是否回到早先位置;
    • 识别到达过的场景;
    • 计算图像之间的相似性。
  • 方法
    • 第十二讲 词袋模型;
      回环检测

3.3 后端优化

后端优化(Optimization)

  • 从带有噪声的数据中优化轨迹和地图状态估计问题;
  • 最大后验概率估计MAP;
  • 第十、十一讲。前期以EKF滤波器为代表,现在以图优化为代表。

3.4 建图

  • 建图 第十三讲
    • 用于导航、规划、通讯、可视化、交互等
    • 度量地图vs拓扑地图
    • 稀疏地图vs稠密地图
      在这里插入图片描述

四、SLAM问题的数学描述

假设小萝卜正携带着某种传感器在未知环境里运动,怎么用数学语言描述这件事呢?

  • 首先,把一段连续时间的运动变成了离散时刻t = 1,…,K 当中发生的事情。
  • 在这些时刻,用x 表示小萝卜自身的位置。各时刻的位置记为x1 ,…,xk,它们构成了小萝卜的轨迹。
  • 在地图方面,假设地图中包含了许多的路标(Landmark)组成的,每时刻小萝卜都会观测到一些路标数据。如果有N个路标,就用y1,y2…yN表示。

离散时间:t=1,2,3…k
小萝卜位置:x1,x2,…,xk
路标(三维空间点):y1,y2,…yn

在这样设定中,“小萝卜携带着传感器在环境中运动”,由运动方程观测方程共同描述!

4.1 运动方程

方程表述内容:k-1时刻到k时刻,小萝卜的位置x是如何变化的。

小萝卜从上一时刻到下一时刻运动方程:
在这里插入图片描述
xk-1——上一时刻位置
uk——运动传感器的读数(有时也叫输入
wk——噪声
通常,机器人会携带一个测量自身运动的传感器,比如说码盘或惯性传感器。这个传感器可以测量有关运动的读数,但不一定直接是位置之差,还可能是加速度角速度等信息。然而,无论是什么传感器,都能使用上述通用的、抽象的数学模型。

4.2 观测方程

方程表述内容: 当小萝卜在xk 位置上看到某个路标点 yj,产生了一个观测数据 zk,j
在这里插入图片描述
xk——当前位置
yj——某个路标点
vk,j——噪声

4.3 两个基本方程

如果采集到多个路标,可能有多个观测方程!!
在这里插入图片描述

  • Question:
    1. 位置是三维的,如何表述?——第三、四讲
    2. 观测是相机中的像素点,如何表述?——第五讲
    3. 已知u(运动传感器的读数),z(观测方程)时,如何推断x(相机位置),y(路标位置)

4.4 运动方程和观测方程的参数化表示

4.4.1 运动方程

假设小萝卜在平面中运动,那么它的位姿(位置和姿态)由两个位置和一个转交转角来描述,即
在这里插入图片描述

在这里插入图片描述
不过,并不是所有的传感器都直接能测量出位移和角度变化,所以也存在着其他形式更加复杂的运动方程,那时我们可能需要进行动力学分析。

4.4.2 观测方程

在这里插入图片描述

在这里插入图片描述

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/煮酒与君饮/article/detail/801437
推荐阅读
  

闽ICP备14008679号