前言
1.标注好的源码放在最后边了,可直接看标注好的源码,前边的内容只是对编写代码做的简单梳理,如果能够对大家学习代码时有帮助那就希望大家能够点赞+收藏吧!(嘿嘿)
2.如果大家在学习的过程中发现我存在错误,请大家在评论区指出来,我会及时修改并回复。(谢谢)
一、代码逻辑
1.包含必要的标准库和第三方库头文件:
#include <iostream>
#include <vector>
#include <fstream>
#include <opencv2/core/core.hpp>
#include <System.h>
2.声明函数原型:
a.函数原型一般放在main函数前边确保在调用函数时,编译器已经知道该函数的声明和参数类型。
b.由于ORB-SLAM2提供了三种模式(单目、双目、RGBD),故这个加载图像函数LoadImages在每个程序中不同(参数列表里参数的不同)。
void LoadImages(const string &strAssociationFilename, vector<string> &vstrImageFilenamesRGB,
vector<string> &vstrImageFilenamesD, vector<double> &vTimestamps);
3. 编写main 函数:
a.参数验证:检查传入参数的数量并给出提示。
if (argc != 5) {
cerr << "Usage: ..." << endl;
return 1;
}
b.初始化数据结构:定义并初始化保存图像文件名、深度图文件名和时间戳的向量。
vector<string> vstrImageFilenamesRGB;
vector<string> vstrImageFilenamesD;
vector<double> vTimestamps;
c.调用 LoadImages 函数:读取关联文件数据。
LoadImages(strAssociationFilename, vstrImageFilenamesRGB, vstrImageFilenamesD, vTimestamps);
d.检查图像和深度图的数量一致性。
if (vstrImageFilenamesRGB.empty() || vstrImageFilenamesD.size() != vstrImageFilenamesRGB.size()) {
cerr << "Error: ..." << endl;
return 1;
}
e.创建 SLAM 系统实例,配置参数。
ORB_SLAM2::System SLAM(argv[1], argv[2], ORB_SLAM2::System::RGBD, true);
构造函数具体定义如下: