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

運行效果以下:

最後,仍是推薦你們儘量地去閱讀原始文檔,這樣最清晰也最不容易出錯。若是遇到原始文檔中沒有提到的問題,再普遍查閱第三方資料爲好。

相關文章
相關標籤/搜索