当前位置: 首页 > news >正文

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的编译运行便是成功了。

相关文章:

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

orb-slam3编译手册(Ubuntu20.04) 一、环境要求1.安装git2.安装g3.安装CMake4.安装vi编辑器 二、源代码下载三、依赖库下载1.Eigen安装2.Pangolin安装3.opencv安装4.安装Python & libssl-dev5.安装boost库 三、安装orb-slam3四、数据集下载及测试 写在…...

升级 Xcode 15模拟器 iOS 17.0 Simulator(21A328) 下载失败

升级 IDE Xcode 15 后本地模拟器 Simulator 全被清空,反复重新尝试 Get 下载频频因网络异常断开而导致失败 ... 注:通过 Get 方式下载一定要保证当前网络环境足够平稳,网络环境不好的情况下该方法几乎成不了 解决办法 Get 方式行不通可以尝试通过 官网 途径先下载 模拟器安装包…...

PHP 函数、PHP 简单后门

函数 基本结构 语法结构 function 函数名(形式参数1,形式参数2...){//函数体return 返回值 }定义并执行一个简单函数 // funtion.phpfunction test(){echo "This is function ".__FUNCTION__; }test();函数传参 // function.phpfunction add($x, $y){$sum $x …...

前端实现菜单按钮级权限

核心思想就是通过登录请求此用户对应的权限菜单,然后跳转首页,触发全局前置导航守卫,在全局导航守卫中通过 addRoute 添加动态路由进去。addRoute有一个需要注意的地方,就是我们添加完动态路由后,地址栏上立即访问添加…...

STM32:TTL串口调试

一.TTL串口概要 TTL只需要两个线就可以完成两个设备之间的双向通信,一个发送电平的I/O称之为TX,与另一个设备的接收I/O口RX相互连接。两设备之间还需要连接地线(GND),这样两设备就有相同的0V参考电势。 二.TTL串口调试 实现电脑通过STM32发送…...

【Jenkins 安装】

一:安装文件夹准备 在/home/admin 界面下新建三个文件夹,用来安装tomcat、maven 1.打开,/home/admin目录 cd /home/admin 2.新建三个文件夹 mkdir tomcat mkdir maven 二:安装tomcat 1.打开tomcat目录进行tomcat的安装 访问:h…...

JVM——GC垃圾回收器

GC垃圾回收器 JVM在进行GC时:并不是对这三个区域(新生区,幸存区(from,to),老年区)统一回收,大部分时候,回收都是新生区 GC两种类:轻GC&#xff…...

【三维重建-PatchMatchNet复现笔记】

【三维重建-PatchMatchNet复现笔记】 1 突出贡献2 数据集描述3 训练PatchMatchNet3.1 输入参数3.2 制定数据集加载方式 1 突出贡献 在计算机GPU和运行时间受限的情况下,PatchMatchNet测试DTU数据集能以较低GPU内存和较低运行时间,整体误差位列中等&#…...

CSS - 常用属性和布局方式

目录 前言 一、常用属性 1.1、字体相关 1.2、文本相关 1.3、背景相关 1.3.1、背景颜色 1.3.2、背景图片 1.4、圆角边框 二、常用布局相关 2.1、display 2.2、盒子模型 2.2.1、基本概念 2.2.2、border 边框 2.2.3、padding 内边距 2.2.4、margin 外边距 2.3、弹…...

数据结构与算法之矩阵: Leetcode 134. 螺旋矩阵 (Typescript版)

螺旋矩阵 https://leetcode.cn/problems/spiral-matrix/ 描述 给你一个 m 行 n 列的矩阵 matrix ,请按照 顺时针螺旋顺序 ,返回矩阵中的所有元素。 示例 1 输入:matrix [[1,2,3],[4,5,6],[7,8,9]] 输出:[1,2,3,6,9,8,7,4,5]示…...

LVS+keepalived高可用负载均衡集群

keepalived介绍 keepalived为LVS应运而生的高可用服务。LVS的调度器无法做高可用,于是keepalived这个软件。实现的是调度器的高可用。 但是keepalived不是专门为LVS集群服务的,也可以做其他代理服务器的高可用。 LVS高可用集群的组成 主调度器备调度器&…...

解密Kubernetes:探索开源容器编排工具的内核

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…...

苹果手机怎么设置壁纸?解锁设置壁纸的2种方法!

手机壁纸便是我们常说的屏幕背景图,一张好看的手机壁纸能使我们的心情变得愉悦。这个壁纸可以是风景、美食、喜欢的偶像、自己养的宠物,或者是你的家人、朋友。 拥有特殊含义的照片会更让人想要设置成壁纸。苹果手机怎么设置壁纸?本文将给大…...

解决LOGITECH 罗技驱动 MAC版出现的一些问题汇总!

安装前将之前的安装文件清理干净!!!!! 罗技驱动最新安装包下载 我的鼠标是G304 1. 驱动安装一直卡在99% 运行官方下载的安装程序,卡住后关掉窗口。 在终端中执行以下命令: sudo /Users/用户名…...

PyQt5入门4——给目标检测算法构建一个简单的界面

PyQt5入门4——给目标检测算法构建一个简单的界面 学习前言要构建怎么样的界面实例使用1、窗口构建a、按钮:获取图片b、Inputs、Outputs文本提示c、Inputs、Outputs图片显示d、箭头显示e、整点祝福 2、主程序运行 全部代码 学习前言 搞搞可视化界面哈,虽…...

Pandas数据分析系列9-数据透视与行列转换

Pandas 数据透视表 当数据量较大时,为了更好的分析数据特征,通常会采用数据透视表。数据透视表是一种对数据进行汇总和分析的工具,通过重新排列和聚合原始数据,可以快速获得更全面的数据洞察。数据透视表在Excel中也是经常使用的一个强大功能,在Pandas模块,其提供了pivot…...

部分背包问题细节(贪心)

有一种情况是,背包可以把金币全部拿走: 如果num小于0则返回值...

windows协议详解之-RPC/SMB/LDAP/LSA/SAM域控协议关系

如果你在windows域控环境中,例如企业的网络中开启wireshark抓包,你一定会遇到一大堆各种各样的协议。不同于互联网服务(大多基于HTTP),为了实现域控中各种各样的服务,windows的域控环境中采用了非常多的协议…...

uniapp中 background-image 设置背景图片不展示问题

有问题 <view class"file-picker__box jsz" tap"jszxszUpload(jsz)"></view>.jsz {background-image: url(../../static/example_drive.png); }解决1 <view class"file-picker__box jsz" :style"{ background-image: url(…...

Elasticsearch打分机制

一 例子 xx搜索引擎,就搜索结果本身而言,xx返回了正确的结果。因为返回的结果中,都包含了搜索的关键字。而我们从逻辑上来看,这一堆广告算是咋回事!这个吐槽是从用户的角度出发的。很显然,返回的结果中,尤其是前几条,有时甚至是前几页,都跟我们想要的结果相差深远! …...

突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合

强化学习&#xff08;Reinforcement Learning, RL&#xff09;是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程&#xff0c;然后使用强化学习的Actor-Critic机制&#xff08;中文译作“知行互动”机制&#xff09;&#xff0c;逐步迭代求解…...

电脑插入多块移动硬盘后经常出现卡顿和蓝屏

当电脑在插入多块移动硬盘后频繁出现卡顿和蓝屏问题时&#xff0c;可能涉及硬件资源冲突、驱动兼容性、供电不足或系统设置等多方面原因。以下是逐步排查和解决方案&#xff1a; 1. 检查电源供电问题 问题原因&#xff1a;多块移动硬盘同时运行可能导致USB接口供电不足&#x…...

CMake 从 GitHub 下载第三方库并使用

有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...

数据库分批入库

今天在工作中&#xff0c;遇到一个问题&#xff0c;就是分批查询的时候&#xff0c;由于批次过大导致出现了一些问题&#xff0c;一下是问题描述和解决方案&#xff1a; 示例&#xff1a; // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...

以光量子为例,详解量子获取方式

光量子技术获取量子比特可在室温下进行。该方式有望通过与名为硅光子学&#xff08;silicon photonics&#xff09;的光波导&#xff08;optical waveguide&#xff09;芯片制造技术和光纤等光通信技术相结合来实现量子计算机。量子力学中&#xff0c;光既是波又是粒子。光子本…...

打手机检测算法AI智能分析网关V4守护公共/工业/医疗等多场景安全应用

一、方案背景​ 在现代生产与生活场景中&#xff0c;如工厂高危作业区、医院手术室、公共场景等&#xff0c;人员违规打手机的行为潜藏着巨大风险。传统依靠人工巡查的监管方式&#xff0c;存在效率低、覆盖面不足、判断主观性强等问题&#xff0c;难以满足对人员打手机行为精…...

c++第七天 继承与派生2

这一篇文章主要内容是 派生类构造函数与析构函数 在派生类中重写基类成员 以及多继承 第一部分&#xff1a;派生类构造函数与析构函数 当创建一个派生类对象时&#xff0c;基类成员是如何初始化的&#xff1f; 1.当派生类对象创建的时候&#xff0c;基类成员的初始化顺序 …...

【前端异常】JavaScript错误处理:分析 Uncaught (in promise) error

在前端开发中&#xff0c;JavaScript 异常是不可避免的。随着现代前端应用越来越多地使用异步操作&#xff08;如 Promise、async/await 等&#xff09;&#xff0c;开发者常常会遇到 Uncaught (in promise) error 错误。这个错误是由于未正确处理 Promise 的拒绝&#xff08;r…...

【C++】纯虚函数类外可以写实现吗?

1. 答案 先说答案&#xff0c;可以。 2.代码测试 .h头文件 #include <iostream> #include <string>// 抽象基类 class AbstractBase { public:AbstractBase() default;virtual ~AbstractBase() default; // 默认析构函数public:virtual int PureVirtualFunct…...

数据结构第5章:树和二叉树完全指南(自整理详细图文笔记)

名人说&#xff1a;莫道桑榆晚&#xff0c;为霞尚满天。——刘禹锡&#xff08;刘梦得&#xff0c;诗豪&#xff09; 原创笔记&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 上一篇&#xff1a;《数据结构第4章 数组和广义表》…...