轉載請註明出處,謝謝
原創做者:MingruiYU
原創連接:http://www.javashuo.com/article/p-xouvftad-dz.htmlhtml
ORB-SLAM2做爲目前應用最普遍的視覺SLAM系統,其經典和重要程度毋庸置疑。ORB-SLAM2的github文檔中,提供了詳盡的ORB-SLAM2配置教程,上手應該是比較容易的。本文將跟隨其github文檔中的配置教程,對ORB-SLAM2系統進行安裝和測試。linux
本文要點包括:git
error: usleep is not declared this scope
Failed to load module "canberra-gtk-module"
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
在瞭解了ORB-SLAM2的概況後,咱們開始對其進行配置安裝。raulmur/ORB_SLAM2/README中提供了詳盡的介紹和配置教程,建議你們儘量去看原版,這樣不容易因第三方轉述而產生誤解。本文在其配置教程的基礎上,記錄了一些本身遇到的其餘狀況和問題。本文暫沒有使用ROS。測試
官方教程中提到他們測試了在Ubuntu12.04/14.04/16.04下的編譯配置,而本文中,我是在Ubuntu18.04下進行編譯配置的,經測試應該沒有問題。在安裝ORB-SLAM2以前,首先要安裝相關的依賴。優化
使用Ubuntu18.04不須要額外配置。ui
Pangolin是一個用來可視化的庫,ORB-SLAM2用它來進行可視化和人機交互。其下載和安裝教程可見:(https://github.com/stevenlovegrove/Pangolin)。跟隨該安裝教程進行便可。其中,對於Pangolin的依賴項,我只安裝了Required Dependencies和Recommended Dependencies。以後按照cmake工程編譯的方法進行編譯便可。this
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做爲矩陣運算庫,固然也是必不可少的。其下載和安裝教程可見:(http://eigen.tuxfamily.org)。在ubuntu中,能夠直接使用 sudo apt-get install libeigen3-dev
進行安裝。
注:關於Eigen3的安裝路徑,若是出現程序include不到Eigen3的狀況,能夠參考 (http://www.javashuo.com/article/p-fysmhadp-cx.html) 對Eigen3的位置進行調整。
ORB-SLAM2使用DBoW2庫的改進版進行場景識別,使用g2o庫來進行非線性優化。這倆都包含在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
。對應不一樣的具體視頻序列須要對該命令進行調整:
因此,在個人機器上,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
運行效果以下:
根據教程中所述,運行單目TUM示例的命令爲./Examples/RGB-D/rgbd_tum Vocabulary/ORBvoc.txt Examples/RGB-D/TUMX.yaml PATH_TO_SEQUENCE_FOLDER ASSOCIATIONS_FILE
。對應不一樣的具體視頻序列須要對該命令進行調整:
因此,在個人機器上,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
運行效果以下:
最後,仍是推薦你們儘量地去閱讀原始文檔,這樣最清晰也最不容易出錯。若是遇到原始文檔中沒有提到的問題,再普遍查閱第三方資料爲好。