ORB-SLAM3在windows下的编译使用
一. 数据集
1.1 数据集介绍
Euroc:基于室内的MAV(Micro Aerial Vehicle,微型飞行器),一共两个场景(Machine Hall + Vicon Room),其中每个数据集包含2个下载连接:
- ROS(Robot Operating System) bag:机器人操作库,适用于嵌入式,这里推荐一个很好的双目+IMU应用在jetson nano上的git。
- ASL Dataset Format:数据集结构,包含传感器文件和双目相机的图片。
1.2 数据使用介绍
可用的数据包含:
- Visual-Inertial Sensor Unit(视觉惯性传感器单元)
- Stereo Images(双目图片)
- IMU(惯导数据)
- Ground-Truth位姿轨迹
- Vicon 6轴运动姿态捕捉系统
- Leica MS50 3维姿态镭射追踪
- Leica MS50 3维重构
1.3 IMU数据介绍
- w_RS_S_x [rad s^-1] :MAV在R坐标系下的x轴角速度信息,单位rad/s
- w_RS_S_y [rad s^-1] :MAV在R坐标系下的y轴角速度信息,单位rad/s
- w_RS_S_z [rad s^-1] :MAV在R坐标系下的z轴角速度信息,单位rad/s
- a_RS_S_x [m s^-2]:MAV在R坐标系下x轴的线加速度信息,单位m/s^2
- a_RS_S_y [m s^-2]:MAV在R坐标系下y轴的线加速度信息,单位m/s^2
- a_RS_S_z [m s^-2]:MAV在R坐标系下z轴的线加速度信息,单位m/s^2
二. 第三方包编译
ORB_SLAM3论文地址:https://arxiv.org/pdf/2007.11898.pdf
使用ORB_SLAM3官方git,推荐使用的系统为ubuntu 18.04,本人用win 10下进行测试的,这里推荐一个在win 10下编译ORB_SLAM3的git,目前在该仓库下编译运行没毛病!
2.1 前期依赖的第三方包
- eigen:线性算术的C++模板库(属于g2o的依赖),这里直接用vcpkg安装
vcpkg install eigen
- boost:后面编译ORB_SLAM3库需要,这里也是直接用vcpkg安装
vcpkg install boost
。 - opencv3.4.11:编译DBoW2和ORB_SLAM3需要。直接上官网下载exe即可,当然也可以利用vcpkg进行安装。
2.2 DBoW2
用于SLAM回环检测,这里需要配置opencv环境。具体过程如下:
-
给
Thirdparty/DBoW2/CMakeLists.txt
配置opencv3.4.11的路径set(OpenCV_DIR "D:/software/opencv/opencv/build")
-
在
Thirdparty/DBoW2
路径下新建一个build
文件夹,cmake生成cmake ..
-
看到
configuration done
的时候,用vs2019打开build/DBoW2.sln
-
将配置改成
release
,同时右键项目==> 属性 ==> 常规 ==> 配置类型 ==> 静态库(.lib);属性 ==> 高级 ==> 目标文件扩展名 ==> .lib;C/C++ ==> 代码生成 ==> 运行库 ==> 多线程 (/MT) -
右键项目 ==> 生成,即可看到生成好的lib文件
Thirdparty/DBoW2/lib/Release/DBoW2.lib
2.3 g2o
用于图优化的框架。具体过程如下:
- 在
Thirdparty/g2o
路径下新建一个build
文件夹,cmake生成cmake ..
- 看到
configuration done
的时候,用vs2019打开build/g2o.sln
- 将配置改成
release
,同时右键项目==> 属性 ==> 常规 ==> 配置类型 ==> 静态库(.lib);属性 ==> 高级 ==> 目标文件扩展名 ==> .lib;C/C++ ==> 代码生成 ==> 运行库 ==> 多线程 (/MT);C/C++ ==> 预处理器 ==>最上面加入WINDOWS
- 右键项目 ==> 生成,即可看到生成好的lib文件
Thirdparty/g2o/build/Release/g2o.lib
2.4 Pangolin
用于3D视觉和3D导航的视觉图和用户之间的交互。这里其实和编译ORB_SLAM3没有关系,但是我们使用ORB_SLAM3库的时候应用的例子上是需要这个库的。具体过程如下:
-
在
Thirdparty/g2o
路径下新建一个build
文件夹,cmake生成cmake ..
-
看到
configuration done
的时候,用vs2019打开build/Pangolin.sln
-
将配置改成
release
,同时右键项目==> 属性 ==> 常规 ==> 配置类型 ==> 静态库(.lib);属性 ==> 高级 ==> 目标文件扩展名 ==> .lib;C/C++ ==> 代码生成 ==> 运行库 ==> 多线程 (/MT) -
这里是需要下载它依赖的其他库的,最好对git设置代理
git config --global http.proxy http://127.0.0.1:1080 git config --global https.proxy http://127.0.0.1:1080
-
右键ALL_BUILD ==> 生成,即可看到生成好的lib文件
ThirdParty/Pangolin/lib/Release/pangolin.lib
三.编译ORB_SLAM3
-
给
orbslam3-windows/CMakeLists.txt
配置opencv3.4.11的路径set(OpenCV_DIR "D:/software/opencv/opencv/build")
-
在
orbslam3-windows
的路径下新建一个build
文件夹,cmake生成cmake ..
-
看到
configuration done
的时候,用vs2019打开build/ORB_SLAM3.sln
-
将配置改成
release
,同时右键项目==> 属性 ==> 常规 ==> 配置类型 ==> 静态库(.lib);属性 ==> 高级 ==> 目标文件扩展名 ==> .lib;C/C++ ==> 代码生成 ==> 运行库 ==> 多线程 (/MT);C/C++ ==> 预处理器 ,添加以下预编译器定义WINDOWS COMPILEDWITHC11
-
右键项目 ==> 生成,即可看到生成好的lib文件
ORB_SLAM3/build/Release/ORB-SLAM3.lib
四. 编译测试案例及展示
4.1 编译stereo_inertial_euroc
- 用vs2019打开
build/ORB_SLAM3.sln
- 将配置改成
release
,同时右键项目stereo_inertial_tum_vi ==> 属性 ==> C/C++ ==> 代码生成 ==> 运行库 ==> 多线程 (/MT);C/C++ ==> 预处理器 ,添加以下预编译器定义COMPILEDWITHC11
;链接器 ==> 高级 ==> 导入库,改为空;链接器 ==> 输入 ==> 去掉..\Thirdparty\boost_1_67_0\lib64-msvc-14.1\libboost_serialization-vc141-mt-s-x64-1_67.lib
(由于这里是vcpkg安装的boost,因此该路径下根本没有这个lib)。 - 右键项目 ==> 生成,即可看到生成好的exe文件
ORB_SLAM3/Examples/Stereo-Inertial/Release/stereo_inertial_tum_vi.exe
4.2 使用展示案例stereo_inertial_euroc
这个案例是双目 + 惯导的Euroc数据集的应用。
- 将下载好的数据集文件夹名字改成
MH01
(这里是由于本人下载是MH_01_easy.zip) -
进入到生成好的exe文件夹下
cd orbslam3-windows\Examples\Stereo-Inertial\Release
,可以看到生成好的stereo_inertial_euroc.exe
-
开启程序:
.\stereo_inertial_euroc.exe ..\..\..\Vocabulary\ORBvoc.txt ..\EuRoC.yaml ..\MH01\ ..\EuRoC_TimeStamps\MH01.txt dataset-MH01_stereoi
- 结果展示如下图所示: