从opencv的基础实现学习完毕后,接下来依照视觉slam框架从理论到实践(第二版)的路线进行学习,主要以学习笔记的形式进行要点记录。
目录
在视觉SLAM 中整体作业流程可分为:
1.相机图像信息的读取和预处理。如果是在机器人中、还可能有码盘、惯性传感器等信息的读取和同步。
2.前端视觉里程计( Visual Odometry, VO ) 。视觉里程计的任务是估算相邻图像间相机的运动,以及局部地图的样子VO 又称为前端( Front End )。
3 . 后端(非线性)优化( Optimiza ti on )。后端接受不同时刻视觉里程计t则址的相机位姿,以及回环检测的信息,对它们进行优化, 得到全局一致的轨迹和地图。由于接在VO 之后,又称为后端( Back End )
4.回环检测( Loop Closure Detection ) 同环检测判断机器人是否到达过先前的位置。如果检测到同环,它会把信息提供给后端进行处理。
5.建图( Mapping ) 它根据估计的轨迹建立与任务要求对应的地图。
1.数据里程计
视觉里程计关心相邻图像之间的相机运动, 最简单的情况当然是两张图像之间的运动关系,基于上一期opencv学习的特征点匹配->极线估计->基于极线约束的特征点匹配->基于已知相机内参的本质矩阵求解,可以估计两张图像的位姿变化。
仅通过视觉里程计来估计轨迹、将不可避免地出现累积漂移,因为我们求取的特征点往往有误差,误差通过不断积累就会产生很大的漂移。
为了解决漂移问题我们还需要两种技术:后端优化 和回环检测,回环检测负责把“机器人回到原始位置”的事情检测出来,而后端优化则根据该信息,校正整个轨迹的形状。
2.后端优化
后端优化主要指处理SLAM 过程中的噪声问题,在现实中、再精确的传感器也带有一定的噪声。后端优化要考虑的问题,就是如何从这些带有噪声的数据中估计整个系统的状态,以及这个状态估计的不确定性有多大,这称为最大后验概率估计(Maximum-a-Posteriori , MAP )。在视觉SLAM 中,前端和计算机视觉研究领域更为相关,比如图像的特征提取与匹配等,后端则主要是滤波与非线性优化算法。
3.回环检测
回环检测,又称闭环检测,主要解决位置估计随时间漂移的问题。假设实际情况下机器人经过一段时间的运动后回到了原点,但是由于漂移,它的位置估计值却没有回到原点。事实上,我们认为、地图存在的主要意义是让机器人知晓自已到过的地方。为了实现回环检测, 我们需要让机器人具有识别到过的场景的能力,可以在机器人下方设置一个标志物(如一张二维码图片)。它只要看到了这个标志,就知道自己回到了原点,该标志物实质上是一种环境中的传感器,对应用环境做了限制。
4.建图
一组空间点的集合可以称为地图,地图的形式随SLAM 的应用场合而定。大体上讲,可以分为度量地图与拓扑地图两种。
度量地图强调精确地表示地图中物体的位置关系,通常用稀疏( Sparse ) 与稠密( Dense) 对其分类。稀疏地图进行了一定程度的抽象,并不需要表达所有的物体。稠密地图着重千建模所有看到的东西。定位时用稀疏路标地图就足够了。而用于导航时, 则往往需要稠密地图,稠密地图通常按照某种分辨率,由许多个小块组成, 在二维度量地图中体现为许多个小格子(Gri d ),而在三维度量地图中则体现为许多小方块( Voxel )。
拓扑地图(Topological Map),拓扑地图更强调地图元素之间的关系。拓扑地图是一个图( Graph ) ,由节点和边组成,只考虑节点间的连通性,例如只关注A 、B 点是连通的,而不考虑如何从A 点到达B 点。