【ORB-SLAM2】安裝

Ubuntu 20.04 LTS

ORB-SLAM2

更新套件資訊

~$ sudo apt update && sudo apt upgrade

安裝 OpenCV

安裝依賴項

~$ sudo apt install build-essential cmake git pkg-config libgtk-3-dev libavcodec-dev libavformat-dev libswscale-dev libv4l-dev libxvidcore-dev libx264-dev libjpeg-dev libpng-dev libtiff-dev gfortran openexr libatlas-base-dev python3-dev python3-numpy libtbb2 libtbb-dev libdc1394-22-dev


安裝 OpenCVOpenCV_contrib 儲存庫

~$ git clone https://github.com/opencv/opencv.git

~$ git clone https://github.com/opencv/opencv_contrib.git


切至 OpenCVOpenCV_contrib 儲存庫3.4.9 分支

~$ cd opencv

~/opencv$ git checkout 3.4.9

~/opencv$ cd ../opencv_contrib

~/opencv_contrib$ git checkout 3.4.9


配置 OpenCV 編譯環境

~/opencv_contrib$ cd ../opencv

~/opencv$ mkdir build && cd build

~/opencv/build$ cmake -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib/modules ..


編譯 OpenCV

~/opencv/build$ make -j8


安裝 OpenCV

~/opencv/build$ sudo make install

安裝 Eigen

~$ sudo apt install libeigen3-dev

安裝 Pangolin

~$ git clone --recursive https://github.com/stevenlovegrove/Pangolin.git

~$ cd Pangolin

~/Pangolin$ git checkout v0.5


修改 Pangolin/CMakeModules/FindFFMPEG.cmake : line # 63, 64

// 原本
sizeof(AVFormatContext::max_analyze_duration2);
}" HAVE_FFMPEG_MAX_ANALYZE_DURATION2

// 修改後
sizeof(AVFormatContext::max_analyze_duration);
}" HAVE_FFMPEG_MAX_ANALYZE_DURATION


修改 Pangolin/src/video/drivers/ffmpeg.cpp : 在第 37 行的 namespace pangolin 之上,新增以下定義語句 :

#define CODEC_FLAG_GLOBAL_HEADER AV_CODEC_FLAG_GLOBAL_HEADER


修改 Pangolin/src/video/drivers/ffmpeg.cpp : line # 77, 78

// 原本
TEST_PIX_FMT_RETURN(XVMC_MPEG2_MC);
TEST_PIX_FMT_RETURN(XVMC_MPEG2_IDCT);

// 修改後
#ifdef FF_API_XVMC
TEST_PIX_FMT_RETURN(XVMC_MPEG2_MC);
TEST_PIX_FMT_RETURN(XVMC_MPEG2_IDCT);
#endif


修改 Pangolin/src/video/drivers/ffmpeg.cpp : line # 100 - 104

// 原本
TEST_PIX_FMT_RETURN(VDPAU_H264);
TEST_PIX_FMT_RETURN(VDPAU_MPEG1);
TEST_PIX_FMT_RETURN(VDPAU_MPEG2);
TEST_PIX_FMT_RETURN(VDPAU_WMV3);
TEST_PIX_FMT_RETURN(VDPAU_VC1);

// 修改後
#ifdef FF_API_VDPAU
TEST_PIX_FMT_RETURN(VDPAU_H264);
TEST_PIX_FMT_RETURN(VDPAU_MPEG1);
TEST_PIX_FMT_RETURN(VDPAU_MPEG2);
TEST_PIX_FMT_RETURN(VDPAU_WMV3);
TEST_PIX_FMT_RETURN(VDPAU_VC1);
#endif


修改 Pangolin/src/video/drivers/ffmpeg.cpp : line # 126

// 原本
TEST_PIX_FMT_RETURN(VDPAU_MPEG4);

// 修改後
#ifdef FF_API_VDPAU
TEST_PIX_FMT_RETURN(VDPAU_MPEG4);
#endif


修改 Pangolin/include/pangolin/video/drivers/ffmpeg.h : 在第 53 行的 namespace pangolin 之上,新增以下定義語句 :

#define AV_CODEC_FLAG_GLOBAL_HEADER (1 << 22)
#define CODEC_FLAG_GLOBAL_HEADER AV_CODEC_FLAG_GLOBAL_HEADER
#define AVFMT_RAWPICTURE 0x0020


修改 Pangolin/src/display/device/display_x11.cpp : line # 176

// 原本
throw std::runtime_error("Pangolin X11: Invalid GLX version. Require GLX >= 1.3");

// 修改後
// throw std::runtime_error("Pangolin X11: Invalid GLX version. Require GLX >= 1.3");


編譯 Pangolin

~/Pangolin$ sudo apt-get install libglew-dev

~/Pangolin$ cmake -B build

~/Pangolin$ cmake --build build


安裝 Pangolin

~/Pangolin$ cd build

~/Pangolin/build$ sudo make install

安裝 ORB-SLAM2

下載 ORB-SLAM2 儲存庫

~$ git clone https://github.com/raulmur/ORB_SLAM2.git ORB_SLAM2


修改 ORB_SLAM2/include/System.h : 在第 23 行的 #define SYSTEM_H 之下新增 #include <unistd.h>

#include <unistd.h>


修改 ORB_SLAM2/include/LoopClosing.h : line # 50

// 原本
Eigen::aligned_allocator<std::pair<const KeyFrame*, g2o::Sim3> > > KeyFrameAndPose;

// 修改後
Eigen::aligned_allocator<std::pair<KeyFrame* const, g2o::Sim3> > > KeyFrameAndPose;


編譯 ORB-SLAM2

~$ cd ORB_SLAM2

~/ORB_SLAM2$ ./build.sh

執行 ORB-SLAM2

執行 ORB-SLAM2 之前,需要準備數據集,請下載 odometry dataset (grayscale,22GB)

下載完後可以挑選其中一份影像序列,放到 ORB_SLAM2 目錄下來測試,其餘的數據可以視情況決定是否要刪除,以免佔據龐大的儲存空間。


執行 ORB-SLAM2 的指令格式如下 ( 相對路徑 / 絕對路徑 ) :

./<可執行檔位置> <字典檔位置> <相機參數配置檔位置> <影像序列資料夾位置>


執行 ORB-SLAM2。須注意相對路徑或絕對路徑是否正確。

~/ORB_SLAM2$ ./Examples/Monocular/mono_kitti Vocabulary/ORBvoc.txt Examples/Monocular/KITTI00-02.yaml 08
ORB-SLAM2 執行結果展示

2 則留言

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *