视觉里程计VO的搭建基本都会有以下几个问题:怎么管理地图点,如何处理误匹配,如何选择关键帧。。。由简到繁进行。
1. 视觉里程计分单目,双目,RGB-D三大类。单目视觉相对复杂,RGB-D最简单,没有初始化,也没有尺度问题。
2. 编写小规模的库时,往往建立一些文件夹,把源代码,头文件,文档,测试数据,配置文件,日志等分类存放。当一个库内容很多时,往往还会把代码分解各个独立的小模块,便于测试。OpenCV或g2o的组织方式就可以参考借鉴。小型程序揉在一起也没什么。我建立如下文件夹来组织代码文件:
3. 构造基本的数据结构
a. 帧:帧是相机采集到的图像单位。它主要包含一个图像(RGB-D情形下是一对图像)。此外,还有特征点,位姿,内参等信息。视觉slam中谈论关键帧,由于相机采集的数据很多,存储所有的数据显然不实际,通常选取我们认为重要的帧保存起来,并认为相机轨迹可以用这些关键帧来描述。然而关键帧的选择方法基本基于工程经验,很少有理论上的指导。
b. 路标:路标点即图像中的特征点。在相机运动后,可以估计它们的3D位置。通常,会把路标点放在一个地图当中,并讲新来的帧与地图中的路标点进行匹配,估计相机位姿。
c.帧的位姿与路标的位置估计相当于一个局部的SLAM问题&#x