01_初识SLAM
什么是slam?
SLAM 是Simultaneous Localization and Mapping的缩写, 中文译作 “同时定位与地图构建”。它是指搭载特定传感器的主体 , 在没有环境先验信息的情况下,于运动过程中建立环境的模型,同时估计自己的运动。如果这里的传感器主要为相机,那就称为 “视觉SLAM”。
- 简单理解:假如我们有一个机器人,它的眼睛就是相机,它在一个空间不停运动。机器人需要知道自己所处的位置信息和运动轨迹,然后对自己所看到的周围环境进行建图,这就是slam。
- 定位与建图等于内外兼修,定位侧重于对于自身的了解,建图侧重对外在的了解。但是他们又是相互关联,因为我为了了解自身的位置,又必须知道周围的环境信息,还有就是说如果我们定位就是错误的,那肯定构建地图也是错误的。
传感器
传感器分为两类,一种是外质的(安装在环境中),另一种是内质的(安装在机器人本身,可以随时移动)。
- 内质:IMU、激光、相机(感受机器人本体信息)
- 外质:二维码Marker、GPS、导轨等等,这种有环境限制
这里我们讨论相机,主要是分为单目相机(Monocular)、双目相机(Stereo)和深度相机(RGB-D)三大类。
- 单目相机:没有深度,需要使用其它手段进行估计,它会存在一个尺度不确定性,因为位置是相对的
- 双目相机:通过视差计算深度,通过基线来估计每个像素的空间位置,但是计算量很大
- 深度相机(RGB-D):通过物理方法测量深度,好处是可以直接测量,但是对环境要求高
经典视觉SLAM框架
我们先来看下整体的宏观架构图:
这里通俗的理解就是假如一个机器人,通过传感器获取到了一些列数据,经过一顿的折腾,最后知道原来我在这里,周围原来是这个样子。
整个视觉slam流程如下:
-
传感器信息读取。在视觉SLAM中主要为相机图像信息的读取和预处理。 如果是在机器人中 、还可能有码盘 、惯性传感器等信息的读取和同步。(简单理解就是获取我们需要的数据)
-
前端视觉里程计(Visual Odometry, VO)。 视觉里程计的任务是估算相邻图像间相机的运动 , 以及局部地图的样子。VO又称为前端(Front End)。
-
主要方法:特征点法,直接法
-
这里需要注意的是,因为是相邻的图像做计算,所以构建的是局部地图。
-
通过VO我们得到自己轨迹和各个空间点的位置,这里会出现一个累计漂移,其实就是我们每次估计带来的误差。因此需要后面的后端优化和回环检测。
-
-
后端(非线性)优化(Optimization)。后端接受不同时刻视觉里程计的相机位姿,以及回环检测的信息,对它们进行优化,得到全局一致的轨迹和地图。 由于接在VO之后,又称为后端(Back End)
-
位姿:位置(空间坐标)和姿态(角度)
-
前端主要是和计算机视觉相关,后端主要是滤波和非线性优化算法,对数学水平要求较高
-
-
回环检测(Loop Closure Detection)。同环检测判断机器人是否到达过先前的位置。如果检测到同环,它会把信息提供给后端进行处理。
- 检测到同样的位置,然后把误差给拉回来
-
建图(Mapping) 。它根据估计的轨迹,建立与任务要求对应的地图。
SLAM问题的数学描述
- 运动方程:它的意思是是说通过前一时刻的位置和当前传感器的读数,来估算当前时刻的位置。
- 观测方程:它的意思就是说当前机器人时刻看到某个坐标点,产生了一个观测数据。也就是对路标点拍摄后,得到图像中像素的过程。