01_初识SLAM

什么是slam?

SLAM 是Simultaneous Localization and Mapping的缩写, 中文译作 “同时定位与地图构建”。它是指搭载特定传感器的主体 , 在没有环境先验信息的情况下,于运动过程中建立环境的模型,同时估计自己的运动。如果这里的传感器主要为相机,那就称为 “视觉SLAM”。

  • 简单理解:假如我们有一个机器人,它的眼睛就是相机,它在一个空间不停运动。机器人需要知道自己所处的位置信息和运动轨迹,然后对自己所看到的周围环境进行建图,这就是slam。

  • 定位与建图等于内外兼修,定位侧重于对于自身的了解,建图侧重对外在的了解。但是他们又是相互关联,因为我为了了解自身的位置,又必须知道周围的环境信息,还有就是说如果我们定位就是错误的,那肯定构建地图也是错误的。

传感器

传感器分为两类,一种是外质的(安装在环境中),另一种是内质的(安装在机器人本身,可以随时移动)。

  • 内质:IMU、激光、相机(感受机器人本体信息)
  • 外质:二维码Marker、GPS、导轨等等,这种有环境限制

这里我们讨论相机,主要是分为单目相机(Monocular)、双目相机(Stereo)和深度相机(RGB-D)三大类。

  • 单目相机:没有深度,需要使用其它手段进行估计,它会存在一个尺度不确定性,因为位置是相对的
  • 双目相机:通过视差计算深度,通过基线来估计每个像素的空间位置,但是计算量很大
  • 深度相机(RGB-D):通过物理方法测量深度,好处是可以直接测量,但是对环境要求高

image-20211009160922110

经典视觉SLAM框架

我们先来看下整体的宏观架构图:

image-20211009163003602

这里通俗的理解就是假如一个机器人,通过传感器获取到了一些列数据,经过一顿的折腾,最后知道原来我在这里,周围原来是这个样子。

整个视觉slam流程如下

  1. 传感器信息读取。在视觉SLAM中主要为相机图像信息的读取和预处理。 如果是在机器人中 、还可能有码盘 、惯性传感器等信息的读取和同步。(简单理解就是获取我们需要的数据)

  2. 前端视觉里程计(Visual Odometry, VO)。 视觉里程计的任务是估算相邻图像间相机的运动 , 以及局部地图的样子。VO又称为前端(Front End)。

  • 主要方法:特征点法,直接法

  • 这里需要注意的是,因为是相邻的图像做计算,所以构建的是局部地图。

  • 通过VO我们得到自己轨迹和各个空间点的位置,这里会出现一个累计漂移,其实就是我们每次估计带来的误差。因此需要后面的后端优化和回环检测。

  1. 后端(非线性)优化(Optimization)。后端接受不同时刻视觉里程计的相机位姿,以及回环检测的信息,对它们进行优化,得到全局一致的轨迹和地图。 由于接在VO之后,又称为后端(Back End)
  • 位姿:位置(空间坐标)和姿态(角度)
  • 前端主要是和计算机视觉相关,后端主要是滤波和非线性优化算法,对数学水平要求较高
  1. 回环检测(Loop Closure Detection)。同环检测判断机器人是否到达过先前的位置。如果检测到同环,它会把信息提供给后端进行处理。
  • 检测到同样的位置,然后把误差给拉回来
  1. 建图(Mapping) 。它根据估计的轨迹,建立与任务要求对应的地图。

image-20211009171448682

SLAM问题的数学描述

  • 运动方程:它的意思是是说通过前一时刻的位置和当前传感器的读数,来估算当前时刻的位置。(也就是定位)

image-20211009172829248

  • 观测方程:它的意思就是说当前时刻看到某个坐标点,产生了一个观测数据。(也就是建图)

image-20211009175821933

原文地址:https://www.cnblogs.com/LittleFishC/p/15387206.html