Ubuntu16.03配置安装及运行ORB-SLAM3(含遇到的坑与注意事项)

Posted 亲爱的~

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Ubuntu16.03配置安装及运行ORB-SLAM3(含遇到的坑与注意事项)相关的知识,希望对你有一定的参考价值。

ORBSLAM3

实验环境

本文配置、安装与运行ORB-SLAM3于2023.3.25,撰写于2023.3.26,仅根据安装的history查看所有步骤以记录成该文。

我采用的是Ubuntu16.04双系统进行实现,其中ORB-SLAM3源码: ORB-SLAM3 ,我下的这个。

当然可以下带注释的 ORB-SLAM3

下载依赖

2.1 源码下载

最创建个文件夹,把待会要下载的东西都到这个文件夹下。

1、orbslam3源码下载

打开终端,输入下面这个指令

git clone https://github.com/UZ-SLAMLab/ORB_SLAM3.git

如果 git 拒绝连接可以直接去网址下载解压ORB_SLAM3
当然我基本都是用的指令git,除了eigen,下面有详细介绍。

注意,如果是新系统,没有安装git,则需要先装git

sudo apt-get install git

另外,如果是新系统的话,预装的vi编辑器不完整,用不了。

执行如下命令安装vi编辑器。

sudo apt-get remove vim-common
sudo apt-get install vim

提前装cmake

sudo apt-get install cmake

2、Pangolin

git clone https://github.com/stevenlovegrove/Pangolin.git

或者去这个网址下载压缩包Pangolin

但是我用的这个pangonlin

git clone https://github.com/zzx2GH/Pangolin.git

3、Eigen3

git clone https://github.com/eigenteam/eigen-git-mirror

4、其他依赖

sudo apt install gcc
sudo apt install build-essential
sudo apt-get install build-essential libgl1-mesa-dev
sudo apt-get install freeglut3-dev
sudo apt-get install libglew-dev libsdl2-dev libsdl2-image-dev libglm-dev libfreetype6-dev

2.2 Eigen 3安装

先安装依赖

sudo apt-get install libxmu-dev

我两种都下了
1、使用指令快速安装(但是好多说不建议,我也运行了)

sudo apt-get install libeigen3-dev

如果采用这个指令安装,默认是安装到了/usr/include/eigen3,ORB-SLAM3检测不到,导致编译会报错。利用源码安装,安装好的路径是 /usr/local/include/eigen3/
因此要:

sudo cp -r /usr/local/include/eigen3/Eigen /usr/local/include 

2、源码镜像安装(我感觉这个不需要,但是我也先使用的这个)

git clone https://github.com/eigenteam/eigen-git-mirror

然后进到下载的eigen进行安装

cd eigen-git-mirror
mkdir build
cd build
cmake ..
sudo make install

3、然后我又去官网下载了一个版本: eigen-3.3.9
然后源码安装(cp指令是我俩安装完后执行的),我下载的3.3.9

#安装
unzip eigen-3.3.9.zip
cd eigen-3.3.9
mkdir build
cd build
cmake ..
sudo make install
 
#安装后,头文件安装在/usr/local/include/eigen3/

所以我为了保险起见运行以下

sudo cp -r /usr/local/include/eigen3/Eigen /usr/local/include 

2.3 Pangolin安装

先安装依赖

sudo apt install libgl1-mesa-dev
sudo apt install libglew-dev
sudo apt install libpython2.7-dev
sudo apt install pkg-config
sudo apt install libegl1-mesa-dev libwayland-dev libxkbcommon-dev wayland-protocols

sudo apt install ffmpeg libavcodec-dev libavutil-dev libavformat-dev libswscale-dev libavdevice-dev
sudo apt install libdc1394-22-dev libraw1394-dev
sudo apt install libjpeg-dev libpng-dev libtiff5-dev libopenexr-dev

sudo apt-get install libboost-dev libboost-thread-dev libboost-filesystem-dev

Pangolin安装需要cmake3.10以上
我先卸载了下的

sudo apt remove cmake

我去cmae官网下载cmake-xxx.tar.gz源码包,我下载的cmake-3.16.8.tar.gz
解压

tar -zxvf cmake-3.16.8.tar.gz

编译并安装

cd cmake-3.16.8
apt-get install gcc
apt-get install g++
apt-get install libssl-dev
apt-get install build-essential
./configure
make
sudo make install
sudo cp bin/cmake /usr/bin

然后查看版本是否正确

cmake --version

