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