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

news2024/11/16 4:52:59

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
make
 
cd ../../g2o
 
echo "Configuring and building Thirdparty/g2o ..."
 
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make
 
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 -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.coloradmin.cn/o/1131162.html

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

相关文章

正点原子嵌入式linux驱动开发——Linux LCD驱动

LCD是很常用的一个外设,通过LCD可以显示绚丽的图片、界面等,提交人机交互的效率。STM32MP1提供了一个LTDC接口用于连接RGB接口的液晶屏。本章就来学校一下如何在Linux下驱动LCD屏。 LCD和LTDC简介 LCD简介 这里在当时学习stm32裸机开发的时候就学过了…

三代自动驾驶系统及主流科技公司自动驾驶技术方案简介

截止目前,按技术特点,自动驾驶技术大致经历了三代发展:第一代自动驾驶技术以后融合感知技术,高精度地图,基于惯导、GPS定位系统,预测模块,基于优化、搜索的规控等组成。第一代比较成熟的自动驾驶…

Pytorch实现深度学习常见问题

RuntimeError: stack expects each tensor to be equal size, but got [3, 300, 300] at entry 0 and [3, 301, 301] at entry 24 这里的问题出现的原因肯定是在数据预处理处,如下图,当数据使用不同的transforms处理方式时,会导致数据的尺寸大…

DC/DC升压模块电源 高电压稳压输出 12v24v28v48v转600V800V1000V1100V1300V1500V2000V3000V4000V

特点 ● 效率高达 80% ● 2*2 英寸标准封装 ● 单电压输出 ● 价格低 ● 稳压输出 ● 工作温度: -40℃~85℃ ● 阻燃封装,满足UL94-V0 要求 ● 温度特性好 ● 可直接焊在PCB 上 应用 HRA(B) 0.1~30W 系列模块电源是一种DC-DC升压变换器。该模块电源的输入电压分为…

SpringBoot Web请求响应

目录 前言请求PostmanPostman使用 简单参数原始方式接收普通参数SpringBoot方式接收普通参数参数名不一致问题 实体参数简单实体参数复杂实体对象 数组集合参数数组参数集合参数 日期参数JSON参数路径参数 响应ResponseBody统一响应结果请求响应案例案例需求与准备工作案例实现…

足底筋膜炎能自愈吗

什么是足底筋膜炎 足底筋膜炎是足底的肌腱或者筋膜发生无菌性炎症所致。最常见症状是脚跟的疼痛与不适,压痛点常在足底近足跟处,有时压痛较剧烈,且持续存在。晨起时疼痛感觉明显,行走过度时疼痛感加剧,严重患者甚至站…

【Java网络编程】 三

本文主要介绍了TCP版本的回显服务器的编写。 一.TCP版本回显服务器 1.服务器 服务器的实现流程 1.接收请求并解析 2.根据请求计算出响应(业务流程) 3.把响应返回给客户端 代码: import java.io.IOException; import java.io.InputStream; i…

算法训练 第四周

一、二分查找 本题给我们提供了一个有n个元素的升序整形数组nums和一个目标值target,要求我们找到target在nums数组中的位置,并返回下标,如果不存在目标值则返回-1。nums中的所有元素不重复,n将在[1,10000]之间&#x…

高效视频剪辑:批量调整视频尺寸的技巧与步骤

对于许多新手和初学者来说,视频剪辑可能是一项令人望而生畏的任务。但是,有了正确的工具,比如固乔剪辑助手,即使你是个新手,也能轻松、高效地完成视频剪辑工作。下面就是关于如何使用固乔剪辑助手来批量调整视频尺寸的…

Python第三方库 - Flash(python web框架)

1 Flask 1.1 认识Flask Web Application Framework( Web 应用程序框架)或简单的 Web Framework( Web 框架)表示一个库和模块的集合,使 Web 应用程序开发人员能够编写应用程序,而不必担心协议,线…

部署springboot打包不打包配置文件,配置文件为外部配置文件使用 (真实场景)

场景 springboot项目打包的时候,想要将配置文件不要打包到jar包中,作为外部使用,不同环境,配置文件的配置值肯定不一样,真实场景。 比如 开发环境数据库配置为 127.0.0.1:3306 , 测试环境 122.0.2.2&am…

火山引擎 LAS Spark 升级:揭秘 Bucket 优化技术

更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群 文章介绍了 Bucket 优化技术及其在实际业务中的应用,包括 Spark Bucket 的基本原理,重点阐述了火山引擎湖仓一体分析服务 LAS(下…

记录--vue3 + mark.js | 实现文字标注功能

这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 页面效果 具体实现 新增 1、监听鼠标抬起事件,通过window.getSelection()方法获取鼠标用户选择的文本范围或光标的当前位置。2、通过 选中的文字长度是否大于0或window.getSelection().isC…

drf-过滤、排序、异常处理、自封装Response

过滤 过滤就是根据路由url?后的信息过滤出符合?后条件的数据而非全部,比如…/?nameweer就是只查name是weer的数据,其余不返回。 1、安装:pip3 install django-filter2、注册:在settings.py中的app中注册django-filt…

MYSQL(事务+锁+MVCC+SQL执行流程)理解(2)

一)MYSQL中的锁(知识补充) 可以通过In_use字段来进行判断是否针对于表进行加了锁 1)对于undo log日志来说:新增类型的,在事务提交之后就可以清除掉了,修改类型的,事务提交之后不能立即清除掉这些日志会用于mvcc只有当没有事务用到该版本信息时…

列表推导式、集合推导式、字典推导式、生成器

列表推导式 可以与三目运算符搭配使用 dict1 {name: "by", "age": 20} dict2 {name: "ss", "age": 25} dict3 {name: "sa", "age": 24} dict4 {name: "xs", "age": 27} list1 [dict1, …

Python 算法高级篇:分治算法的原理与应用

Python 算法高级篇:分治算法的原理与应用 1. 什么是分治算法?2. 分治算法的应用2.1 归并排序2.2 快速排序2.3 最大子数组问题2.4 汉诺塔问题 3. 代码示例3.1 分治算法求幂 4. 总结 分治算法是一种重要的算法设计技巧,它将一个大问题分解为多个…

(R900567512)4WE6D6X/OFEG24N9K4液压电磁换向阀

(R900567512)4WE6D6X/OFEG24N9K4液压电磁换向阀特点: ▶▶ 具有三位四通,二位四通或二位三通的方向设计 ▶▶ 高功率线圈 ▶▶ 油口安装面符合 DIN 24340 形式 A ▶▶ 油口安装面符合 ISO 4401-03-02-0-05和 NFPA T3.5.1 R2-2002 D03 ▶▶ 带…

虹科 | 解决方案 | 汽车示波器 索赔管理方案

索赔管理 Pico汽车示波器应用于主机厂/供应商与服务店/4S店的协作,实现产品索赔工作的高效管理;同时收集的故障波形数据,便于日后的产品优化和改进 故障记录 在索赔申请过程中,Pico汽车示波器的数据记录功能可以用于捕捉故障时的…

搭建zlmediakit和wvp_pro

zlmediakit使用zlmediakit/zlmediakit:master镜像 wvp_pro使用648540858/wvp_pro,可参照https://github.com/648540858/wvp-GB28181-pro wvp_pro官方https://doc.wvp-pro.cn/#/ 刚开始我找了个docker镜像运行,后来播放页面一直加载,最后就用了…