ORB-SLAM2 初体验 —— 配置安装

转载请注明出处,谢谢
原创做者:MingruiYU
原创连接:http://www.javashuo.com/article/p-xouvftad-dz.htmlhtml


ORB-SLAM2做为目前应用最普遍的视觉SLAM系统,其经典和重要程度毋庸置疑。ORB-SLAM2的github文档中,提供了详尽的ORB-SLAM2配置教程,上手应该是比较容易的。本文将跟随其github文档中的配置教程,对ORB-SLAM2系统进行安装和测试。linux

本文要点包括:git

  • ORB-SLAM2的初次配置安装(包括相关依赖)
  • ORB-SLAM2运行TUM fr1/desk视频序列的单目SLAM和RGB-D SLAM示例
  • 解决ORB-SLAM2编译过程当中报错:error: usleep is not declared this scope
  • 解决ORB-SLAM2运行示例过程当中提示Failed to load module "canberra-gtk-module"

ORB-SLAM2 简介

ORB-SLAM是15年Raul等人提出的一个单目SLAM系统,其在单目SLAM领域影响普遍。详情可见论文:[Monocular] Raúl Mur-Artal, J. M. M. Montiel and Juan D. Tardós. ORB-SLAM: A Versatile and Accurate Monocular SLAM System. IEEE Transactions on Robotics, vol. 31, no. 5, pp. 1147-1163, 2015. (2015 IEEE Transactions on Robotics Best Paper Award). PDF.github

在单目ORB-SLAM的基础上,17年Raul等人又提出了ORB-SLAM2,增长了对于双目相机和RGB相机的支持。详情可见论文:[Stereo and RGB-D] Raúl Mur-Artal and Juan D. Tardós. ORB-SLAM2: an Open-Source SLAM System for Monocular, Stereo and RGB-D Cameras. IEEE Transactions on Robotics, vol. 33, no. 5, pp. 1255-1262, 2017. PDF.web

ORB-SLAM2是一个开源系统,其完整源码可见Github: raulmur/ORB_SLAM2.该开源库具有如下特征:ubuntu

  • 支持单目,双目,RGB相机
  • 实时计算相机位姿和稀疏的三维重建,可进行回环检测和相机重定位
  • 提供运行示例:配置安装好后,可直接在KITTI, TUM, EuRoC数据集中的视频序列下运行
  • 可在ROS中编译,也能够不在ROS中编译:若是只是在数据集上运行,则不须要ROS;若是须要与真实摄像头链接,在真实场景下实时运行,则须要ROS。

安装相关依赖

在了解了ORB-SLAM2的概况后,咱们开始对其进行配置安装。raulmur/ORB_SLAM2/README中提供了详尽的介绍和配置教程,建议你们尽量去看原版,这样不容易因第三方转述而产生误解。本文在其配置教程的基础上,记录了一些本身遇到的其余状况和问题。本文暂没有使用ROS。测试

官方教程中提到他们测试了在Ubuntu12.04/14.04/16.04下的编译配置,而本文中,我是在Ubuntu18.04下进行编译配置的,经测试应该没有问题。在安装ORB-SLAM2以前,首先要安装相关的依赖。优化

C++11

使用Ubuntu18.04不须要额外配置。ui

Pangolin

