基于ORB-SLAM3库搭建SLAM系统

基于,orb,slam3,搭建,slam,系统 · 浏览次数 : 470

小编点评

**PART 1:下载数据集** - 获取 EuRoc 数据集下载地址:https://projects.asl.ethz.ch/datasets/doku.php?id=kmavvisualinertialdatasets#downloads - 解压数据集并将解压后的文件放置在 ORB_SLAM3-master 文件夹中。 **PART 2:安装 OpenCV 库** - 下载离线 ippicv 库:`sudo apt-get install mlocate` - 下载 ippicv 库:`wget https://github.com/opencv/opencv_3rdparty/tree/ippicv/master_20170822/ippicv/` - 将 ippicv 库单独拷贝到 /usr/local/lib/opencv_3rdparty/ippicv 文件夹中 **PART 3:测试环境是否搭建成功** - 下载 EuroC 示例脚本:`cd Thirdparty/Sophusecho && echo "Configuring and building Thirdparty/Sophus ..." && mkdir buildcd buildcmake .. -DCMAKE_BUILD_TYPE=Releasemake -j cd ../../g2o echo "Configuring and building Thirdparty/g2o ..." mkdir buildcd buildcmake .. -DCMAKE_BUILD_TYPE=Releasemake -jcd ../../Sophusecho "Configuring and building Thirdparty/Sophus ..."mkdir buildcd buildcmake .. -DCMAKE_BUILD_TYPE=Releasemake -jcd ../../../echo "Uncompress vocabulary ..."cd Vocabularytar -xf ORBvoc.txt.tar.gzcd ..` - 启动示例脚本:`./euroc_examples.sh` **PART 4:部分问题解决方案** - 安装 OpenCV 库时可能遇到 `libjasper-dev` 无法定位的错误。解决方法是下载并安装 `libjasper1` 和 `libjasper-dev` 库。 - 在配置 bash 时可能遇到 `mlocate` 命令不可用的错误。解决方法是安装 `mlocate` 命令。

正文

博客地址:https://www.cnblogs.com/zylyehuo/

参考资料

ORB-SLAM3配置及安装教程
ORB-SLAM3配置安装及运行

环境配置

Win 11pro
VMware 17Pro
Ubuntu 18.04
Eigen3
Pangolin
Opencv3.4.3
ORB-SLAM3源码: https://github.com/UZ-SLAMLab/ORB_SLAM3

效果图

注意事项

建议留有 15-20G 左右的内存
如果是新系统,没有安装git,则需要先装git
sudo apt-get install git
如果是新系统的话,预装的vi编辑器不完整,用不了
执行如下命令安装vi编辑器
sudo apt-get remove vim-common
sudo apt-get install vim
DBoW2 and g2o
DBoW2主要用于回环检测,g2o(General Graph Optimization)主要用于图优化。
ORB-SLAM3的源码包自带DBoW2 and g2o,编译时会自动安装,不用管。

PART 1:准备工作(下载安装要用的文件)

step1: 新建一个文件夹,用于存放下载的文件

暂取名为 SLAM

step2: 下载 ORB-SLAM3源码

在 SLAM 文件夹下打开终端
输入以下指令
git clone https://github.com/UZ-SLAMLab/ORB_SLAM3.git

step3: 下载 Pangolin

在 SLAM 文件夹下打开终端
输入以下指令
git clone https://github.com/stevenlovegrove/Pangolin.git

step4: 下载 Eigen3

在 SLAM 文件夹下打开终端
输入以下指令
git clone https://github.com/eigenteam/eigen-git-mirror

PART 2:安装步骤

step1: 安装 Eigen3

在 SLAM 文件夹下打开终端
输入以下指令
cd eigen-git-mirror
mkdir build
cd build
cmake ..
sudo make install
 
#安装后,头文件安装在/usr/local/include/eigen3/

step2: 安装 Pangolin

安装 Pangolin 需要的依赖工具

在终端依次输入以下指令
sudo apt install libgl1-mesa-dev
sudo apt install libglew-dev
sudo apt install cmake
sudo apt install libpython2.7-dev
sudo apt install pkg-config
sudo apt install libegl1-mesa-dev libwayland-dev libxkbcommon-dev wayland-protocols

安装 Pangolin

在 SLAM 文件夹下打开终端
输入以下指令
cd Pangolin
mkdir build
cd build
cmake ..
cmake --build .

step3: 安装 Opencv3.4.3

官网下载地址:https://opencv.org/releases/page/5/

下载之后放在最开始创建的 SLAM 文件夹,右键提取文件进行解压
更新一下,准备安装OpenCV依赖库

在终端输入以下指令
sudo apt-get update

安装OpenCV所有依赖库

在终端输入以下指令
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

