ubuntu 16.04 ORB-SLAM3安装

1.安装依赖库

1.1 安装Pangolin

注意:

在github: https://github.com/stevenlovegrove/Pangolin
上下载的Pangolin安装时会出现缺少Eigen3问题,这是因为github上是最新的Pangolin,参照如下网址,下载安装Pangolin0.5
https://blog.csdn.net/qq_33950926/article/details/121129028

1.Pangolin0.5的依赖,参考下载下来的Pangolin包里的README.md

  • C++11

  • OpenGL (Desktop / ES / ES2)

sudo apt install libgl1-mesa-dev
  • Glew
sudo apt install libglew-dev
  • CMake (for build environment)
sudo apt install cmake

2.编译安装方法: 参考https://blog.csdn.net/qq_32507255/article/details/115445932

$ cd Pangolin
// 创建编译文件夹(在Pangolin文件夹下)
$ mkdir build && cd build
// 配置编译选项
$ cmake ..
// 开始编译代码
$ cmake --build .
// 安装
$ sudo make install

注意安装后的位置:
头文件: /usr/local/include/pangolin/
库文件: /usr/local/lib/libpangolin.so
额外的文件:
/usr/local/lib/cmake/Pangolin/

3.卸载方法:

1.进入编译时的文件夹cd build
2.执行卸载命令sudo make uninstall,此命令会删除安装时添加的所有文件,但是不处理文件夹
3.根据上一个命令的回显,删除目的文件夹的与该软件有关的空文件夹

1.2 安装Opencv

参照
https://www.cnblogs.com/vivian187/p/14109111.html

1.3 安装Eigen3

必须使用Eigen 3.3版本,因为Thirdparty/Sophus依赖于3.3版本

在ubuntu16.04中提前安装了,但是最新是3.2.92版本

// 方法
sudo apt install libeigen3-dev

// 查看版本方法: 3.2.92
$ cat /usr/include/eigen3/Eigen/src/Core/util/Macros.h

...
#define EIGEN_WORLD_VERSION 3
#define EIGEN_MAJOR_VERSION 2
#define EIGEN_MINOR_VERSION 92
...

因此只能通过官网安装
(1) 首先通过官网下载源码:http://eigen.tuxfamily.org/index.php?title=Main_Page#Compiler_support
(2) 解压下载的eigen-3.3.9.tar.gz

tar -xzvf eigen-3.3.9.tar.gz

(3) 将原来的eigen3文件夹改名为eigen_[版本号],然后将这个新的eigen文件夹命名为eigen3,命令如下:

$ cd /usr/include
$ sudo mv eigen3 eigen3.2.92
$ 将新下载的eigen3移到/usr/include中

(4) 然后修改相应的cmake文件
1)进入/usr/lib/cmake/eigen3/

$ cd /usr/lib/cmake/eigen3/
$ sudo gedit Eigen3Config.cmake

将
set ( EIGEN3_VERSION_STRING "3.2.92" )
set ( EIGEN3_VERSION_MAJOR  "3" )
set ( EIGEN3_VERSION_MINOR  "2" )
set ( EIGEN3_VERSION_PATCH  "92" )
改为
set ( EIGEN3_VERSION_STRING "3.3.9" )
set ( EIGEN3_VERSION_MAJOR  "3" )
set ( EIGEN3_VERSION_MINOR  "3" )
set ( EIGEN3_VERSION_PATCH  "9" )

2)进入/usr/local/lib/cmake/Ceres/ (没有安装ceres可省略此步骤)

$ cd /usr/local/lib/cmake/Ceres/
$ sudo gedit CeresConfig.cmake

这是一个检验版本一致性的东西,然后进入之后,找到 set(CERES_EIGEN_VERSION 3.2.92),将这个版本修改为3.3.9

大功告成!然后当你再次用cmake的时候,find_package找到的就是3.3.9这个版本啦!!

1.4 安装boost

这个是在编译时遇到的最后一个问题