Pangolin是一个用来可视化的库,ORB-SLAM2用它来进行可视化和人机交互。其下载和安装教程可见:(https://github.com/stevenlovegrove/Pangolin)。跟随该安装教程进行便可。其中,对于Pangolin的依赖项,我只安装了Required Dependencies和Recommended Dependencies。以后按照cmake工程编译的方法进行编译便可。this

OpenCV

OpenCV确定是必不可少的了。其下载和安装教程可见:(https://opencv.org/releases/)。找到须要的OpenCV版本,对于Linux系统,应点击其中Sources,下载一个压缩文件,下载完成后应对其进行解压。其安装教程可见:(https://docs.opencv.org/4.2.0/d7/d9f/tutorial_linux_install.html)。

注:官方文档中提到他们测试了OpenCV 2.4.11和OpenCV 3.2,我使用的是OpenCV3的最新版——OpenCV 3.4.9。

Eigen3

Eigen3做为矩阵运算库,固然也是必不可少的。其下载和安装教程可见:(http://eigen.tuxfamily.org)。在ubuntu中,能够直接使用 sudo apt-get install libeigen3-dev进行安装。

注:关于Eigen3的安装路径,若是出现程序include不到Eigen3的状况,能够参考 (http://www.javashuo.com/article/p-fysmhadp-cx.html) 对Eigen3的位置进行调整。

DBoW2 & g2o(已包含在ORB-SLAM2库的第三方文件夹中)

ORB-SLAM2使用DBoW2库的改进版进行场景识别,使用g2o库来进行非线性优化。这俩都包含在ORB-SLAM2的第三方库中,不须要本身额外安装,它们的编译会和ORB-SLAM2库的编译一块儿进行。

安装ORB-SLAM2

在上述依赖所有安装完毕后(除了DBoW2 & g2o),能够开始进行ORB-SLAM2的配置安装。

clone该repo:

git clone https://github.com/raulmur/ORB_SLAM2.git ORB_SLAM2

使用build.sh脚本安装ORB-SLAM2和第三方库:

cd ORB_SLAM2
chmod +x build.sh
./build.sh

注:在我编译ORB-SLAM2时,报错:error: usleep is not declared this scope。google后发现,在raulmur/ORB_SLAM2的Issues中,有不少人都遇到了这个问题(Issues/337)。其解决方法很简单,参照Acerlon的回答,只需在/include/System.h文件中添加头文件#include <unistd.h>便可。虽然不知道为何源码中没有include该头文件……

运行示例

ORB-SLAM2提供了KITTI/TUM/EuRoC数据集下的运行示例。官方文档Monocular Examples Stereo Examples RGB-D Example提供了详细的在不一样数据集上运行的教程。注意不一样的相机类型对应着不一样的数据集,也对应着不一样的运行方法。

下面就举两个我运行了的示例,以TUM数据集中的fr1/desk视频序列为例。该数据集下载连接为(https://vision.in.tum.de/data/datasets/rgbd-dataset/download),找到其中fr1/desk序列,点击tgz下载压缩文件,以后进行解压。

单目示例

根据教程中所述,运行单目TUM示例的命令为./Examples/Monocular/mono_tum Vocabulary/ORBvoc.txt Examples/Monocular/TUMX.yaml PATH_TO_SEQUENCE_FOLDER。对应不一样的具体视频序列须要对该命令进行调整:

  • 调整TUMX.yaml:若是视频序列是freiburg1(fr1)目录下的,则改成TUM1.yaml;若是视频序列是freiburg2(fr2)目录下的,则改成TUM2.yaml;若是视频序列是freiburg3(fr3)目录下的,则改成TUM3.yaml;
  • 调整PATH_TO_SEQUENCE_FOLDER:将其改成刚才解压后视频序列文件夹的路径。

因此,在个人机器上,TUM数据集fr1/desk序列对应的单目SLAM运行命令就是:在ORB_SLAM2文件夹下的终端中输入

/Examples/Monocular/mono_tum Vocabulary/ORBvoc.txt Examples/Monocular/TUM1.yaml ../rgbd_dataset_freiburg1_desk

注:在我第一次运行的过程当中,会有提示:Failed to load module "canberra-gtk-module",虽然感受不影响运行,但仍是解决了它为好。
解决方法:

sudo apt-get install libcanberra-gtk-module

运行效果以下:

RGB-D示例

根据教程中所述,运行单目TUM示例的命令为./Examples/RGB-D/rgbd_tum Vocabulary/ORBvoc.txt Examples/RGB-D/TUMX.yaml PATH_TO_SEQUENCE_FOLDER ASSOCIATIONS_FILE。对应不一样的具体视频序列须要对该命令进行调整:

  • 调整TUMX.yaml:若是视频序列是freiburg1(fr1)目录下的,则改成TUM1.yaml;若是视频序列是freiburg2(fr2)目录下的,则改成TUM2.yaml;若是视频序列是freiburg3(fr3)目录下的,则改成TUM3.yaml;
  • 调整PATH_TO_SEQUENCE_FOLDER:将其改成刚才解压后视频序列文件夹的路径。
  • 调整PATH_TO_SEQUENCE_FOLDER ASSOCIATIONS_FILE:将其改成该序列associations文件的路径。associations文件是用来将RGB图像和Depth图像一一对应起来的文件。ORB-SLAM2库Examples/RGB-D/associations/中提供了几个视频序列的associations文件,其中包含fr1/desk序列。因此此处就不须要本身生成了。

因此,在个人机器上,TUM数据集fr1/desk序列对应的RGB-D SLAM运行命令就是:在ORB_SLAM2文件夹下的终端中输入

./Examples/RGB-D/rgbd_tum Vocabulary/ORBvoc.txt Examples/RGB-D/TUM1.yaml ../rgbd_dataset_freiburg1_desk ./Examples/RGB-D/associations/fr1_desk.txt

运行效果以下:

最后,仍是推荐你们尽量地去阅读原始文档,这样最清晰也最不容易出错。若是遇到原始文档中没有提到的问题,再普遍查阅第三方资料为好。

相关文章
相关标签/搜索