基于ORB-SLAM3库搭建SLAM系统
参考资料
环境配置
Win 11pro
VMware 17Pro
Ubuntu 18.04
Eigen3
Pangolin
Opencv3.4.3
ORB-SLAM3源码: https://github.com/UZ-SLAMLab/ORB_SLAM3
效果图
注意事项
如果是新系统,没有安装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
下载之后放在最开始创建的 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指令,完成编译
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
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格式的,下载V102和V203两个
这个压缩包下好之后,解压打开之后,里面是一个mav0的文件夹(有些打开会还有一个_MACOSX 文件加,可以直接删掉,只留mav0文件夹)
具体原因是这个其实是在MAC操作系统压缩时产生的缓存垃圾,在Windows系统、Linux系统就会显示出来
然后在ORB_SLAM3-master文件夹下创建一个文件夹dataset,
在dataset文件夹下将解压的数据集文件夹放进来
eg. /ORB_SLAM3-master/dataset/V102/mav0
在ORB_SLAM3-master的源码中,有一个Examples文件夹
去下面这个链接拷贝 脚本euroc_examples.sh 到 Examples文件夹
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文件
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系统的更多相关文章
- 一个基于深度学习回环检测模块的简单双目 SLAM 系统
转载请注明出处,谢谢 原创作者:Mingrui 原创链接:https://www.cnblogs.com/MingruiYu/p/12634631.html 写在前面 最近在搞本科毕设,关于基于深度学 ...
- 基于CentOS与VmwareStation10搭建Oracle11G RAC 64集群环境:4.安装Oracle RAC FAQ-4.1.系统界面报错Gnome
1.错误信息:登录系统后,屏幕弹出几个错误对话框,无菜单.无按钮 GConf error: Failed to contact configuration server; some possible ...
- 基于SRS+OBS搭建直播系统
这段时间与视频,直播相关的技术不可谓不热,今天我们就近距离接触下,尽早搭上这班车! 我们先看一张效果图 左边是OBS 推流端,右边是VLC播放器,稍微有延迟! 本文是基于VMware(12.5.7)+ ...
- SpringBoot整合Shiro实现基于角色的权限访问控制(RBAC)系统简单设计从零搭建
SpringBoot整合Shiro实现基于角色的权限访问控制(RBAC)系统简单设计从零搭建 技术栈 : SpringBoot + shiro + jpa + freemark ,因为篇幅原因,这里只 ...
- 使用innobackupex基于从库搭建级联从库及一两从
使用innobackupex基于从库搭建mysql主从架构 现有的架构是一主一从,版本为Mysql5.6.37.实施要求是:利用从库,搭建第二个从库,版本为5.7.21 主库:192.168.1.21 ...
- Percona XtraBackup不锁库搭建slave数据库-基于GTID
Percona XtraBackup不锁库搭建slave数据库-基于GTID 1.下载安装epel源并安装 wget http://ftp.cuhk.edu.hk/pub/linux/fedora-e ...
- 温故知新,基于Nexus3和Docker搭建私有Docker Mirrors镜像库
前言 接着上一篇文章关于基于Nexus3和Docker搭建私有Nuget服务的探索,我们可以进一步利用Nexus3来创建一个私有的Docker镜像库满足内部需求. 仓库类型 hosted: 本地存储, ...
- 基于Gin+Gorm框架搭建MVC模式的Go语言后端系统
文/朱季谦 环境准备:安装Gin与Gorm 本文搭建准备环境:Gin+Gorm+MySql. Gin是Go语言的一套WEB框架,在学习一种陌生语言的陌生框架,最好的方式,就是用我们熟悉的思维去学.作为 ...
- 面向服务体系架构(SOA)和数据仓库(DW)的思考基于 IBM 产品体系搭建基于 SOA 和 DW 的企业基础架构平台
面向服务体系架构(SOA)和数据仓库(DW)的思考 基于 IBM 产品体系搭建基于 SOA 和 DW 的企业基础架构平台 当前业界对面向服务体系架构(SOA)和数据仓库(Data Warehouse, ...
- ELK+FileBeat+Log4Net搭建日志系统
ELK+FileBeat+Log4Net搭建日志系统 来源:https://www.zybuluo.com/muyanfeixiang/note/608470 标签(空格分隔): ELK Log4Ne ...
随机推荐
- PHP 合并两个二维数组
思路:遍历二维数组,合并两个二维数组的值,赋值给新数组 function mergeArray($arr1,$arr2){ $newArr = []; foreach($arr1 as $v1){ f ...
- ArcEngine(平板电脑墨迹错误代码。多次调用 RtpEnabled (异常来自 HRESULT:0x80040239))问题未有效解决
测试数据库中的要素无法执行ITopologicOperater接口下的方法,错误如图 暂记,错误未解决 tip: 1.随便移动一个节点 也不报错/ 2.手动按照他的节点画一个也不报错 3.bufer参 ...
- pytorch CrossEntropyLoss() 默认转换one-hot编码
import torchpredict = torch.randn((4,3))predict = torch.nn.functional.softmax(predict,dim = 1)target ...
- NodeJs 版本管理
nvm-windows 说明:nvm是Nodejs的版本管理器.在开发中项目可能需要低版本或者高版本的Nodejs运行环境,以此我们可以使用nvm来切换Nodejs的版本. 在安装NVM for Wi ...
- Cryptanalyzing and Improving a Novel Color Image Encryption Algorithm Using RT-Enhanced Chaotic Tent Maps
Cryptanalyzing and Improving a Novel ColorImage Encryption Algorithm Using RT-EnhancedChaotic Tent M ...
- DVWA-XSS (Stored) 存储型XSS
存储型XSS,顾名思义,就是会传入数据库,长久的使用,常见为留言板,用户信息资料. LOW 审计源码 <?php // 是否提交 btnSign if( isset( $_POST[ 'btnS ...
- 使用go的并发性来解决Hilbert酒店问题
译自:Designing for Concurrency: the Hilbert's Hotel Problem in Go,本文使用go的并发性来解决Hilbert酒店问题.本文比较有意思的是它对 ...
- 17.explicit关键字
c++提供了关键字explicit,禁止通过构造函数进行的隐式转换.声明为explicit的构造函数不能在隐式转换中使用. [explicit注意] ● explicit用于修饰构造函数,防止隐式转化 ...
- Salesforce LWC学习(三十三) lightning-datatable 翻页bug处理
本来lightning-datatable这种标签,基本上任何的项目都会用到而且很精通,所以当时感觉没有太大的单独一篇写的必要,在Salesforce LWC学习(三十) lwc superbadge ...
- java多线程基础小白指南--关键字识别(start,run,sleep,wait,join,yield)
在学习java多线程基础上,会遇到几个关键字,理解并识别它们是掌握多线程的必备知识,下面,我将通过源码或者程序演示给出我对这几个关键字的理解,如果有不同意见,欢迎在评论区或者发私信与我探讨. 一.st ...
