/usr/bin/ld: 找不到 -lboost_serialization

安装boost: 参照https://blog.csdn.net/hhz_999/article/details/120473659

(1) 进入boost官网网址:http://www.boost.org/users/download/
(2) 下载boost安装包,我选择的是boost_1_80_0.tar.gz版本
(3) 安装

$ tar -xzvf boost_1_80_0.tar.gz
$ cd boost_1_80_0
$ ./bootstrap.sh
$ sudo ./b2 install

头文件安装到了/usr/local/include/boost/
库文件安装到了/usr/local/lib/
一些cmake配置在/usr/local/lib/cmake/boost*等

1.5 其他依赖

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

2 安装ORB-SLAM3

(1) 下载地址:
https://github.com/UZ-SLAMLab/ORB_SLAM3

(2) 编译方法: 参照…/ORB-SLAM3/README.md

$ cd ORB_SLAM3
$ chmod +x build.sh
$ ./build.sh

3 编译ORB_SLAM3遇到的问题

(1) fatal error: boost/serialization/serialization.hpp: No such file or directory

解决方案:
$ sudo apt install libboost-filesystem-dev

(2) Eigen3版本问题
接下来需要对ORB-SLAM3中的“CMakeLists.txt”文件进行修改,防止版本与其默认3.1.0不同而无法编译(如下所示),其实高版本如果差的不是很多,“CMakeLists.txt”更改之后应该没有影响

[1] 对路径为 …/ORB-SLAM3/CMakeLists.txt的41行,进行修改

find_package(Eigen3 3.1.0 REQUIRED)
改为
find_package(Eigen3 REQUIRED)

[2] 同时对路径 …/ORB_SLAM3/Thirdparty/g2o/CMakeLists.txt的第72行,进行修改

FIND_PACKAGE(Eigen3 3.1.0 REQUIRED)
改为
FIND_PACKAGE(Eigen3 REQUIRED)

[3] 对路径 …/ORB_SLAM3/Thirdparty/Sophus/CMakeLists.txt的第35行,进行修改

find_package(Eigen3 3.3.0 REQUIRED)
改为
find_package(Eigen3 REQUIRED)

(3) Opencv版本问题
对路径为 …/ORB-SLAM3/CMakeLists.txt的33行,进行修改

find_package(OpenCV 4.4)
改为
find_package(OpenCV 3 REQUIRED)

4 运行

以Examples/Monocular为例,测试Euroc数据集
(1) 下载: http://robotics.ethz.ch/~asl-datasets/ijrr_euroc_mav_dataset/machine_hall/
下载MH_04_difficult/MH_04_difficult.zip (最小)

在ORB_SLAM3/Examples/Monocular/中新建文件夹dataset,在dataset中新建文件夹MH04,将MH_04_difficult.zip解压出来的mav0放进去

(2)运行

$ cd ORB-SLAM3
$ ./Examples/Monocular/mono_euroc ./Vocabulary/ORBvoc.txt ./Examples/Monocular/EuRoC.yaml ./Examples/Monocular/dataset/MH04 ./Examples/Monocular/EuRoC_TimeStamps/MH04.txt

(3)界面
默认是没有界面的,如果需要界面,修改代码:

mono_euroc.cc中
ORB_SLAM3::System SLAM(argv[1],argv[2],ORB_SLAM3::System::MONOCULAR, false);
改为
ORB_SLAM3::System SLAM(argv[1],argv[2],ORB_SLAM3::System::MONOCULAR, true);

参考
https://blog.csdn.net/weixin_43192983/article/details/119149611

安装遇到的问题参考
https://blog.csdn.net/qq_38204686/article/details/114639824
https://blog.csdn.net/ly869915532/article/details/107899708

Eigen3版本问题参考
https://blog.csdn.net/m0_38055352/article/details/102900516

posted on 2022-09-01 10:59  JJ_S  阅读(604)  评论(0编辑  收藏  举报