引言:通过前面的推送我们已经对SLAM有了个大体的认识。(初识视觉SLAM)下面来看经典的视觉SLAM框架,了解一下视觉SLAM究竟由哪几个模块组成。
本文选自《视觉SLAM十四讲:从理论到实践》。
整体视觉SLAM流程图。
整个视觉SLAM流程包括以下步骤。
- 传感器信息读取。在视觉SLAM中主要为相机图像信息的读取和预处理。如果是在机器人中,还可能有码盘、惯性传感器等信息的读取和同步。
- 视觉里程计(Visual Odometry,VO)。视觉里程计的任务是估算相邻图像间相机的运动,以及局部地图的样子。VO又称为前端(Front End)。
- 后端优化(Optimization)。后端接受不同时刻视觉里程计测量的相机位姿,以及回环检测的信息,对它们进行优化,得到全局一致的轨迹和地图。由于接在VO之后,又称为后端(Back End)。
- 回环检测(Loop Closing)。回环检测判断机器人是否到达过先前的位置。如果检测到回环,它会把信息提供给后端进行处理。
- 建图(Mapping)。它根据估计的轨迹,建立与任务要求对应的地图。
经典的视觉SLAM框架是过去十几年的研究成果。这个框架本身及其所包含的算法已经基本定型,并且已经在许多视觉程序库和机器人程序库中提供。依靠这些算法,我们能够构建一个视觉SLAM系统,使之在正常的工作环境里实时定位与建图。因此,我们说,如果把工作环境限定在静态、刚体,光照变化不明显、没有人为干扰的场景,那么,这个SLAM系统是相当成熟的了。
读者可能还没有理解上面几个模块的概念,下面就来详细介绍各个模块具体的任务。这里您只需对各模块有一个直观的、定性的理解即可。
视觉里程计
视觉里程计关心的是相邻图像之间的相机运动,最简单的情况当然是两张图像之间的运动关系。例如,当看到下图时,我们会自然地反应出右图应该是左图向左旋转一定角度的结果(在视频情况下感觉会更加自然)。我们不妨思考一下:自己是怎么知道“向左旋转”这件事情的呢?人类早已习惯于用眼睛探索世界,估计自己的位置,但又往往难以用理性的语言描述我们的直觉。看到时,我们会自然地认为,这个场景中离我们近的是吧台,远处是墙壁和黑板。当相机向左转动时,吧台离我们近的部分出现在视野中,而右侧远处的柜子则移出了视