从零开始Ubuntu22.04跑ORB-SLAM3代码

时间:2022-10-04 17:56:00

目录

环境说明:

1、准备工作

2、源码下载:

3、Pangolin安装:

Eigen3安装

Python

安装boost库

安装libssl-dev

OpenCV安装

注意

这个编译可能会出现找不到Qt5,下载Qt5,我下载的是5.12.8

1)添加库路径

2)更新系统库

3)配置bash

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

6)opencv版本检测

ORB_SLAM3的编译和安装

源码编译:

环境说明:

我用的是虚拟机VMware运行的

Ubuntu版本是22.04  (系统是在官网下载的)

ORB-SLAM3源码: https://github.com/UZ-SLAMLab/ORB_SLAM3

1、准备工作

sudo apt-get install cmake
sudo apt-get install gcc
sudo apt-get install g++
sudo apt-get install vim
sudo apt-get install git

2、源码下载:

去github上直接clone到本地   https://github.com/UZ-SLAMLab/ORB_SLAM3

3、Pangolin安装:

先去github把代码clone下来

地址:github.com/stevenlovegrove/Pangolin

git clone https://github.com/stevenlovegrove/Pangolin.git
然后安装按照GitHub给的依赖挨个安装即可

从零开始Ubuntu22.04跑ORB-SLAM3代码

然后Optional Dependencies for video input和Very Optional Dependencies里面的我没有装。

安装好依赖了之后编译安装Pangolin

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

Eigen3安装

安装Eigen3的时候,请下载源码进行安装。

如下

#github 有个mirror,版本3.3.4 from 2017
git clone https://github.com/eigenteam/eigen-git-mirror
 
#安装
cd eigen-git-mirror
mkdir build
cd build
cmake ..
sudo make install
 
#安装后,头文件安装在/usr/local/include/eigen3/

Python

执行如下指令

sudo apt install libpython2.7-dev

安装boost库

由此链接进入boost官网:Boost C++ Libraries

我下载的是boost1.77.0

从零开始Ubuntu22.04跑ORB-SLAM3代码

 从零开始Ubuntu22.04跑ORB-SLAM3代码

然后执行这个脚本

sudo ./bootstrap.sh

安装libssl-dev

执行

sudo apt-get install libssl-dev

OpenCV安装

源码要求OpenCV 3.2及以上。

但是最好不要安装OpenCV4以上(4默认不会生成.pc文件,最后查看版本的时候查看不到,找不到包,网上有人说是编译选项没选好,我改了,还是不行,我也不知道是啥原因,最后我换了3.4版本的)

首先,到官网去下载源码:https://opencv.org/releases/

我下载的是3.4.10版本
从零开始Ubuntu22.04跑ORB-SLAM3代码

更新一下,准备开始安装OpenCV依赖库(不更新也行)

sudo apt-get update

这几个依赖库,一条指令完成

sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg.dev libtiff4.dev libswscale-dev libjasper-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

注意

如果安装还是出错,比如说找不到安装包,我们可以更换源,网上说阿里源是最好的,但是我们可以把那些源都放上去。具体操作:

打开源文件

sudo vim /etc/apt/sources.list

清华源

# 默认注释了源码镜像以提高 apt update 速度,如有需要可自行取消注释
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-security main restricted universe multiverse

# 预发布软件源,不建议启用
# deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-proposed main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ jammy-proposed main restricted universe multiverse

阿里源

deb http://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ jammy-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse

中科大源


deb https://mirrors.ustc.edu.cn/ubuntu/ jammy main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ jammy main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ jammy-updates main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ jammy-backports main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ jammy-security main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ jammy-security main restricted universe multiverse
deb https://mirrors.ustc.edu.cn/ubuntu/ jammy-proposed main restricted universe multiverse
deb-src https://mirrors.ustc.edu.cn/ubuntu/ jammy-proposed main restricted universe multiverse


网易163源

deb http://mirrors.163.com/ubuntu/ jammy main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ jammy-security main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ jammy-updates main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ jammy-proposed main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ jammy-backports main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ jammy main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ jammy-security main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ jammy-updates main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ jammy-proposed main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ jammy-backports main restricted universe multiverse

换完源之后update一下(可以把以上的源都放上)

sudo apt-get update
sudo apt-get upgrade

或者打开software&updates,把下面的选项都选上,Download from换一个中国最优的一个源

从零开始Ubuntu22.04跑ORB-SLAM3代码

 安装好了依赖,编译OpenCV

cd opencv-3.4.10
mkdir build
cd build

cmake(注意一定要用下面的编译方式,不要用cmake ..)

cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..

这个编译可能会出现找不到Qt5,下载Qt5,我下载的是5.12.8

下载链接:Index of /archive/qt

找到后缀为.run   然后下载即可

从零开始Ubuntu22.04跑ORB-SLAM3代码

 ①输入命令:“sudo chmod -R 777 qt-opensource-linux-x64-5.9.8.run”,赋予安装包权限。

sudo chmod -R 777 qt-opensource-linux-x64-5.12.8.run

②输入命令“sudo ./qt-opensource-linux-x64-5.9.8.run”,进行qt安装,默认会将qt安装在/opt下

sudo ./qt-opensource-linux-x64-5.12.8.run

根据弹出的窗口,根据提示,一直点击 next就可以了,然后点击 skip,之后继续点击 next

