ORB_SLAM3 安装、编译及测试

目录

  • 检查编译器
  • 安装依赖
    • 安装 Doxygen
    • 安装 Pangolin
      • 检查依赖
        • 1. OpenGL
        • 2. Grew
        • 3. CMake
      • 安装
    • 安装 OpenCV
    • 安装 Eigen3
    • 其他依赖
  • 安装ORB-SLAM3
    • 安装过程中遇到的issues
      • 1. 源代码
      • 2. undefined reference to uuid
  • 测试
    • EuRoC Examples
    • TUM RGB-D Example

ORB_SLAM3 开源代码
论文地址:https://arxiv.org/abs/2007.11898

检查编译器

C++编译器这里用的是GCC。GCC原名GNU C Compiler,后来逐渐支持更多语言编译(C++, Fortran, Pascal, Objective-C, Java, Ada, Go等),所以变成了GNU Compiler Collection, 是一套由GNU工程开发的支持多种编程语言的编译器。
优点: 类Unix下的标准编译器,支持众多语言,支持交叉编译。
缺点:不支持Windows,需第三方移植才可用于Windows系统。

gcc --version
==> gcc (Ubuntu 7.5.0-3ubuntu1~18.04) 7.5.0

安装依赖

安装 Doxygen

Doxygen是一个程序的文件产生工具,可将程序中的特定批注转换成说明文件。Doxygen是编译Pangolin的一个选项,用自动生成文档。

sudo apt-get install -y doxygen

git clone https://github.com/doxygen/doxygen.git
cd doxygen
mkdir build
cd build
cmake -G "Unix Makefiles" ..
make
make install

安装 Pangolin

Pangolin是一个轻量、便携的管理OpenGL显示、交互和提取的视频输入的快速开发库。是一个简单是OpenGL视口管理器,能帮助模块化
OpenGL是渲染2D、3D矢量图形硬件的软件接口。本质上,它是一个3D徒刑和模型库,类似一个C运行时函数库。

检查依赖

1. OpenGL

检查是否已经安装OpenGL

apt-cache search libgl
==>libgl1 - Vendor neutral GL dispatch library -- legacy GL support

证明OpenGL安装成功。
若没有安装:

sudo apt install libgl1-mesa-dev

2. Grew

检查是否已经安装Grew

apt-cache search libglew
==>libglew-dev - OpenGL Extension Wrangler - development environment

证明Grew安装成功。
若没有安装:

sudo apt install libglew-dev

3. CMake

检查是否已经安装CMake

apt-cache search cmake
==>cmake - cross-platform, open-source make system

证明CMake(for building environment)安装成功。
若没有安装:

sudo apt install cmake

安装

git clone https://github.com/stevenlovegrove/Pangolin.git
cd Pangolin
mkdir build
cd build
cmake ..
cmake --build .

编译中没有遇到任何问题。

安装 OpenCV

检查是否已经安装opencv

 apt-cache search opencv
==>libopencv-dev - development files for opencv
==>libopencv-contrib-dev - development files for libopencv-contrib3.2

证明opencv安装成功。
若没有安装:

git clone https://github.com/opencv/opencv.git
cd opencv
mkdir build
cd build
cmake ..
make -j7 # runs 7 jobs in parallel
make install

安装 Eigen3

Eigen是一个基于C++模版的开源库,支持线性代数、矩阵和矢量运算、数值分析及相关的算法。

根据官方文档 ,下载Eigen即可,不需要build。
检查Eigen是否已经安装

pkg-config --modversion eigen3
==> 3.3.7
wget https://gitlab.com/libeigen/eigen/-/archive/3.2.10/eigen-3.2.10.tar.gz
tar -zxvf eigen-3.2.10.tar.gz

这里建议用Eigen 3.2版本,因为3.3版本中取消了 AlignedBit(deprecated)

Note: 用 sudo apt install libeigen3-dev 会安装Eigen 3.3版本

其他依赖

DBoW2 和 g2o library项目源代码已经包含在 Thirdparty 文件夹下。build.sh里面自动build了两个libraries。

安装ORB-SLAM3

git clone https://github.com/UZ-SLAMLab/ORB_SLAM3.git ORB_SLAM3
cd ORB_SLAM3
chmod +x build.sh
./build.sh

安装过程中遇到的issues

1. 源代码

问题:no match for ‘operator/’
解决方法:
根据issue,
(1) 将ORB-SLAM3 src/LocalMapping.cc 的第628行改成

x3D = x3D_h.get_minor<3,1>(0,0) * (1/x3D_h(3));