编译OpenCV

在 SLAM 文件夹下打开终端
输入以下指令
cd opencv-3.4.3
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
注意:执行上面指令后,终端会自动下载一个必需的ippicv加速库。
如果终端卡住并显示正在下载,只需要等一会儿不用进行任何操作。
否则,终端会显示报错
cmake完成之后使用make编译
make -j4
安装
sudo make install

配置环境

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 

保存,执行如下指令使得配置生效
source /etc/bash.bashrc 

更新
sudo updatedb  
4、版本检测

pkg-config --modversion opencv
输出如下,表示OpenCV完成了安装

step4: 安装 boost 库

boost官网地址:https://www.boost.org/
下载 1.77.0 版本

将文件下载至SLAM文件夹下,并解压
解压之后进入解压出来的文件夹
执行以下指令

sudo ./bootstrap.sh

执行完毕之后,会发现又多了些文件
再执行下面这个脚本

sudo ./b2 install

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

step5: 安装 libssl-dev

在 SLAM 文件夹下打开终端
输入以下指令
sudo apt-get install libssl-dev

step6: ORB-SLAM3 的编译和安装

ORB-SLAM3 源码编译

在 SLAM 文件夹下打开终端
输入以下指令
cd ORB_SLAM3-master
chmod +x build.sh
打开ORB_SLAM3-master对应的CMakeLists.txt
找到 find_package(OpenCV 4.4)这行代码,将OpenCV版本号改为find_package(OpenCV 3.4)

逐行依次执行以下指令

安装 ORB-SLAM3

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 ../../Sophus

echo "Configuring and building Thirdparty/Sophus ..."

mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make -j

cd ../../../

echo "Uncompress vocabulary ..."

cd Vocabulary
tar -xf ORBvoc.txt.tar.gz
cd ..

echo "Configuring and building ORB_SLAM3 ..."

mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make -j5

出现以下图片,则代表安装成功

