目录
这个编译可能会出现找不到Qt5,下载Qt5,我下载的是5.12.8
环境说明:
我用的是虚拟机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给的依赖挨个安装即可
然后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
然后执行这个脚本
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版本
更新一下,准备开始安装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换一个中国最优的一个源
安装好了依赖,编译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 然后下载即可
①输入命令:“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是官方给的安装脚本,执行这个即可编译
但是我遇到一个问题,我执行这个编译完不成,出现了报错
这个报错原因就是内存不够,我虚拟机分配的8G内存。
然后我把虚拟机分配16G内存,再次执行build.sh
同时我打开另一个终端,查看内存使用情况。如图
发现疯狂吃内存,飙升到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就运行起来啦
运行截图:
刚开始
中间
快结束的时候
运行结束后终端显示如下
参考博客:安装orbslam3时报错:error: no match for ‘operator/’_威少少熬夜的博客-CSDN博客