VMware虚拟机中ubuntu使用记录(8)—— 如何在Ubuntu18.04中安装运行非ROS版本的ORB_SLAM3跑官方数据集(全程手把手教学安装)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • ORB_SLAM3的介绍
  • 一、gitee下载ORB_SLAM3源码
    • 1. gitee导入gitHub仓库
  • 二、安装支持C++特性依赖
  • 三、安装Pangolin
    • 1. 安装Pangolin的依赖
    • 2. 下载编译
  • 四、安装Eigen3
    • 1.下载源码
    • 2. 编译安装
  • 五、安装Opencv4.5.2
    • 1. 查看opencv的版本
    • 2. 安装opencv4.5.2
  • 六、安装boost库
    • 1.下载源码
    • 2. 编译安装
  • 七、ORB_SLAM3的编译和安装
    • 1. 运行前的修改
    • 2. ORB_SLAM3的编译安装
  • 八、运行ORB_SLAM3的官方数据集
    • 1. 数据集的下载
    • 2. 查看运行指令
    • 3. 数据集测试运行
  • 总结


ORB_SLAM3的介绍

ORB-SLAM3是一款基于特征点的实时单目SLAM系统,是SLAM领域的研究热点之一。它的核心算法是结合了ORB特征点提取和描述子匹配、单目RGB相机的深度估计、运动估计和地图优化等步骤,能够在实时性和精度之间取得平衡,适用于各种环境下的定位和建图任务。在各种应用领域都有广泛的应用,如室内导航、自动驾驶、机器人导航、增强现实等。通过在移动机器人和自主系统中实现实时的SLAM功能,ORB-SLAM3为机器人领域的研究和应用提供了强大的支持,帮助机器人实现自主导航和定位。

ORB-SLAM3的算法原理主要包括以下几个步骤:首先,通过ORB特征点提取和描述子匹配来进行特征点的追踪和匹配;然后利用单目RGB相机的深度信息进行稀疏或稠密的深度估计;接着通过运动估计来估计相机的运动和姿态变换;最后通过地图优化来不断修正和优化地图的几何结构,从而实现实时的定位和建图。

总的来说,ORB-SLAM3作为一款领先的实时SLAM系统,不仅在技术上具有重要意义,还在社会和经济发展中发挥着积极的作用,推动了机器人技术的发展和应用,为社会带来了更多的便利和效益,

废话不多说,直接上教程!

一、gitee下载ORB_SLAM3源码

本次教程运行的是非ROS版本的ORB_SLAM3,所需的环境如下:
Ubuntu18.04、Opencv4.5.2
Pangolin0.6、 Boost库1.77.0版本、Eigen3.3.4

ORB_SLAM3的源码下载

下载网址:https://github.com/UZ-SLAMLab/ORB_SLAM3

推荐安装v0.4-beta(相对问题比较少,master/1.0的版本看最后的踩坑记录,不过都跑成功了,泪目呜呜呜!!!!)
以下的教程使用的是v0.4-beta版本的ORB_SLAM源码进行编译安装

1. gitee导入gitHub仓库

在没有科学上网的情况下,window、ubuntu上直接在gitHub官网下载压缩包很慢很慢,甚至下载的压缩包有问题,可能会出现解压失败的情况,下面是使用gitee进行下载的具体流程:

(1)注册gitee账号
按照流程填写信息注册即可:

官网网址:https://gitee.com/

(2)gitee导入gitHub仓库
登录gitee——点击+号——从GitHub导入:

在这里插入图片描述

点击从URL导入——复制GitHub网址粘贴上去——从gitee仓库下载即可:

在这里插入图片描述

二、安装支持C++特性依赖

终端输入:

sudo apt-get install gcc
sudo apt-get install g++
sudo apt-get install build-essential
sudo apt-get install cmake
sudo apt-get install git

三、安装Pangolin

1. 安装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

2. 下载编译

极力推荐:下载0.6版本的Pangolin,后面会避免一些问题

(1)下载源码

下载地址:https://github.com/stevenlovegrove/Pangolin

(2)编译安装
进入Pangolin目录下,创建build:

mkdir build    
cd build

编译源码:

cmake .. 
make

安装到本机:

sudo make install

(3)检查是否安装成功

cd examples/HelloPangolin
./HelloPangolin 

有如下的正方体图案出现即表示安装成功。

在这里插入图片描述

四、安装Eigen3

1.下载源码

终端输入:git clone https://github.com/eigenteam/eigen-git-mirror  

2. 编译安装

进入eigen-git-mirror目录下,创建build:

mkdir build    
cd build

编译源码:

cmake .. 
make

安装到本机:

sudo make install

