本博客記錄的是在Ubuntu18.04中ORB_SLAM2的配置過程,並且包含ROS 環境下ROB_SLAM的配置。
1、安裝工具
配置前需要下載cmake、gcc、g++和Git工具。
下載cmake
sudo apt-get install cmake
下載git
sudo apt-get install git
下載gcc和g++
sudo apt-get install gcc g++
2、安裝Pangolin
在安裝pangolin之前,先安裝依賴項。
sudo apt-get install libglew-dev
sudo apt-get install libpython2.7-dev
下載安裝Pangolin。可能會有點慢,如果因爲網不太好斷開了,再重新執行一次下列命令即可。
git clone https://github.com/stevenlovegrove/Pangolin.git
下載好後,進入Pangolin文件夾。
cd Pangolin
創建編譯文件夾,命名爲build。
mkdir build
進入文件夾進行配置。
cd build
cmake一下。這裏使用命令cmake ..
也是可以的。
如果報錯:‘No package ‘xkbcommon’ found’,可以參考後面第7部分問題1的解決方法。
cmake -DCPP11_NO_BOOSR=1 ..
完成如下圖所示。
執行如下命令,編譯過程可能會有點慢,耐心等待哦。
這裏也可以使用make -j
等命令速度會稍快一些,但如果電腦性能不佳,還是使用make命令較好。
sudo make
編譯安裝。
sudo make install
3、安裝OpenCV
如果之前就安裝過opencv的可以跳過這一步。如果沒有安裝的,可以參考此博客:Ubuntu18.04安裝並配置OpenCV 3.4.1
4、安裝Eigen
方法1
使用下列命令來安裝eigen。
sudo apt-get install libeigen3-dev
如下圖所示:
方法2
在http://eigen.tuxfamily.org下載,最低至少爲3.1.0版本。
解壓後。創建編譯文件夾,命名爲build。
mkdir build
進入文件夾進行配置。
cd build
cmake一下。
cmake ..
然後執行如下命令,編譯過程可能會有點慢,耐心等待哦。
這裏也可以使用make -j
等命令速度會稍快一些,但如果電腦性能不佳,還是使用make命令較好。
sudo make
編譯安裝。
sudo make install
5、安裝ORB_SLAM2
如果需要在ROS環境下運行ORB_SLAM,最好放在工作區的src文件夾下(這是我的工作區目錄:catkin_ws/src)
進入ROS工作區的src文件夾。
cd ~/catkin_ws/src/
執行下列命令下載安裝ORB_SLAM2。
git clone https://github.com/raulmur/ORB_SLAM2.git ORB_SLAM2
進入ORB_SLAM2文件夾。
cd ORB_SLAM2
給build.sh文件權限。
chmod +x build.sh
編譯build.sh文件。
如果報錯:ORB_SLAM2/src/System.cc: error: ‘usleep’ was not declared in this scope usleep(5000)。可以參考後面第7部分問題2的解決方法。
./build.sh
如需要在ROS環境下運行ORB_SLAM,則需要執行下列三條命令:
如果編譯build_ros.sh文件報錯:CMakeFiles/RGBD.dir/build.make:197: recipe for target ‘…/RGBD’ failed。可參考後面第7部分問題3的解決方法。
chmod +x build_ros.sh
export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:~/catkin_ws/src/ORB_SLAM2/Examples/ROS
./build_ros.sh
最後,執行下列指令:
編譯過程可能會有點慢,耐心等待哦。這裏也可以使用make -j、make -j4、make -j8等命令速度會稍快一些,-j 後的的數字代表線程。但如果電腦性能不佳,可以把build.sh文件和build_ros.sh文件中的最後一句命令make -j
改爲make
。
make
至此,ORB_SLAM2已經安裝好啦。
6、運行單目SLAM實例
編譯完成後會在ORB_SLAM2/Examples文件夾下生成各種可執行文件。這裏以單目情況爲例,展示如何運行ORB_SLAM2程序。
(1)下載數據集
有TUM、KITTI、EuRoC三種數據集,這兒使用TUM數據集,從http://vision.in.tum.de/data/datasets/rgbd-dataset/download下載序列並解壓縮。我下載的是第一個的,下載下來的文件名是:rgbd-dataset_freiburg_xyz。
(2)編譯
官方給出的命令格式如下:
PATH_TO_SEQUENCE_FOLDER爲數據集的存儲路徑。
tumx.yaml與數據集對應,比如TUM1.yaml、TUM2.yaml 、TUM3.yaml 分別對應 freiburg1、freiburg2 、 freiburg3。
./Examples/Monocular/mono_tum Vocabulary/ORBvoc.txtExamples/Monocular/TUMX.yaml PATH_TO_SEQUENCE_FOLDER
根據自己保存路徑不一樣適當修改。我的數據集放在/home/hadoop目錄下。
./Examples/Monocular/mono_tum Vocabulary/ORBvoc.txt Examples/Monocular/TUM1.yaml /home/hadoop/rgbd_dataset_freiburg1_xyz
整體運行效果如下:
7、問題與解決方案
問題1
編譯Pangolin時報錯:‘No package ‘xkbcommon’ found’
解決方案:
使用下列命令:
sudo apt-get install libxkbcommon-x11-dev
問題2
ORB_SLAM2/src/System.cc: error: ‘usleep’ was not declared in this scope usleep(5000);
解決方案:
找到對應的System.cc文件的首部加入 頭文件
#include<unistd.h>
需要根據實際情況,提示哪個文件usleep有問題,就去加這個頭文件。
需要增加unistd.h的文件還有:
Examples/Monocular/mono_euroc.cc
Examples/Monocular/mono_kitti.cc
Examples/Monocular/mono_tum.cc
Examples/RGB-D/rgbd_tum.cc
Examples/Stereo/stereo_euroc.cc
Examples/Stereo/stereo_kitti.cc
src/LocalMapping.cc
src/LoopClosing.cc
src/System.cc
src/Tracking.cc
src/Viewer.cc
參考教程:https://blog.csdn.net/qq_15698613/article/details/98453592
問題3
CMakeFiles/RGBD.dir/build.make:197: recipe for target ‘…/RGBD’ failed
解決方案:
修改home/catkin_ws/src/ORB_SLAM2/Examples/ROS/ORB_SLAM2/文件夾下的CMakeLists.txt文件。
在set(LIBS xxxxx 的後面加上下列這一句代碼。
-lboost_system
如圖所示: