orb-slam3编译手册(Ubuntu20.04)

orb-slam3编译手册(Ubuntu20.04)

  • 一、环境要求
    • 1.安装git
    • 2.安装g++
    • 3.安装CMake
    • 4.安装vi编辑器
  • 二、源代码下载
  • 三、依赖库下载
    • 1.Eigen安装
    • 2.Pangolin安装
    • 3.opencv安装
    • 4.安装Python & libssl-dev
    • 5.安装boost库
  • 三、安装orb-slam3
  • 四、数据集下载及测试

写在前面:本文是在Ubuntu20.04系统上从零编译运行orb-slam3的全纪录,我相信即便是0基础的同学跟着本篇博客走下来以后也可以完美的让orb-slam3跑起来。本文包含从环境配置、安装依赖项、源代码获取到数据集下载、代码测试整个全链路打通的编译过程,是一个易于理解和跟随的指南,以确保用户能够成功构建和编译代码工程。

一、环境要求

作者是在Ubuntu20.04系统上编译成功的,其他版本不确定是否没问题。

1.安装git

查看git版本

git --version

若不显示版本号则证明系统没有安装git,使用如下命令安装

sudo apt install git

再次查看git版本号:
在这里插入图片描述

2.安装g++

查看g++版本

g++ --version

若报错则安装g++

sudo apt install g++

再次查看g++版本号

在这里插入图片描述

3.安装CMake

sudo apt install build-essential libssl-dev
wget https://github.com/Kitware/CMake/releases/download/v3.18.4/cmake-3.18.4.tar.gz
tar -zxvf cmake-3.18.4.tar.gz
cd cmake-3.18.4
./bootstrap
make
sudo make install

安装好后查看版本号,如如图所示则安装成功
在这里插入图片描述

4.安装vi编辑器

sudo apt-get remove vim-common
sudo apt-get install vim

至此orb-slam3的环境要求就满足,接下来进行源代码的下载。

二、源代码下载

将orb-slam3的源码保存在自己新建的文件夹中。

mkdir orb_slam3
cd orb_slam3
git clone https://github.com/UZ-SLAMLab/ORB_SLAM3.git

如果你的电脑访问github有问题,可以尝试git换源,搜索一下就有一大堆解决方案。

三、依赖库下载

1.Eigen安装

#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/

2.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 python-pip
//sudo python -mpip install numpy pyopengl Pillow pybind11
sudo apt install pkg-config
sudo apt install libegl1-mesa-dev libwayland-dev libxkbcommon-dev wayland-protocols
//sudo apt install ffmpeg libavcodec-dev libavutil-dev libavformat-dev libswscale-dev libavdevice-dev
//sudo apt install libdc1394-22-dev libraw1394-dev
//sudo apt install libjpeg-dev libpng-dev libtiff5-dev libopenexr-dev

安装Pangolin

# 默认git版本为0.6
git clone https://github.com/stevenlovegrove/Pangolin/tree/v0.6.git    
cd Pangolin
mkdir build && cd build
cmake ..
make -j4
sudo make install

如果git进不去这个网址可以自己手动下载压缩包解压,然后进行编译安装,是一样的。
安装成功后进行测试。

cd examples/HelloPangolin
./HelloPangolin

若出现一个可以随意拖动的正方体,证明安装成功。
在这里插入图片描述

3.opencv安装

此处略过,网络上很多教程,因为我电脑本身就有opencv4.2所以直接跳过了这一步。
需要注意的是虽然opencv3/4都是可以的,但是在后面的整个项目的make过程中需要针对自己的opencv版本改一处地方,否则会报错,后面会提到。

4.安装Python & libssl-dev

sudo apt install libpython2.7-dev
sudo apt-get install libssl-dev

5.安装boost库

进入boost官网:https://www.boost.org/
我下载的是1.75版本
在这里插入图片描述
下载完毕解压后在文件夹中运行:

sudo ./bootstrap.sh
sudo ./b2 install

三、安装orb-slam3

在编译安装之前,修改一处地方,代码位置如下:
如果你这里的最后一个bool类型是false,请改成true,该bool类型是控制单目摄像头跑euroc数据集结果可视化的参数,如果为false会导致运行的时候无法可视化。
在这里插入图片描述

可以直接一步到位,但是容易出问题且不好找问题。

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

如果上述方法报错了建议按照下面的一步一步来,其实就是一个个子文件夹挨个编译安装,虽然麻烦但是容易定位问题。

cd Thirdparty/DBoW2
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
makecd ../../g2oecho "Configuring and building Thirdparty/g2o ..."mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
makecd ../../../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 -j4

注意,前面提到的opencv版本问题,如果make过程中报错

FATAL_ERROR OpenCV > 3.2 not found

在哪个文件夹的make过程中报错就去哪个文件夹中的CMakeLists文件里找下面的代码块:
在这里插入图片描述
这里的find_package需要改成自己的opencv版本,否则会报错。
编译完成后就可以下载数据集进行测试。

四、数据集下载及测试

  1. 去官网(https://projects.asl.ethz.ch/datasets/doku.php?id=kmavvisualinertialdatasets)下载ASL格式的数据集,例如我这里下载的就是MH01的ASL格式数据集,下载后是一个压缩包,先放着。
  2. 在orb-slam3工程目录下新建dataset文件夹,dataset文件夹下新建一个文件夹MH01,将刚下载的数据集解压后的mav0文件夹拖到MH01文件夹中即可。
  3. 双击打开ORB-SLAM3源码中的脚本“euroc_examples.sh“,找到包含MH01的指令,如单目摄像头的快捷运行命令:
./Examples/Monocular/mono_euroc ./Vocabulary/ORBvoc.txt ./Examples/Monocular/EuRoC.yaml "$pathDatasetEuroc"/MH01 ./Examples/Monocular/EuRoC_TimeStamps/MH01.txt dataset-MH01_mono

"$pathDatasetEuroc"修改为./dataset,修改后的命令如下:

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

在terminal中运行如上命令,结果如下:
在这里插入图片描述
至此orb-slam3的编译运行便是成功了。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python selenium模块简介

视频版教程:一天掌握python爬虫【基础篇】 涵盖 requests、beautifulsoup、selenium 有些网站的数据是js动态渲染的,我们无法通过网页源码直接找到数据,只能通过找接口方式来获取数据,但是很多时候,数据又是json格式的…

k8s集群升级

目录 1. 部署cri-docker (所有集群节点) 2. 升级master节点 3. 升级worker节点 4. 部署containerd 1. 部署cri-docker (所有集群节点) k8s从1.24版本开始移除了dockershim,所以需要安装cri-docker插件才能使用docker …

MySQL6:索引使用原则,联合索引,联合主键/复合主键,覆盖索引、什么是回表?索引条件下推,索引的创建与使用,索引的创建与使用,索引失效

MySQL6:索引使用原则,联合索引,联合主键/复合主键,覆盖索引、什么是回表?索引条件下推,索引的创建与使用,索引的创建与使用,索引失效 索引使用原则列的离散(sdn)度 联合索引创建联合…

Harbor私有镜像仓库搭建

本文基于:https://zhuanlan.zhihu.com/p/143779176 1.环境准备 IP:192.168.10.136/24 操作系统:centos7 2.安装Docker、Docker-compose 2.1安装Docker-CE $ wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.re…

数据库简史:多主数据库架构的由来和华为参天引擎的机遇

注:本文发表后,收到了很多后台反馈,其中关于大型机的早期成就不容省略。微调重发本文,纯属个人观点,错谬之处,仍然期待指正。 2023年10月13日,在北京举办的“2023金融业数据库技术大会"上&…

redis6.0源码分析:跳表skiplist

文章目录 前言什么是跳表跳表(redis实现)的空间复杂度相关定义 跳表(redis实现)相关操作创建跳表插入节点查找节点删除节点 前言 太长不看版 跳跃表是有序集合zset的底层实现之一, 除此之外它在 Redis 中没有其他应用。…

电力巡检/电力抢修行业解决方案:AI+视频技术助力解决巡检监管难题

一、行业背景 随着国民经济的蓬勃发展,工业用电和居民用电需求迅速增加,电厂、变电站、输电线路高负荷运转,一旦某个节点发生故障,对生产、生活造成巨大的影响。目前电力行业生产现场人员、设备较多,而生产监督员有限…

基于vue小红书平台用户数据分析与可视化

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性:…

【马蹄集】—— 搜索专题

搜索专题 目录 MT2238 数的增殖MT2239 二维矩阵中的最长下降序列MT2240 传染病MT2241 循环空间BD202303 第五维度 MT2238 数的增殖 难度&#xff1a;黄金    时间限制&#xff1a;1秒    占用内存&#xff1a;128M 题目描述 给定一个数 n ( n < 1000 ) n (n<1000) n…

Java I/O (输入/输出)

1.流的概念 流是一种有序的数据序列&#xff0c;根据操作类型&#xff0c;可以分为输入流和输出流两种。I/O流&#xff08;输入输出&#xff09;提供了一条通道程序&#xff0c;可以使用这条通道把源中的字节序列送到目的地。 1.1 输入流&#xff1a; 程序从指向源的输入流中读…

目标检测YOLO实战应用案例100讲-高速铁路供电安全检测监测系统图像智能识别(中)

目录 2.2.2卷积神经网络基本传播方式 2.3常用目标检测算法 2.3.1双阶段目标检测算法

51单片机汽车胎压大气气压测量仪仿真设计_数码管显示(代码+仿真+设计报告+讲解)

51单片机汽车胎压大气气压测量仪仿真设计_数码管显示 (代码仿真设计报告讲解) 仿真原版本&#xff1a;proteus 7.8 程序编译器&#xff1a;keil 4/keil 5 编程语言&#xff1a;C语言 设计编号&#xff1a;S0018 目录 51单片机汽车胎压大气气压测量仪仿真设计_数码管显示功…

技术分享| anyRTC低延时直播优化

直播系统就是把活动现场的音频或视频信号经数字压缩后&#xff0c;传送到直播多媒体服务器(CDN)上&#xff0c;在互联网上供广大网友或授权特定人群收听或收看。而随着技术的日益更新&#xff0c;人民对于直播的互动性&#xff0c;实时性要求更高了&#xff0c;传统的直播少则几…

面向对象设计作业(二)

1.机器人设计 设计一种机器人&#xff0c;可以移动&#xff0c;变形。机器人有控制芯片&#xff0c;可以更换&#xff0c;并且根据机器人内部的芯片&#xff0c;更改行为方式&#xff0c;比如移动方式有步行&#xff0c;跑步等&#xff0c;变形可以变成汽车&#xff0c;飞机等…

React-表单受控绑定和获取Dom元素

一、表单受控组件 1.声明一个react状态 说明&#xff1a;useState const [value,setValue]useState("") 2.核心绑定流程 2.1绑定react状态 <div><input value{value}type"text"></input> 2.2绑定onChange事件 说明&#xff1a;e.…

Postgresqlddl在事务中可以回滚,truncate时relfilenode在当前会话会改变

Postgresql的事务里面ddl可以回滚,这点和oracle不太一样。其中postgresql alter table事务操作中&#xff0c;包括回滚的整个过程中表对象的relfilenode不变&#xff0c;但是postgresql truncate事务操作中&#xff0c;一旦执行truncate操作表对象的relfilenode在当前会话就变了…

rust学习-LinkedList

介绍 A doubly-linked list with owned nodes. 自有节点的双向链表 pub struct LinkedList<T, A = Global> whereA: Allocator, {/* private fields */ }使用 Vec 或 VecDeque 几乎总是更好,因为基于数组的容器通常更快、内存效率更高,并且可以更好地利用 CPU 缓存 …

Scrum敏捷开发企业级实战培训// Leangoo领歌 //

课程概述 Scrum是目前运用最为广泛的敏捷开发方法&#xff0c;是一个轻量级的项目管理和产品研发管理框架。 这是一个两天的实训课程&#xff0c;面向研发管理者、项目经理、产品经理、研发团队等&#xff0c;旨在帮助学员全面系统地学习Scrum和敏捷开发, 帮助企业快速启动敏…

《系统之美》读书笔记 - 系统及系统的三大特征

目录 什么是系统&#xff1f; 如何理解系统的三种构成要件&#xff1f; 系统的三大特征是什么&#xff1f; 对我们有什么启发&#xff1f; 什么是系统&#xff1f; 系统不仅仅是一些事务的简单集合&#xff0c;而是一个由一组相互连接的要素构成的、能够实现某个目标的整体…

队列(Queue)概念+通过单、双链表来模拟队列+环形队列+OJ面试题(用队列实现栈、用栈实现队列、设计环形队列)

文章目录 队列(Queue)一、 概念1.尾进头出 二、模拟队列1.单链表实现队列1.1 设置结点1.2 入队offer1.3出队 poll1.4 empty方法&#xff0c;peek方法&#xff0c;getUsedSize方法 2.双链表实现队列2.1 创建结点2.2 入队列2.3 出队列2.4 peek、size、isEmpty方法 三、环形队列1.…