安装后,头文件安装在了/usr/local/include/eigen3/

五、安装Opencv4.5.2

1. 查看opencv的版本

终端输入:

pkg-config --modversion opencv

2. 安装opencv4.5.2

具体的安装过程,可以参考一下这篇博客:
VMware虚拟机中ubuntu使用记录(7)—— 如何在Ubuntu18.04中安装opencv4.5.2

六、安装boost库

1.下载源码

进入boost库官网:

https://www.boost.org/

推荐下载1_77_0版本(我安装1.79.0、1.78.0都没成功)

2. 编译安装

1)解压文件
终端输入:

tar -xzvf boost_1_77_0.tar.gz   //boost_1_77_0.tar.gz为自己的压缩包名

2)执行 ./bootstrap.sh
解压之后进入解压出来的文件夹,然后执行这个脚本:

sudo ./bootstrap.sh

3)安装
执行完毕之后,你会发现又多了些文件,

再执行如下脚本:sudo ./b2 install

4)安装openssl
终端输入:

sudo apt-get install openssl 
sudo apt-get install libssl-dev

七、ORB_SLAM3的编译和安装

完成上述环境的搭建之后,下面就可以进行ORB_SLAM3的安装运行的工作。

1. 运行前的修改

1)修改CMakeList.txt文件
建议在CMakeList.txt文件的-wall 后面加上-w 用于屏蔽Warning便于发现错误的真正位置。
在这里插入图片描述
2)修改build.sh文件
建议将build.sh文件中的make -j/make -j4改成make -j2/make 避免运行./build.sh时出现系统卡死的情况(当然电脑的配置足够,可以不改)

2. ORB_SLAM3的编译安装

1)进入源码文件夹下(ORB_SLAM3目录下)

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

在虚拟机中,执行./build.sh时可能会报错:
“c++: internal compiler error: 已杀死 (program cc1plus)”

原因:
虚拟机运行内存不足

解决:
关掉虚拟机,重新编辑虚拟机,调大虚拟的内存,步骤如下所示:
在虚拟机的首页——点击编辑虚拟机——内存——调大内存即可(根据你自己的电脑内存大小来确定上限)

在这里插入图片描述
2)再次编译源码

./build.sh

出现报错:

错误error: ‘XXX’ is not a member of ‘std’

报错信息如下:

/usr/local/include/sigslot/signal.hpp:109:79:error:‘decay_t’ is not a
member of 'std’ bool is_weak_ ptr_compatible_v= detail ::
is_weak_ptr_compatible<std::decay_t

> :: value;
/usr/local/include/sigslot/signal.hpp:109:79: note: suggested
alternative: ‘decay’ bool is_weak_ptr_compatible_v= detail ::
is_weak_ptr_compatible<std: :decay_t

> :: value;

报错页面信息如下图所示:

在这里插入图片描述

原因:
可能是编译过程中调用了某一些库,库里面使用的是c++14的标准语法,但ORB_SLAM3中只有c++11的语法许可,没有14的,这就造成了冲突。

解决:
打开ORB_SLAM3/CMakeLists.txt文件,添加c++的使用许可:

add_compile_options(-std=c++14)

添加的位置如下图所示:

在这里插入图片描述

3)再次编译源码

./build.sh

不出意外,应该就可以完全编译成功了!!!!

如果出现报错:
“/usr/bin/ld:找不到 -lboost_serialization”
具体的解决可以参考这篇博客:
使用./build.sh编译ORB_SLAM源码时出现报错:/usr/bin/ld:找不到 -lboost_serialization的解决办法

八、运行ORB_SLAM3的官方数据集

1. 数据集的下载

本次教程使用选用Euroc数据集,网址如下:

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

非ros环境要下载ASL格式的,如下图所示:

在这里插入图片描述

2. 查看运行指令

在源码的文件夹里面找到euroc_examples.sh文件,里面存放运行ORBSLAM的指令,如果源码里没有euroc_examples.sh,下面是github里的ORB详细注释版,包含测试ORB的.sh文件,连接如下:

https://github.com/electech6/ORB_SLAM3_detailed_comments

文件所在的位置:

在这里插入图片描述
将上述的文件复制到ORB_SLAM3文件夹下即可。

3. 数据集测试运行

具体的步骤如下:
(1) 创建数据集目录
以Machine Hall 01数据集为例,下载页面如下图:

在这里插入图片描述

这个压缩包下好了之后,解压出来里面是一个mav0的文件夹。然后在自己ORB-SLAM3文件夹下,创建一个文件夹叫dataset,在dataset文件夹下再创建一个MH01文件夹。存放目录如下图所示:

在这里插入图片描述

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

