基於ORB-SLAM3庫搭建SLAM系統

2023-05-11 15:00:21

參考資料

ORB-SLAM3設定及安裝教學
ORB-SLAM3設定安裝及執行

環境設定

Win 11pro
VMware 17Pro
Ubuntu 18.04
Eigen3
Pangolin
Opencv3.4.3
ORB-SLAM3原始碼: https://github.com/UZ-SLAMLab/ORB_SLAM3

效果圖

注意事項

如果是新系統,沒有安裝git,則需要先裝git
sudo apt-get install git
如果是新系統的話,預裝的vi編輯器不完整,用不了
執行如下命令安裝vi編輯器
sudo apt-get remove vim-common
sudo apt-get install vim
DBoW2 and g2o
DBoW2主要用於迴環檢測,g2o(General Graph Optimization)主要用於圖優化。
ORB-SLAM3的原始碼包自帶DBoW2 and g2o,編譯時會自動安裝,不用管。

PART 1:準備工作(下載安裝要用的檔案)

step1: 新建一個資料夾,用於存放下載的檔案

暫取名為 SLAM

step2: 下載 ORB-SLAM3原始碼

在 SLAM 資料夾下開啟終端
輸入以下指令
git clone https://github.com/UZ-SLAMLab/ORB_SLAM3.git

step3: 下載 Pangolin

在 SLAM 資料夾下開啟終端
輸入以下指令
git clone https://github.com/stevenlovegrove/Pangolin.git

step4: 下載 Eigen3

在 SLAM 資料夾下開啟終端
輸入以下指令
git clone https://github.com/eigenteam/eigen-git-mirror

PART 2:安裝步驟

step1: 安裝 Eigen3

在 SLAM 資料夾下開啟終端
輸入以下指令
cd eigen-git-mirror
mkdir build
cd build
cmake ..
sudo make install
 
#安裝後,標頭檔案安裝在/usr/local/include/eigen3/

step2: 安裝 Pangolin

安裝 Pangolin 需要的依賴工具

在終端依次輸入以下指令
sudo apt install libgl1-mesa-dev
sudo apt install libglew-dev
sudo apt install cmake
sudo apt install libpython2.7-dev
sudo apt install pkg-config
sudo apt install libegl1-mesa-dev libwayland-dev libxkbcommon-dev wayland-protocols

安裝 Pangolin

在 SLAM 資料夾下開啟終端
輸入以下指令
cd Pangolin
mkdir build
cd build
cmake ..
cmake --build .

step3: 安裝 Opencv3.4.3

官網下載地址:https://opencv.org/releases/page/5/

下載之後放在最開始建立的 SLAM 資料夾,右鍵提取檔案進行解壓
更新一下,準備安裝OpenCV依賴庫

在終端輸入以下指令
sudo apt-get update

安裝OpenCV所有依賴庫

在終端輸入以下指令
sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg-dev libtiff5-dev libswscale-dev libjasper-dev

# 原部落格安裝的是libtiff4-dev,執行過程報錯,改成libtiff5-dev

編譯OpenCV

在 SLAM 資料夾下開啟終端
輸入以下指令
cd opencv-3.4.3
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
注意:執行上面指令後,終端會自動下載一個必需的ippicv加速庫。
如果終端卡住並顯示正在下載,只需要等一會兒不用進行任何操作。
否則,終端會顯示報錯
再次執行cmake指令,完成編譯
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
cmake完成之後使用make編譯
make -j4
安裝
sudo make install

設定環境

1、新增庫路徑
sudo /bin/bash -c 'echo "/usr/local/lib" > /etc/ld.so.conf.d/opencv.conf'
2、更新系統庫
sudo ldconfig
3、設定bash
sudo gedit /etc/bash.bashrc

在末尾新增如下兩行程式碼
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig  
export PKG_CONFIG_PATH 

儲存,執行如下指令使得設定生效
source /etc/bash.bashrc 

更新
sudo updatedb  
4、版本檢測

pkg-config --modversion opencv
輸出如下,表示OpenCV完成了安裝

step4: 安裝 boost 庫

boost官網地址:https://www.boost.org/
下載 1.77.0 版本

將檔案下載至SLAM資料夾下,並解壓
解壓之後進入解壓出來的資料夾
執行以下指令

sudo ./bootstrap.sh

執行完畢之後,會發現又多了些檔案
再執行下面這個指令碼

sudo ./b2 install

需要一段時間,耐心等待即可

step5: 安裝 libssl-dev

在 SLAM 資料夾下開啟終端
輸入以下指令
sudo apt-get install libssl-dev

step6: ORB-SLAM3 的編譯和安裝

ORB-SLAM3 原始碼編譯

在 SLAM 資料夾下開啟終端
輸入以下指令
cd ORB_SLAM3-master
chmod +x build.sh
開啟ORB_SLAM3-master對應的CMakeLists.txt
找到 find_package(OpenCV 4.4)這行程式碼,將OpenCV版本號改為find_package(OpenCV 3.4)