PART 3:测试环境是否搭建成功(数据集测试

EuRoc数据集下载地址:
https://projects.asl.ethz.ch/datasets/doku.php?id=kmavvisualinertialdatasets#downloads
要下载ASL格式的,下载V102V103两个

这个压缩包下好之后,解压打开之后,里面是一个mav0的文件夹(有些打开会还有一个_MACOSX 文件加,可以直接删掉,只留mav0文件夹)
具体原因是这个其实是在MAC操作系统压缩时产生的缓存垃圾,在Windows系统、Linux系统就会显示出来
然后在ORB_SLAM3-master文件夹下创建一个文件夹dataset,
在dataset文件夹下将解压的数据集文件夹放进来
eg. /ORB_SLAM3-master/dataset/V102/mav0
在ORB_SLAM3-master的源码中,有一个Examples文件夹
去下面这个链接拷贝 脚本euroc_examples.shExamples文件夹
https://github.com/electech6/ORB_SLAM3_detailed_comments

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

./Examples/Monocular-Inertial/mono_inertial_euroc ./Vocabulary/ORBvoc.txt ./Examples/Monocular-Inertial/EuRoC.yaml “$pathDatasetEuroc”/V102 ./Examples/Monocular-Inertial/EuRoC_TimeStamps/V102.txt dataset-V102_monoi

加粗的地方需要改
**“$pathDatasetEuroc”**改为 ./dataset,表示数据集所在的路径
在ORB_SLAM3-master文件夹下打开终端执行以下这条指令
./Examples/Monocular-Inertial/mono_inertial_euroc ./Vocabulary/ORBvoc.txt ./Examples/Monocular-Inertial/EuRoC.yaml ./dataset/V102 ./Examples/Monocular-Inertial/EuRoC_TimeStamps/V102.txt dataset-V102_monoi

出现以下画面则代表 ORB-SLAM3 成功运行,即环境安装完成

PART 4:部分问题解决方案

1、 在安装OpenCV所有依赖库的时候出现报错信息

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
运行完这个,再输入以下这个指令
sudo apt-get install build-essential libgtk2.0-dev libavcodec-dev libavformat-dev libjpeg.dev libtiff4.dev libswscale-dev libjasper-dev

2、编译OpenCV时报错

  • 在这里插入图片描述
解决方法是下载离线的ippicv库
下载链接为:https://github.com/opencv/opencv_3rdparty/tree/ippicv/master_20170822

下载好之后,把这个ippicv文件夹单独拷贝出来,放到自己的文件夹中
然后把OpenCV源文件中 /3rdparty/ippicv 文件夹下的 ippicv.cmake 中第47行"https://raw.githubusercontent.com/opencv/opencv_3rdparty/${IPPICV_COMMIT}/ippicv/" 改成新下载的ippicv文件路径。
这样,就改成了离线编译的ippicv文件

再次执行cmake指令,完成编译
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
cmake完成之后使用make编译
make -j4
安装
sudo make install

3、在配置bash时候报错

如果执行sudo updatedb 指令报错,那么可能是没有安装mlocate
解决方法
先执行安装命令:apt-get install mlocate
再执行:sudo updatedb

4、安装 ORB-SLAM3 时候报错

运行最后一条指令 make -j5 时,出现报错如下:

解决方法
打开对应的文件,如Tracking.cc,LoopClosing.cc等
在所有 #include 后面添加以下代码
namespace cv
{
template<typename _Tp, int m, int n> static inline
Matx<_Tp, m, n> operator / (const Matx<_Tp, m, n> &a, float alpha)
{
return Matx<_Tp, m, n>(a, 1.f / alpha, Matx_ScaleOp());
}
}

效果如图

最后一条指令若使用 make -j4 或 make -j5,即使在对应的文件中加入了上述代码如果仍然会报错。

可改成仅使用 make 进行编译,但同时,改成make之后编译速度大大降低,需要等很久

与基于ORB-SLAM3库搭建SLAM系统相似的内容:

基于ORB-SLAM3库搭建SLAM系统

> 博客地址:https://www.cnblogs.com/zylyehuo/ ## 参考资料 > [ORB-SLAM3配置及安装教程](https://blog.csdn.net/shadowmimii/article/details/129472719) > [ ORB-SLAM3配置安装及运

SLAM系统--开启摄像头连接

> 博客地址:https://www.cnblogs.com/zylyehuo/ > 基于ORB-SLAM3库搭建SLAM系统 详见之前的博客 > > [基于ORB-SLAM3库搭建SLAM系统 - zylyehuo - 博客园 (cnblogs.com)](https://www.cnblogs.

Gazebo、Rviz 结合 ORB-SLAM3 实现运动规划及定位

> 博客地址:https://www.cnblogs.com/zylyehuo/ > 基于以下内容,详见博客链接 > > [基于机器人自主移动实现SLAM建图 - zylyehuo - 博客园 (cnblogs.com)](https://www.cnblogs.com/zylyehuo/p/174

基于 Three.js 的 3D 模型加载优化

作为一个3D的项目,从用户打开页面到最终模型的渲染加载的时间也会比普通的H5项目要更长一些,从而造成大量的用户流失。为了提升首屏加载的转化率,需要尽可能的降低loading的时间。这里就分享一些我们在模型加载优化方面的心得。

基于MindSpore实现BERT对话情绪识别

本文分享自华为云社区《【昇思25天学习打卡营打卡指南-第二十四天】基于 MindSpore 实现 BERT 对话情绪识别》,作者:JeffDing。 模型简介 BERT全称是来自变换器的双向编码器表征量(Bidirectional Encoder Representations from Trans

基于 Vagrant 手动部署多个 Redis Server

环境准备 宿主机环境:Windows 10 虚拟机环境:Vagrant + VirtualBox Vagrantfile 配置 首先,我们需要编写一个 Vagrantfile 来定义我们的虚拟机配置。假设已经在 D:\Vagrant\redis 目录下创建了一个 Vagrantfile,其内容如下:

基于EF Core存储的Serilog持久化服务

前言 Serilog是 .NET 上的一个原生结构化高性能日志库,这个库能实现一些比内置库更高度的定制。日志持久化是其中一个非常重要的功能,生产环境通常很难挂接调试器或者某些bug的触发条件很奇怪。为了在脱离调试环境的情况下尽可能保留更多线索来辅助解决生产问题,持久化的日志就显得很重要了。目前Ser

基于EF Core存储的国际化服务

前言 .NET 官方有一个用来管理国际化资源的扩展包Microsoft.Extensions.Localization,ASP.NET Core也用这个来实现国际化功能。但是这个包的翻译数据是使用resx资源文件来管理的,这就意味着无法动态管理。虽然官方有在文档中提供了一些第三方管理方案,但是都不太

基于FileZilla上传、下载服务器数据的方法

本文介绍FileZilla软件的下载、配置与使用方法。 在之前的博客中,我们提到了下载高分遥感影像数据需要用到FTP(文件传输协议,File Transfer Protocol)软件FileZilla;这一软件用以在自己的电脑与服务器之间相互传输数据,在进行下载科学数据、网站开发等等操作时,经常需要

Vite5+Electron聊天室|electron31跨平台仿微信EXE客户端|vue3聊天程序

基于electron31+vite5+pinia2跨端仿微信Exe聊天应用ViteElectronChat。 electron31-vite5-chat原创研发vite5+electron31+pinia2+element-plus跨平台实战仿微信客户端聊天应用。实现了聊天、联系人、收藏、朋友圈/短