(2) 将ORB-SLAM3 src/CameraModels/KannalaBrandt8.cpp 的第535行改成

x3D = x3D_h.get_minor<3,1>(0,0) * (1/x3D_h(3));

2. undefined reference to uuid

问题:

//usr/lib/x86_64-linux-gnu/libgdcmMSFF.so.2.8: undefined reference to 'uuid_generate@UUID_1.0'
//usr/lib/x86_64-linux-gnu/libgdcmMSFF.so.2.8: undefined reference to 'uuid_parse@UUID_1.0'
//usr/lib/x86_64-linux-gnu/libgdcmMSFF.so.2.8: undefined reference to 'uuid_unparse@UUID_1.0'
collect2: error: ld returned 1 exit status
CMakeFiles/mono_inertial_tum_vi.dir/build.make:179: recipe for target '../Examples/Monocular-Inertial/mono_inertial_tum_vi' failed
make[2]: *** [../Examples/Monocular-Inertial/mono_inertial_tum_vi] Error 1
CMakeFiles/Makefile2:354: recipe for target 'CMakeFiles/mono_inertial_tum_vi.dir/all' failed
make[1]: *** [CMakeFiles/mono_inertial_tum_vi.dir/all] Error 2

解决方法:

  1. 检查是否缺少libgdcmMSFF.so库文件
ldconfig -p|grep libgdcmMSFF
==>libgdcmMSFF.so.2.8 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libgdcmMSFF.so.2.8
   libgdcmMSFF.so (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libgdcmMSFF.so

所以/usr/lib/x86_64-linux-gnu应该要放在LD_LIBRARY_PATH环境变量里面:在 .bashrc 文件中写入:

export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu/:$LD_LIBRARY_PATH

然后更新 .bashrc:

source ~/.bashrc
  1. 检查是否缺少libuuid
ldconfig -p|grep libuuid
==>libuuid.so.1 (libc6,x86-64) => /lib/x86_64-linux-gnu/libuuid.so.1
   libuuid.so (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libuuid.so
  1. 搜索路径出现冲突
    若安装了 Anaconda3/ Anaconda2 ,会出现在调用uuid的时候,找到Anaconda3/lib下的uuid而非usr/lib下的。因此,把anaconda3/lib下的libuuid库文件移走,即可解决问题。
ls home/jyq/anaconda3/lib/libuuid*
mkdir home/jyq/anaconda3/libuuid
mv home/jyq/anaconda3/lib/libuuid* home/jyq/anaconda3/libuuid

测试

EuRoC Examples

下载一共11个数据集(unzip -d MH01 MH_01.zip),并更改 euroc_examples.sh 中的数据的路径。

运行./euroc_examples.sh,出现以下错误:

terminate called after throwing an instance of 'std::runtime_error'
what(): Pangolin X11: Failed to open X display

问题原因:用remote server时启用图形界面导致以上错误
解决方式:将ORB_SLAM3/Examples/Monocular/mono_euroc.cc和ORB_SLAM3/Examples/Monocular/stereo_euroc.cc中的这句话中的true改为false

// Create SLAM system. It initializes all system threads and gets ready to process frames.
ORB_SLAM3::System SLAM(argv[1],argv[2],ORB_SLAM2::System::MONOCULAR,false);

这样就不会去调用线程进行图形化处理。改完后重新使用./build.sh编译,再运行就不会报错了。

TUM RGB-D Example

下载TUM RGB-D数据集
由于Kinect得到的color images和depth images不同步,导致RGB图像和深度图像的time stamp不相同。下载python script associate.py(download here)并放置在Examples/RGB-D目录下。associate.py通过读取rgb.txt和depth.txt中的time stamp,关联RGB图像和深度图像。

生成RGB-D关联 (association files):

python associate.py PATH_TO_RGBD_DATASET/rgb.txt PATH_TO_RGBD_DATASET_FOLDER/depth.txt > ASSOCIATE_NAME.txt

Notice:ORB-SLAM3 Examples/RGB-D/associations文件夹下提供了TUM RGB-D数据集的关联。

在Examples/RGB-D目录下,运行

./rgbd_tum ../../Vocabulary/ORBvoc.txt TUMX.yaml PATH_TO_RGBD_DATASET_FOLDER PATH_TO_ASSOCIATION_FILE

其中TUMX.yaml替换为TUM1.yamlTUM2.yamlTUM3.yaml

同理,用remote server时,请在rgbd_tum.cc关掉图形界面显示。

你可能感兴趣的:(环境安装,slam,linux,anaconda)