逐行依次執行以下指令

安裝 ORB-SLAM3

echo "Configuring and building Thirdparty/DBoW2 ..."
 
cd Thirdparty/DBoW2
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make -j
 
cd ../../g2o
 
echo "Configuring and building Thirdparty/g2o ..."
 
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make -j

cd ../../Sophus

echo "Configuring and building Thirdparty/Sophus ..."

mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make -j

cd ../../../

echo "Uncompress vocabulary ..."

cd Vocabulary
tar -xf ORBvoc.txt.tar.gz
cd ..

echo "Configuring and building ORB_SLAM3 ..."

mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make -j5

出現以下圖片,則代表安裝成功

PART 3:測試環境是否搭建成功(資料集測試

EuRoc資料集下載地址:
https://projects.asl.ethz.ch/datasets/doku.php?id=kmavvisualinertialdatasets
要下載ASL格式的,下載V102V203兩個

這個壓縮包下好之後,解壓開啟之後,裡面是一個mav0的資料夾(有些開啟會還有一個_MACOSX 檔案加,可以直接刪掉,只留mav0資料夾)
具體原因是這個其實是在MAC作業系統壓縮時產生的快取垃圾,在Windows系統、Linux系統就會顯示出來
然後在ORB_SLAM3-master資料夾下建立一個資料夾dataset,
在dataset資料夾下將解壓的資料集資料夾放進來
eg. /ORB_SLAM3-master/dataset/V102/mav0
在ORB_SLAM3-master的原始碼中,有一個Examples資料夾
去下面這個連結拷貝 指令碼euroc_examples.shExamples資料夾
https://github.com/electech6/ORB_SLAM3_detailed_comments

開啟**euroc_examples.sh** 這個指令碼,裡面有ORB-SLAM3各種執行模式針對各個資料集的執行指令,選擇下載資料集對應模式下的指令,提取出來(以V102、單目+IMU為例):

./Examples/Monocular-Inertial/mono_inertial_euroc ./Vocabulary/ORBvoc.txt ./Examples/Monocular-Inertial/EuRoC.yaml 「$pathDatasetEuroc」/V102 ./Examples/Monocular-Inertial/EuRoC_TimeStamps/V102.txt dataset-V102_monoi

加粗的地方需要改
**「$pathDatasetEuroc」**改為 ./dataset,表示資料集所在的路徑
在ORB_SLAM3-master資料夾下開啟終端執行以下這條指令
./Examples/Monocular-Inertial/mono_inertial_euroc ./Vocabulary/ORBvoc.txt ./Examples/Monocular-Inertial/EuRoC.yaml ./dataset/V102 ./Examples/Monocular-Inertial/EuRoC_TimeStamps/V102.txt dataset-V102_monoi

出現以下畫面則代表 ORB-SLAM3 成功執行,即環境安裝完成

PART 4:部分問題解決方案

1、 在安裝OpenCV所有依賴庫的時候出現報錯資訊

error: unable to locate libjasper-dev 無法定位這個包libjasper-dev
解決方法是:執行以下指令
sudo add-apt-repository "deb http://security.ubuntu.com/ubuntu xenial-security main"
sudo apt update
sudo apt install libjasper1 libjasper-dev
執行完這個,再輸入以下這個指令
sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg.dev libtiff4.dev libswscale-dev libjasper-dev

2、編譯OpenCV時報錯

解決方法是下載離線的ippicv庫
下載連結為:https://github.com/opencv/opencv_3rdparty/tree/ippicv/master_20170822

下載好之後,把這個ippicv資料夾單獨拷貝出來,放到自己的資料夾中
然後把OpenCV原始檔中 /3rdparty/ippicv 資料夾下的 ippicv.cmake 中第47行"https://raw.githubusercontent.com/opencv/opencv_3rdparty/${IPPICV_COMMIT}/ippicv/" 改成新下載的ippicv檔案路徑。
這樣,就改成了離線編譯的ippicv檔案

3、在設定bash時候報錯

如果執行sudo updatedb 指令報錯,那麼可能是沒有安裝mlocate
解決方法
先執行安裝命令:apt-get install mlocate
再執行:sudo updatedb

4、安裝 ORB-SLAM3 時候報錯

執行最後一條指令 make -j5 時,出現報錯如下:

解決方法
開啟對應的檔案,如Tracking.cc,LoopClosing.cc等
在所有 #include 後面新增以下程式碼
namespace cv
{
template<typename _Tp, int m, int n> static inline
Matx<_Tp, m, n> operator / (const Matx<_Tp, m, n> &a, float alpha)
{
return Matx<_Tp, m, n>(a, 1.f / alpha, Matx_ScaleOp());
}
}

效果如圖

最後一條指令若使用 make -j4 或 make -j5,即使在對應的檔案中加入了上述程式碼如果仍然會報錯。

可改成僅使用 make 進行編譯,但同時,改成make之後編譯速度大大降低,需要等很久