然后开始安装Pangolin

cd Pangolin
mkdir build
cd build
cmake ..
cmake --build .

2.4 opencv安装

最新的ORB-SLAM3要求OpenCV 4.4及以上
但是最好不要安装OpenCV4以上(参考博主的解释是:4默认不会生成.pc文件,最后查看版本的时候查看不到,找不到包)。具体原因不太理解,最后也选择安装3.4.3版本
首先,到官网下载源码:OpenCV
ps.下载其他OpenCV3版本的理论上也可以,为了避免其他错误,选择参考博主的版本,实验可行。

下载之后放在最开始创建的文件夹,解压

unzip opencv-3.4.3.zip

ps. 也可以直接右键提取文件

更新一下,准备安装OpenCV依赖库

sudo apt-get update

使用一条指令安装所有依赖库

sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg-dev libtiff5-dev libswscale-dev libjasper-dev

# 原博客安装的是libtiff4-dev,运行过程报错,改成libtiff5-dev

注意:在运行的时候可能会出现以下报错信息

error: unable to locate libjasper-dev 无法定位这个包libjasper-dev

解决方法是:执行以下指令

sudo add-apt-repository "deb http://security.ubuntu.com/ubuntu xenial-security main"
sudo apt update
sudo apt install libjasper1 libjasper-dev

其中libjasper1是libjasper-dev的依赖包

运行完这个,再安装下面这个指令就没错了

sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg.dev libtiff4.dev libswscale-dev libjasper-dev

安装好依赖,开始编译OpenCV

cd opencv-3.4.3
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..

注意:执行上面指令后,终端会自动下载一个必需的ippicv加速库。
如果终端卡住并显示正在下载,只需要等一会儿不用进行任何操作。
PS. 这一步骤在参考博客中说需要科学上网才能正常下载,否则需要自己下载离线库编译。但经过我多次尝试,不需要科学上网也能正常下载ippicv库,可以多尝试几次(下载离线库相对比较麻烦)我选择等待!!!
然后直接

make

这个过程时间可能稍微长一点,完成之后,不要忘了安装

sudo make install

到此,OpenCV安装结束,然后配置一下环境
1)添加库路径

sudo /bin/bash -c 'echo "/usr/local/lib" > /etc/ld.so.conf.d/opencv.conf'

2)更新系统库

sudo ldconfig

3)配置bash

sudo gedit /etc/bash.bashrc

在末尾添加如下两行代码

PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig  
export PKG_CONFIG_PATH 

4)保存,执行如下指令使得配置生效

source /etc/bash.bashrc 

5)更新

sudo updatedb  

如果该指令报错,那么可能是没有安装mlocate

先执行安装命令

sudo apt-get install mlocate

然后再sudo updatedb

sudo updatedb  

6)版本检测

pkg-config --modversion opencv

注意:如果执行后,显示找不到包。那么注意下载的OpenCV版本是不是3.版本的,OpenCV版本4以上的,默认不生成.pc文件,会出现找不到包的问题

输出如下,表示OpenCV完成了安装

2.5 DBoW2 and g2o

DBoW2主要用于回环检测,g2o(General Graph Optimization)主要用于图优化。
ORB-SLAM3的源码包自带DBoW2 and g2o,编译时会自动安装,不用管。

2.6 安装boost库

由此链接进入boost官网

我下载的是1.77.0

下载之后解压

tar -xzvf boost_1_77_0.tar.gz

解压之后进入解压出来的文件夹

cd ./boost_1_77_0

执行下面这个脚本

sudo ./bootstrap.sh

执行完毕之后,会发现又多了些文件

再执行下面这个脚本

sudo ./b2 install

需要一段时间,耐心等待即可

2.7 安装libssl-dev

执行下面这个指令

sudo apt-get install libssl-dev

编译与运行

编译

在这之前先打开ORB-SLAM3对应的CMakeLists.txt
找到 find_package(OpenCV 4.4)这行代码,将OpenCV版本号改为find_package(OpenCV 3.4)
因为我们之前安装的就是3.4版本的,而在最新的ORB-SLAM3中要求是4.4及以上版本,改成3.4不影响实验

同理改了Eigen3的版本号

源码文件夹,执行下述指令

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

我是直接运行的,但是其他的有人是修改了。

运行

1、数据集

EuRoc数据集下载地址:

【超级会员V6】通过百度网盘分享的文件:EuRoC
链接:https://pan.baidu.com/s/1GfGC2yqFU0jqGaS0dOmT9A
提取码:r2bj
复制这段内容打开「百度网盘APP 即可获取」

下载比较慢,有百度网盘的可以用下面这个地址,我将所有EuRoc数据集(包括bag格式和ASL格式)都下载下来放里面了,链接永久有效

链接:https://pan.baidu.com/s/1-48M4G-CJ-j_AFSeLr8XDw?pwd=wd0s
提取码:wd0s

要下载ASL格式的,我百度云分享了Vicon Room2 01~2 03

这个压缩包下好之后,解压打开之后,里面是一个mav0的文件夹(有些打开会还有一个_MACOSX 文件加,可以直接删掉,只留mav0文件夹)

具体原因是这个其实是在MAC操作系统压缩时产生的缓存垃圾,在Windows系统、Linux系统就会显示出来(大概是这意思)

然后在ORB-SLAM3文件夹下创建一个文件夹dataset

dataset文件夹下将解压的数据集文件夹放进来

eg. /ORB-SLAM3/dataset/V201/mav0

2、复制运行脚本

然后,在ORB-SLAM3的源码中,有一个Examples文件夹

里面有一个脚本euroc_examples.sh,打开这个脚本

PS. 最新的ORB-SLAM3版本已经找不到了,可以去下面这个链接拷贝过来

ORB-SLAM3

并且里面还有ORB-SLAM3的详细注释

打开这个脚本,里面有ORB-SLAM3各种运行模式针对各个数据集的运行指令,选择下载数据集对应模式下的指令,提取出来(以V201、单目+IMU为例):

./Examples/Monocular-Inertial/mono_inertial_euroc ./Vocabulary/ORBvoc.txt ./Examples/Monocular-Inertial/EuRoC.yaml $pathDatasetEuroc/V201 ./Examples/Monocular-Inertial/EuRoC_TimeStamps/V201.txt dataset-V201_monoi

我加粗的地方需要改

$ pathDatasetEuroc改为 ./dataset,表示数据集所在的路径,同时数据集类型也要改,如加粗的201,我使用的是201简单场景,即Vicon Room2 01

即得到下面这条指令

./Examples/Monocular-Inertial/mono_inertial_euroc ./Vocabulary/ORBvoc.txt ./Examples/Monocular-Inertial/EuRoC.yaml ./dataset/V201 ./Examples/Monocular-Inertial/EuRoC_TimeStamps/V201.txt dataset-V201_monoi

在ORB-SLAM3文件夹下打开终端执行这条指令

ORB-SLAM3成功运行,如图

存储的轨迹文件

注意

1、未出现界面

如果有人运行正常,但是未出现界面,打开mono_euroc.cc查看,第83行

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

这里的4个参数初始化了SLAM 系统,可以查看头文件System.h来了解其含义。在第105行:

    // Initialize the SLAM system. It launches the Local Mapping, Loop Closing and Viewer threads.
    System(const string &strVocFile, const string &strSettingsFile, const eSensor sensor, const bool bUseViewer = true, const int initFr = 0, const string &strSequence = std::string());

可见这里的第四个bool型参数为bUseViewer,表示是否使用可视化。
所以,将mono_euroc.cc中的第83行false改为true,然后重新make编译即可展示可视化界面

2、卡在一开始出不来

卡住只有一两行显示
还有这样子:

都是数据集地址出错,我一开始放在硬盘中未拷贝电脑里,写的地址是移动硬盘地址,卡在最开始一行或者两行处,复制到电脑里,再次运行就可以了!!

结语

认真搞的话一晚上就ok,本文是我所有的步骤以及所使用的也清晰标注,可以参考我当时参考的两篇链接:
主要参考这篇 ORB-SLAM3配置及安装教程(2023.3)

当然也感谢下面两个博客:

ORB-SLAM3配置安装及运行—Ubuntu20.04(2021年)

Ubuntu16.04下ORB_SLAM3的编译及运行【完整教程】

以上是关于Ubuntu16.03配置安装及运行ORB-SLAM3(含遇到的坑与注意事项)的主要内容,如果未能解决你的问题,请参考以下文章

1 安装及添加文件到仓库

Ubuntu 18.04安装Samba服务器及配置

Ubuntu安装及配置virtualenv,virtualenvwrapper

VMware虚拟机里Ubuntu14.04下安装及配置MySQL

ubuntu下Pycharm安装及配置

Ubuntu 18.04 LTS安装Samba服务及配置