轉載請注明出處,謝謝
原創作者:MingruiYU
原創鏈接:https://www.cnblogs.com/MingruiYu/p/12286752.html
ORB-SLAM2作為目前應用最廣泛的視覺SLAM系統,其經典和重要程度毋庸置疑。ORB-SLAM2的github文檔中,提供了詳盡的ORB-SLAM2配置教程,上手應該是比較容易的。本文將跟隨其github文檔中的配置教程,對ORB-SLAM2系統進行安裝和測試。
本文要點包括:
- 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.
在單目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.
ORB-SLAM2是一個開源系統,其完整源碼可見Github: raulmur/ORB_SLAM2.該開源庫具備以下特征:
- 支持單目,雙目,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不需要額外配置。
Pangolin
Pangolin是一個用來可視化的庫,ORB-SLAM2用它來進行可視化和人機交互。其下載和安裝教程可見:(https://github.com/stevenlovegrove/Pangolin)。跟隨該安裝教程進行即可。其中,對於Pangolin的依賴項,我只安裝了Required Dependencies和Recommended Dependencies。之后按照cmake工程編譯的方法進行編譯即可。
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的情況,可以參考 (https://www.cnblogs.com/newneul/p/8256803.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
運行效果如下:

最后,還是推薦大家盡可能地去閱讀原始文檔,這樣最清晰也最不容易出錯。如果遇到原始文檔中沒有提到的問題,再廣泛查閱第三方資料為好。