ORB-SLAM2 初體驗 —— 配置安裝


轉載請注明出處,謝謝
原創作者: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

運行效果如下:

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

ORB-SLAM2 系列博文

ORB-SLAM2 系列博文


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM