ORB-SLAM2的編譯運行以及TUM數據集測試
近段時間一直在學習高翔博士的《視覺SLAM十四講》,學了以后發現自己欠缺的東西實在太多,好多都需要深入系統的學習。ORB-SLAM2是一套完整的SLAM方案,提供了單目,雙目和RGB-D三種接口。它能夠實現地圖重用,回環檢測和重新定位的功能。無論是在室內的小型手持設備,還是到工廠環境的無人機和城市里駕駛的汽車,ORB-SLAM2都能夠在標准的CPU上進行實時工作。ORB-SLAM2在后端上采用的是基於單目和雙目的光束法平差優化(BA)的方式,這個方法允許米制比例尺的軌跡精確度評估。此外,ORB-SLAM2包含一個輕量級的定位模式,該模式能夠在允許零點漂移的條件下,利用視覺里程計來追蹤未建圖的區域並且匹配特征點。 可以說,ORB_SLAM2是近幾年SLAM的集大成者,它吸收了近幾年monoslam領域的很多理論成果,比如逆深度的使用,g2o工具箱的優化等。而且以orb特征貫穿始終,從一開始的特征處理,匹配,以及用於回環的bag-of-words,詞典,全用的是orb。缺點在於它的的建圖部分只含有稀疏的map point,這不僅讓最終建的圖很難看,而且對於機器人下一步的應用會造成很大困難。
文章主要對ORB-SLAM2進行編譯運行。以及下載TUM上的數據集。然后跑自己的數據集,以及利用筆記本攝像頭進行測試。
前期准備
鏈接在此:https://github.com/raulmur/ORB_SLAM2
使用git clone https://github.com/raulmur/ORB_SLAM2 下載ORB-SLAM2 根據Gthub上給的依賴項 進行安裝
系統環境:
ubuntu 16.04 LTS 安裝好gcc g++ cmake git (這里就不細說了)
安裝依賴庫
(1)安裝Pangolin
git clone https://github.com/stevenlovegrove/Pangolin.gitcd Pangolin 進行下載
安裝依賴:
a、opengl:
b、GLEW:
sudo apt-getinstall libglew-dev
c、Boost:
sudo apt-getinstall libboost-devlibboost-thread-devlibboost-filesystem-dev
d、Python2/Python3:
sudo apt-getinstall libpython2.7-dev
e、編譯基礎庫
sudo apt-getinstall build-essential
安裝Pangolin:
終端里輸入
mkdir build
cd build
sudo cmake ..
sudo make-j(建議不要使用make-j,使用make。如果用make-j是使用多處理器編譯,可能造成死機)
(2)安裝OpenCV
安裝依賴:
a、編譯器相關:
sudo apt-getinstall build-essential
b、必須依賴:
sudo apt-getinstall cmake git libgtk2.0-devpkg-configlibavcodec-devlibavformat-devlibswscale-dev
c、可選安裝:
sudo apt-getinstall python-devpython-numpylibtbb2 libtbb-devlibjpeg-devlibpng-devlibtiff-devlibjasper-devlibdc1394-22-dev
安裝OpenCV:
a、官網下載OpenCV 2.4.11 forLinux下載地址,解壓到Ubuntu中
b、進入OpenCV文件夾,配置工程
mkdirreleasecdreleasecmake -D CMAKE_BUILD_TYPE=RELEASE-D CMAKE_INSTALL_PREFIX=/usr/local ..
c、編譯
makesudomakeinstall
(3)安裝Eigen
下載Eigen下載地址,進入到在解壓后的Eigen文件夾(例如eigen-eigen-07105f7124f9)下
mkdir buildcdbuildcmake ..makesudomake install
(7)安裝BLAS and LAPACK庫
sudo apt-getinstall libblas-dev
sudo apt-getinstall liblapack-dev
g2o需要BLAS和LAPACK
(1) BLAS: Basic Linear Algebra Subprograms
提供了基本的向量和矩陣操作:
- Level-1 BLAS: 支持 標量、向量、向量-向量 操作
- Level-2 BLAS: 支持 矩陣-向量 操作
- Level-3 BLAS: 支持 矩陣-矩陣 操作
(2) LAPACK:Linear Algebra PACKage
它調用BLAS來實現更高級的功能,支持以下操作:
- 解線性方程組
- 線性方程組的最小二乘解
- 特征值問題和奇異值問題
- 矩陣分解 (LU, Cholesky, QR, SVD, Schur, generalized Schur)
- 支持密集和帶狀矩陣,但不支持一般的稀疏矩陣
- 支持單精度和雙精
DBoW2 and g2o (Included in Thirdparty folder)
ORB_SLAM2使用修改版的DBoW2 庫進行位置識別 ,使用 g2o 庫進行非線性優化. 這兩個修改版的庫被放在第三方文件夾內.
總的對於 opencv 和 eigen3,可以簡單的用一行命令來解決:
sudo apt-get install libopencv-dev libeigen3-dev libqt4-dev qt4-qmake libqglviewer-dev libsuitesparse-dev libcxsparse3.1.2 libcholmod-dev 其中一部分是 g2o 的依賴項,不用太在意它的具體內容。至此,應該可以順利編譯 ORB-SLAM2 了
ORB-SLAM2進行編譯
編譯ORB_SLAM2庫和例子程序(單目、雙目和RGB-D)
cd ORB_SLAM2
chmod +x build.sh
./build.sh
生成的libORB_SLAM2.so位於lib目錄下,可執行程序mono_tum, mono_kitti, rgbd_tum, stereo_kitti, mono_euroc and stereo_euroc位於Examples目錄下。
Monocular 實例運行
在下載TUM數據集:TUM數據集 下載並解壓一個序列,如:rgbd_dataset_freiburg1_desk1.tgz
然后在ORB-SLAM2目錄下創建一個文件夾 Data 將數據集放置在該文件夾下,並進行解壓。
cd ORB-SLAM2
mkdir Data
tar -zxvf rgbd_dataset_freiburg1_desk.tgz
接下來 在終端輸入
./Examples/Monocular/mono_tum Vocabulary/ORBvoc.txt Examples/Monocular/TUM1.yaml Data/rgbd_dataset_freiburg1_desk
完成運行 結果如下:

RGB-D 測試實例
按照要求下載數據集,下載的是rgbd_dataset_freiburg2_pioneer_360,將其解壓到你喜歡的目錄.我放在了ORB-SLAM2/Data目錄下面
2.下載associate.py.放在/ORB_SLAM2/Examples/RGB-D/目錄下面.
3.打開終端,進入到associate.py所在目錄,即/ORB_SLAM2/Examples/RGB-D/,之后運行
python associate.py PATH_TO_SEQUENCE/rgb.txt PATH_TO_SEQUENCE/depth.txt > associations.txt
這里的PATH_TO_SEQUENCE 是指的下載數據集的目錄里面有depth.txt 和 rgb.txt

所以上述的我的輸入:python associate.py ../../Data/rgbd_dataset_freiburg2_pioneer_360/rgb.txt ../../Data/rgbd_dataset_freiburg2_pioneer_360/depth.txt > associations.txt
運行之后在該目錄中將會生成一個associations.txt文件.
4.參照所給鏈接中的第3步,https://github.com/raulmur/ORB_SLAM2,即
./Examples/RGB-D/rgbd_tum Vocabulary/ORBvoc.txt Examples/RGB-D/TUMX.yaml PATH_TO_SEQUENCE_FOLDER ASSOCIATIONS_FILE
PATH_TO_SEQUENCE_FOLDER文件夾即為數據庫所在文件夾,我的是在orbslam2工程下面,
ASSOCIATIONS_FILE即為第3步中生成的associations.txt,給出他的制定目錄位置。
即:./Examples/RGB-D/rgbd_tum Vocabulary/ORBvoc.txt Examples/RGB-D/TUM1.yaml Data/rgbd_dataset_freiburg2_pioneer_360 Examples/RGB-D/associations.txt
遇到的問題:
由於我之前安裝的python中沒有numpy模塊 后面在生成associations.txt文件的時候一直報錯,只需要安裝 重新生成就可以了。
sudo apt-getinstall python-devpython-numpy
運行結果:

跑自己的數據集測試
自己的數據集,是利用外部攝像頭采集的一系列視頻數據。這些數據需要進行處理,首先將視頻讀取成圖像,再傳給slam進行處理。
這里分別有myvideo.cpp 和 myvideo.yaml文件 需要將他們進入到CMakeListx.txt中。一下是給出的CMakeListx.txt 方案。

在目錄./Examples新建文件夾 myvideo 將myvideo.cpp 和 myvideo.yaml文件放置在該文件夾下。
myvideo.cpp中的一些加載路徑需要修改
接着在終端輸入:
./Examples/myvideo/myvideo Vocabulary/ORBvoc.txt Examples/myvideo/myvideo.yaml Examples/myvideo/myvideo.mp4
運行結果:

CMakeListx.txt
運行筆記本攝像頭 測試數據
同理 和運行自己的數據集一樣,添加CMakeListx.txt 方案,和上述一樣,過程也一致