(3) 打开euroc_examples.sh文件
打开这个脚本,你可以看到有一个与MH01有关的指令指令如下:
如:

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

文件的内容如下图所示:
在这里插入图片描述

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

(4) 运行指令
在ROB_SLAM3文件夹下,打开终端,执行如下指令:
其中的文件的路径,改成自己的文件路径

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

最后,ORB-SLAM3就运行起来了,运行的界面如下:

在这里插入图片描述

(5) 如果你运行ORB_SLAM3时,只有终端的窗口,没有调出其他可视化窗口

你安装的版本可能是ORB_SLAM3-v0.1版本,这个版本是默认不打开窗口的。
解决:
在ORB_SLAM3-v0.1/Examples/Monocular目录下修改mono_euroc.cc文件,将false改成true,如下所示:

在这里插入图片描述

总结

以上就是运行ORB_SLAM的全部详细教程,主要是介绍了关于在ubuntu18.04中运行ORB_SLAM3的所有依赖的库的安装过程,和所遇到的一些报错的解决方法,最后也详细介绍如何下载和使用官方的数据集运行ORB_SLAM进行建图,真的是全程的踩坑记录!!!下期分享如何在ubuntu18.04系统中安装运行ROS版本的ORB_SLAM3。有什么问题,可以评论区里面交流讨论。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/627356.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

C#委托以及在事件驱动编程中的使用

C#中的委托&#xff08;Delegate&#xff09;是一种类型&#xff0c;它可以存储对方法的引用&#xff0c;并且可以像其他类型一样传递给方法。委托提供了一种灵活的方式来实现事件处理、回调函数和多播委托等功能。以下是关于C#委托的详细介绍&#xff1a; 定义&#xff1a; …

IDEA运行main方法,为什么要编译整个工程?

每次在IDEA中导入工程后&#xff0c;想写一个类去测试一些数据&#xff0c;有时候只是写一个main方法进行简单的输出&#xff1b; 但是每次运行一个main方法&#xff0c;整个工程都会重新编译一下&#xff0c;耗时不短 在Eclipse就不会有这个问题&#xff1b; 为什么会编译整…

AXI GPIO IP核配置详解

AXI GPIO&#xff08;AXI General-Purpose Input/Output&#xff09;设计提供了一个通用的输入/输出接口&#xff0c;该接口连接到一个AXI4-Lite接口。AXI GPIO可以被配置为单通道或双通道设备&#xff0c;每个通道的位宽可以独立配置。 端口&#xff08;即GPIO引脚&#xff0…

linux系统介绍和安装教程(含安装链接放在最下面了)

一、linux系统简介 在Linux和C语言的发展历程中&#xff0c;有几位关键人物为它们的诞生和推广做出了重要贡献。 首先&#xff0c;肯汤姆森&#xff08;Ken Thompson&#xff09;是一位在AT&T公司工作的员工&#xff0c;他不仅发明了B语言&#xff0c;还创造了Unix系统。…

【已解决】力扣打不开

表现&#xff1a; 1.访问国内其他网站都没有问题 2.访问github也能成功 3.wifi没有问题 4.连接同网络的其他主机能打开 唯独力扣打不开&#xff0c;可能是DNS解析错误 》自己网络配置问题 解决办法【亲测可行】 找可用的hosts 打开站长之家&#xff0c;进行DNS查询&#xff…

高中数学:平面向量-加减运算

一、向量的加法运算 三角形法则&#xff08;推荐&#xff09; 两个或多个向量收尾相连的加法运算&#xff0c;用三角形法则 简便算法 首尾相连的多个向量&#xff0c;去掉中间点&#xff0c;就是最终的和。 也可以用三角形法则证明 向量加法交换律 向量加法结合律 平行四…

HTML静态网页成品作业(HTML+CSS)——自动化专业介绍设计制作(4个页面)

&#x1f389;不定期分享源码&#xff0c;关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 &#x1f3f7;️本套采用HTMLCSS&#xff0c;未使用Javacsript代码&#xff0c;共有4个页面。 二、作品演示 三、代…

未授权访问:ZooKeeper 未授权访问漏洞

目录 1、漏洞原理 2、环境搭建 3、未授权访问 防御手段 今天继续学习各种未授权访问的知识和相关的实操实验&#xff0c;一共有好多篇&#xff0c;内容主要是参考先知社区的一位大佬的关于未授权访问的好文章&#xff0c;还有其他大佬总结好的文章&#xff1a; 这里附上大…

在k8s中部署单机版Elasticsearch,并进行数据持久化

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《洞察之眼&#xff1a;ELK监控与可视化》&#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、引言 1、Elasticsearch简介 2、k8s简介 二、存储准备 …

