泡泡机器人上已经有公开课ORB-SLAM2的代码详解了,我也先看了一个多小时的视频,后来发现看完还是迷迷糊糊,自己没看源码,根本不明白讲的什么,因此,打开文件开始阅读源码。

为了阅读逻辑清楚,我从ORB-SLAM的Example文件中的mono_eourc.cpp开始看。

1.检查运行程序需要的可执行文件、字典路径、一些内参设置文件的路径(比如相机内参、畸变等、尺度因子)、放图片的文件夹目录、记录时间的文件路径。一共五个参数,如果在终端上没有输满这五个参数,会报错"Usage: ./mono_tum path_to_vocabulary path_to_settings path_to_image_folder path_to_times_file"。

2.加载输入的图片和时间序列,将它们放在定义好的向量变量中,准备slam输入数据。

3.开始创建SLAM系统了。这一步用到了system.cpp,下面开始讲system.cpp的主要内容和主要目的:

(1)主要目的:创建SLAM系统中的4个线程,完成参数的设置。

(2)内容:

a.传入回环检测所需要的字典文件路径,系统内参设置文件的路径,设置传感器类型、使用的模式(即前端只追踪还是既追踪也定位的模式)。

b.开始判断上面传入的参数是否有效,若无效将输出错误提醒信息

c.创建一系列变量:关键帧数据库、地图、画图。

d.通过创建track、localmapp、loopcloser、viewer四个指针变量,来初始化四个线程。

e.再通过各个指针变量的成员函数来指定四个线程相互的关系。

4.开始对图片序列进行遍历追踪,也就是说一个一个图片地传入track线程里,单目就是TrackMonocular(),传入的参数是一张图片和时间戳。

至此,也就真正的进入了SLAM系统内,进行追踪、优化、定位、回环等问题。

下一节,开始进入TrackMonocular()函数,更深入的讲解ORB-SLAM2代码!

05-11 04:26