MSC-VO是ICRA2022的一篇点线视觉SLAM论文,本身是在ORBSLAM2的基础上改进的,改进的部分在于为SLAM系统引入了线段,并且使用了曼哈顿坐标系与结构化约束进行优化,之前看过的论文记录可以参考链接,年前把线段匹配和均匀化的内容试着做了一下,现在计划看一下这篇文章的代码看一下后续的代码应该如何实现。
一、初始化部分
MSC-VO本身是基于ORBSLAM2的改进,所以基本的代码框架还是ORBSLAM2的那些东西,一个比较大的区别在于MSC-VO更换了数据的内容,将图像换为了深度图,也就是RGBD图像,所以在MSC-VO的代码里面,如果输入内容不是RGBD图像,就会报错。
整个MSC-VO的主函数在Examples文件夹下的RGB-D下的rgbd-tum.cc文件,该文件内部写有整个框架的主函数,通过初始化SLAM对象来调用其余的内容,初始化的部分和ORBSLAM2几乎没有差别,这里不在展开说了,之后根据文件名读取RGBD图像,调用SLAM对象的TrackRGBD函数进行后续的处理。
二、Tracking线程
通过SLAM对象调用TrackRGBD函数,将图像与深度图传入到函数中。这里稍微补充一下,RGBD的数据集其实是两组图组合出来的,这里拿ORBSLAM使用的那个桌子的数据集来说,下载好的数据集内部其实包括这么几个部分:
其中rgb文件夹下的图像和我们平时用的单目相机图像是一样的,就是带颜色的相机图像,而depth文件夹则存放了深度图像,这里的深度图实际上是单通道的灰度图,用对应位置上的像素值来表示传感器感知到的深度值,深度图和RGB图像之间用提前存好的关系来进行对齐,从而实现深度的感知。
在TrackRGBD函数中,通过调用mpTracker对象(也就是tracking线程)的GrabImageRGBD函数来计算位姿,进入这个函数后通过cvtColor来进行通道的转换,将RGB图像转换为灰度图。转换好的图像用于初始化帧对象,由于使用了线段和曼哈顿坐标系,所以一些写法也发生了改变。
下图为ORBSLAM2代码中对应位置的写法:
可以看出,构造函数中增加了线段的提取器和曼哈顿距离的相关处理的内容,这几个对象都是在构造tracking对象的时候进行初始化的,位置在tracking对象的构造函数中:
在进入tracking线程之前,我们先简单看一下这两个对象的内容。