IP代理如何帮助SEO进行优化?

IP代理在SEO优化中扮演着重要的角色&#xff0c;它通过多种方式帮助提升网站的搜索排名和可见性。以下是IP代理如何帮助SEO进行优化的详细阐述&#xff1a; 第一点&#xff0c;数据采集与分析&#xff1a;在SEO过程中&#xff0c;大量的数据是必不可少的。通过使用IP代理&…

随笔:贝特弹琴

半年前&#xff0c;我买了一架朗朗代言的智能电子琴。所谓智能是指&#xff0c;它配套的手机软件知道你在按哪个键&#xff0c;它还能让任意按键发光。用专业术语说&#xff0c;它的键盘具有输入和输出功能&#xff0c;和软件组合起来是一个完整的计算机系统。 随着软件练习曲…

Kubernetes学习-深入Pod篇(二) 探针技术详解与应用

&#x1f3f7;️个人主页&#xff1a;牵着猫散步的鼠鼠 &#x1f3f7;️系列专栏&#xff1a;Kubernetes渐进式学习-专栏 &#x1f3f7;️个人学习笔记&#xff0c;若有缺误&#xff0c;欢迎评论区指正 目录 1. 前言 2. 探针是什么 3. 探针的分类 3.1. StartupProbe(启动…

Ubuntu安装k8s集群

文章目录 Ubuntu安装k8s3台主机前置操作&#xff1a;3台主机k8s前置安装命令&#xff1a;k8s安装命令&#xff1a; 节点加入 Ubuntu安装k8s 官方文档&#xff1a;https://kubernetes.io/zh-cn/docs/setup/production-environment/tools/kubeadm/install-kubeadm/ 默认3台机子 注…

Java | Leetcode Java题解之第90题子集II

题目&#xff1a; 题解&#xff1a; class Solution {List<Integer> t new ArrayList<Integer>();List<List<Integer>> ans new ArrayList<List<Integer>>();public List<List<Integer>> subsetsWithDup(int[] nums) {Arra…

Postgresql中JIT函数能否inline的依据function_inlinable

相关 《Postgresql源码&#xff08;128&#xff09;深入分析JIT中的函数内联llvm_inline》 《LLVM的ThinLTO编译优化技术在Postgresql中的应用》 前置阅读&#xff1a;《Postgresql源码&#xff08;128&#xff09;深入分析JIT中的函数内联llvm_inline》 在JIT inline函数的过…

【C#】学习获取程序执行路径,Gemini 帮助分析

一、前言&#xff1a; 在Delphi中&#xff0c;如果想要获取当前执行程序的目录&#xff0c;程序代码如下&#xff1a; ExtractFilePath(ParamStr(0)); 今天在分析一个别人做的C#程序时看到了一段C#代码&#xff0c;意思是获取执行程序所在的文件目录&#xff1a; public stat…

Spring Boot集成dubbo快速入门Demo

1.什么是dubbo&#xff1f; Apache Dubbo 是一款微服务开发框架&#xff0c;它提供了 RPC通信 与 微服务治理 两大关键能力。这意味着&#xff0c;使用 Dubbo 开发的微服务&#xff0c;将具备相互之间的远程发现与通信能力&#xff0c; 同时利用 Dubbo 提供的丰富服务治理能力…

(教程)gpt-4o如何使用,怎么体验?gpt-4o和gpt-4-turbo的区别

今天OpenAI发布了gpt-4o&#xff0c;我体验之后&#xff0c;gpt-4o简直逆天了。中文能力也挺别强。速度比现在的gpt4还要快。 早在 5 月 11 日&#xff0c;Sam 就在推文中表示&#xff1a;OpenAI 并没有推出 GPT-5&#xff0c;或搜索引擎&#xff0c;但团队一直在努力研发一些…

halo博客--解决恶意刷评论的问题

原文网址&#xff1a;halo博客--解决恶意刷评论的问题_IT利刃出鞘的博客-CSDN博客 简介 本文介绍halo博客如何通过设置评论次数来解决恶意刷评论的问题。 评论功能要设置频率的限制&#xff0c;否则可能被人一直刷评论&#xff0c;然后数据库存的垃圾评论越来越多&#xff0…

51 单片机[2-2]:LED闪烁

摘要&#xff1a; 本文使用STC89C52RC单片机实现单个LED闪烁 新建一个项目&#xff0c;具体步骤见[2-1] 分析&#xff1a; 要使 LED 闪烁&#xff08;以D1为例&#xff09;&#xff0c;就要先让 P2 0xfe; 再让 P2 0xff; 先在keil5中把程序写成这样&#xff1a; #include &…