(66条消息) Qt 5 下载与安装详解_Oo安暖oOo的博客-CSDN博客_qt5安装

重新编译OpenCV

cd opencv-3.4.10
mkdir build
cd build

cmake

cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..

然后make一下

( j4 代表4核  我虚拟机分配的8核   我编译用的4核   也可以不用 直接 make即可 就是慢一点)

make -j4

安装

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 

6)opencv版本检测

pkg-config --modversion opencv

ORB_SLAM3的编译和安装

源码编译:

进入源码文件夹

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

注意:这个build.sh是官方给的安装脚本,执行这个即可编译

但是我遇到一个问题,我执行这个编译完不成,出现了报错

从零开始Ubuntu22.04跑ORB-SLAM3代码

这个报错原因就是内存不够,我虚拟机分配的8G内存。

然后我把虚拟机分配16G内存,再次执行build.sh

同时我打开另一个终端,查看内存使用情况。如图

从零开始Ubuntu22.04跑ORB-SLAM3代码

发现疯狂吃内存,飙升到14G,而且还在上升。最后还是报错,内存不够。

不过我觉得不应该啊。不应该16G还不够

所以我换了个方法编译

打开build.sh这个脚本

脚本里面内容如下
 

echo "Configuring and building Thirdparty/DBoW2 ..."
 
cd Thirdparty/DBoW2
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make -j
 
cd ../../g2o
 
echo "Configuring and building Thirdparty/g2o ..."
 
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make -j
 
cd ../../../
 
echo "Uncompress vocabulary ..."
 
cd Vocabulary
tar -xf ORBvoc.txt.tar.gz
 
 
echo "Configuring and building ORB_SLAM3 ..."
 
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make -j

我不执行这个脚本,而是挨个执行里面的语句,自己手动编译

并且我把这里面的make -j  换成了make -j2 来执行

报错2

make[2]: *** [CMakeFiles/ORB_SLAM3.dir/build.make:89:CMakeFiles/ORB_SLAM3.dir/src/LocalMapping.cc.o] 错误 1
 
make[2]: *** [CMakeFiles/ORB_SLAM3.dir/build.make:349:CMakeFiles/ORB_SLAM3.dir/src/CameraModels/KannalaBrandt8.cpp.o] 错误 1

解决办法是:

在报错的文件里,如KannalaBrandt8.cpp,LocalMapping.cc

在include之后加上如下代码

参考博客(65条消息) ORB-SLAM3配置安装及运行---Ubuntu20.04(2021年)_1900_的博客-CSDN博客_orbslam3运行

数据集测试
数据集下载地址:(下载很慢,百度云有会员的同学可以用我给的百度云链接)

https://projects.asl.ethz.ch/datasets/doku.php?id=kmavvisualinertialdatasets#downloads

要下载ASL格式的,我下的是第一个MH01

注意:这个网站下载的贼慢。

我这里放一个百度云链接,是我下载出来的MH01的压缩包

链接:https://pan.baidu.com/s/1glBWtlwACJnnuRqGrnMy-g 
提取码:gixc 

这个压缩包下好了之后,把他解压了,里面是一个mav0的文件夹(注意看你下的对不)

然后在你的文件夹下,我的是ORB-SLAM3文件夹下,创建一个文件夹叫dataset

在dataset文件夹下再创建一个MH01文件夹

然后把mav0文件夹放到MH01里面去

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

这个文件夹下有一个脚本“euroc_examples.sh“。打开这个脚本

你可以看到有一个与MH01有关的指令(就是第一条) 指令如下:

./Monocular/mono_euroc ../Vocabulary/ORBvoc.txt ./Monocular/EuRoC.yaml "$pathDatasetEuroc"/MH01 ./Monocular/EuRoC_TimeStamps/MH01.txt dataset-MH01_mono
把这条指令复制出来:(我的指令复制出来如下)

./Monocular/mono_euroc ../Vocabulary/ORBvoc.txt ./Monocular/EuRoC.yaml "$pathDatasetEuroc"/MH01 ./Monocular/EuRoC_TimeStamps/MH01.txt dataset-MH01_mono

其中我标红的需要改:

把"$pathDatasetEuroc"/MH01  改成你自己的路径,比如我的路径就是  

../dataset/MH01
为什么是这样,因为我观察这个指令,会发现他所执行的程序

比如./Monocular/mono_euroc

这个Monocular文件夹是在Examples文件夹下的,那也就意味着这个指令是在Examples文件夹下执行的才对

然后呢,咱们的数据集dataset在上一层文件夹呢

故改成 ../dataset/MH01

然后再把末尾的dataset-MH01_mono删了

最后就得到了如下指令

./Monocular/mono_euroc ../Vocabulary/ORBvoc.txt ./Monocular/EuRoC.yaml ../dataset/MH01 ./Monocular/EuRoC_TimeStamps/MH01.txt

然后在Examples文件夹下,打开终端,执行如下指令

ORB-SLAM3就运行起来啦

运行截图:
刚开始

从零开始Ubuntu22.04跑ORB-SLAM3代码

中间

从零开始Ubuntu22.04跑ORB-SLAM3代码

快结束的时候

从零开始Ubuntu22.04跑ORB-SLAM3代码

运行结束后终端显示如下

 从零开始Ubuntu22.04跑ORB-SLAM3代码

参考博客:安装orbslam3时报错:error: no match for ‘operator/’_威少少熬夜的博客-CSDN博客