注:本文讲解的是整个系统的运行过程,不涉及具体代码的讲解。均假设系统运行没有重复构建现象
需要说明该系统分为三个线程并行进行:追踪线程、局部建图线程、回环检测线程
1.从main函数讲起,进行整个系统初始化,包括判断输入传感器的类型,加载词袋模型,初始化三个线程并运行,设置进程间的指针。
2.依次遍历每张图像,将图像传入SLAM系统,先判断系统的类型(纯追踪模式还是追踪+建图),接下来根据传入的图像判断相机的位姿。
3.每一帧图像进入均需要提取特征点,唯一的区别是当第一帧图像图像进入时,要求提取2倍的特征点数目。接下来进入追踪线程。
4.追踪线程包含三部分,单目初始化,追踪,记录位姿信息,用于轨迹恢复。
4.1 单目初始化过程,首先第一帧进来的时候,初始化器还没有被构造,此时就需要将第一帧(即当前帧的数据)赋值给初始化帧,同时也复制给上一帧,将“上一帧”也即第一帧的去渐变后的特征点保存在带匹配的容器中。当第二帧进入的时候,初始化器已经构造完成,并且第二帧的数据特征点数目足够(即满足两帧之间匹配的要求),将当前帧与初始化帧的特征点进行匹配,利用匹配特征对,求解H和F矩阵,恢复相机位姿,恢复特征点的地图点(即三维坐标)。
4.2 追踪:三种追踪模式,基于关键帧追踪模型、基于恒速模型追踪、基于重定位模型追踪。常用的是基于恒速模型的追踪模式。
4.3 记录位姿信息