Ubuntu 20.04 LTS

Table of Contents
更新套件資訊
~$ 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
安裝 OpenCV 和 OpenCV_contrib 儲存庫
~$ git clone https://github.com/opencv/opencv.git
~$ git clone https://github.com/opencv/opencv_contrib.git
切至 OpenCV 和 OpenCV_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
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
 : 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



Nice
[…] 如何安裝 ORB-SLAM2 ? […]