/ COMPUTERVISION

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

  • 结果展示如下图所示: