Ubuntu18.04版本下配置ORB-SLAM3和数据集测试方法

news2024/11/28 0:31:06

文章目录

  • 环境说明
  • 必要配置
  • 一、Pangolin
    • 源码和库文件下载
    • 依赖安装和编译安装
  • 二、Eigen3
    • 源码和库文件下载
    • 编译安装
  • 三、Opencv
    • 源码和库文件下载
    • 编译安装
  • 四、DBoW2 和 g2o
  • 五、boost
    • 源码和库文件下载
    • 编译安装
  • 六、libssl-dev
  • 七、ORB-SLAM3
    • 源码和库文件下载
    • 编译安装
  • 数据集测试
  • 参考链接


环境说明

使用:VMware Workstation Pro
虚拟机系统版本是:Ubuntu 18.04.06
虚拟机内存:8g(若为4g大小,很容易出现后文中ORB-SLAM3编译时会出现的内存问题)
虚拟机存储:50g

若是配置完发现存储空间不足,可以参考这篇博客进行清理:

下载配置技巧:Ubuntu18.04安装vmware-tools解决无法复制粘贴和自由移动文件的问题
按照文章描述的内容完成安装后,可以在主机可以翻墙的情况下先下载好文件,而后挪入到虚拟机当中,有一定程度的便利


必要配置

打开终端,分别输入

sudo apt-get install git # 为了可以使用git指令

(这样才能在终端界面上使用如,git clone这样的指令)

sudo apt-get remove vim-common # 卸载旧版本vi编辑器
sudo apt-get install vim # 安装新版本的vi编辑器
sudo apt-get install build-essential # 安装g++和gcc

(为了避免如链接所描述的问题)


一、Pangolin

源码和库文件下载

1、链接地址下载:Pangolin
2、git 指令下载:

git clone https://github.com/stevenlovegrove/Pangolin.git

依赖安装和编译安装

安装依赖:

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

编译安装:

cd Pangolin # 进入Pangolin文件夹
mkdir build # 创建Build文件夹
cd build    # 进入build文件夹
cmake ..    # 依照上级目录的CMakeLists.txt文件编译
cmake --build .

二、Eigen3

源码和库文件下载

1、链接地址下载:Eigen3
2、git 指令下载:

git clone https://github.com/eigenteam/eigen-git-mirror # github 有个mirror,版本3.3.4 from 2017

编译安装

cd eigen-git-mirror 
mkdir build 
cd build 
cmake .. 
sudo make install
#安装后,头文件安装在/usr/local/include/eigen3/

三、Opencv

源码和库文件下载

Opencv:下载Opencv3.4.3版本

https://opencv.org/releases/page/5/

ippicv库:电脑配置了vpn并且可以进入外网,可以忽略这部分下载

https://github.com/opencv/opencv_3rdparty/blob/dfe3162c237af211e98b8960018b564bc209261d/ippicv/ippicv_2017u3_lnx_intel64_general_20170822.tgz

编译安装

准备工作
1、修复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

2、修复终端报错提示ippicv_2017u3_lnx_intel64_general_20170822.tgz的加速库下载失败
电脑配置了vpn并且在开始编译的时候可以进入外网的同学,可以忽略这步
错误示例:
在这里插入图片描述
把OpenCV源文件中 /3rdparty/ippicv 文件夹下的 ippicv.cmake 中,

第47行的

"https://raw.githubusercontent.com/opencv/opencv_3rdparty/${IPPICV_COMMIT}/ippicv/" 

改成你新下载的ippicv文件路径
更改示例:
在这里插入图片描述

更新依赖库:

sudo apt-get update

安装依赖:

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

编译安装:(跳过准备工作中的加速库配置的同学记得打开vpn进入外网)

cd opencv-3.4.3
mkdir build
cd build
cmake -D CMAKE_BUILD_TYPE=Release -D CMAKE_INSTALL_PREFIX=/usr/local ..
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 

4)保存,执行如下指令使得配置生效

source /etc/bash.bashrc 

5)更新

sudo updatedb  

如果该指令报错,那么可能是没有安装mlocate

先执行安装命令

apt-get install mlocate

然后再

sudo updatedb

6)版本检测

pkg-config --modversion opencv

注意:如果执行后,显示找不到包。那么注意下载的OpenCV版本是不是3.版本的,OpenCV版本4以上的,默认不生成.pc文件,会出现找不到包的问题

输出如下,表示OpenCV完成了安装
在这里插入图片描述

四、DBoW2 和 g2o

DBoW2主要用于回环检测,g2o(General Graph Optimization)主要用于图优化。

ORB-SLAM3的源码包自带DBoW2 和 g2o,编译时会自动安装。不用管。

五、boost

源码和库文件下载

链接地址:下载1.77.0版本的boost_1_77_0.tar.gz

https://www.boost.org/users/history/

编译安装

对下载的文件进行解压后,进入文件夹boost_1_77_0,在此打开终端
分别执行:

sudo ./bootstrap.sh
sudo ./b2 install

需要一定时间,需要耐心等待

六、libssl-dev

直接打开终端,执行:

sudo apt-get install libssl-dev

七、ORB-SLAM3

源码和库文件下载

1、链接地址下载:ORB-SLAM3
2、git clone指令:

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

编译安装

准备工作:
修改CMakeLists.txt:打开ORB-SLAM3目录下的CMakeLists.txt,找到第33行

find_package(OpenCV 4.4)

将OpenCV版本号改为:

find_package(OpenCV 3.4)

修改build.sh:在将虚拟机内存改为8G的前提下,将ORB_SLAM3目录下的build.sh中的文件内容修改为:

echo "Configuring and building Thirdparty/DBoW2 ..."

cd Thirdparty/DBoW2
mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make -j4
cd ../../g2o

echo "Configuring and building Thirdparty/g2o ..."

mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make -j4
cd ../../Sophus

echo "Configuring and building Thirdparty/Sophus ..."

mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make -j4
前三块都在ORB-SLAM3目录下的Thirdparty文件夹中,
若是中断了,可以在对应文件夹里跳过cd执行剩余内容

cd ../../../
#此处在ORB-SLAM3的目录下
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
#此块内容最容易出错,且耗时长,我大概编译了四十分钟

必要说明:
将make改为make -j4会加快编译速度,但也会加大内存的占用,遇到问题:

Makefile:83: recipe for target 'all' failed
make: *** [all] Error 2

所以最后一块内容的编译是,make
使用make进行编译,内存占比在4g左右浮动,尽量需要虚拟机内存大于4g,这就是上文虚拟机内存选择8g的原因

开始编译:

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

编译成功示例如下:
在这里插入图片描述
最后一块编译内容里容易出现的错误:

在这里插入图片描述
解决方法是打开对应的文件,如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());
    }
}

修改完后重新运行build.sh进行编译即可

其他可参考的错误解决方案:
安装orbslam3时报错:error: no match for ‘operator/’
ORB-SLAM2编译错误_嵙杰的博客-CSDN博客

数据集测试

解压下载的数据集后(若该文件夹不名为V102,请改为V102),

V102文件夹里有一个mav0的文件夹,还有可能出现的_MACOSX 文件夹(该文件夹是缓存垃圾,可以直接删除)

在ORB-SLAM3文件夹下创建文件夹dataset,将文件夹V102移入dataset

形成的目录结构如下

/ORB-SLAM3/dataset/V102/mav0

在ORB-SLAM3文件夹下打开终端,执行指令

./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配置及安装教程(2023.3)
ORB-SLAM3配置安装及运行—Ubuntu20.04(2021年)

文章的很多内容有所缩减,只是为了配置安装,若是希望对细节有所了解,可以查看一下参考链接

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

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

相关文章

Python 字典排序超级简单

再Python中不可避免地要对字典进行排序&#xff0c;有时候字典里放着还是数组&#xff0c;对数组的某个位置元素进行排序&#xff0c;这样有点不容易 转换下思路&#xff0c;可以将字典放在Pandas中的DataFrame中&#xff0c;这样就可以迅速排序了。 import pandas as pd# 原…

8月琐碎但值得的事情

8月份结束了&#xff0c;最近心态比较好&#xff0c;慢点就慢点&#xff0c;没有那么着急了&#xff0c;可能是因为着急也没啥办法&#xff0c; 8月是比较开心的一个月&#xff0c;可能是做的事情更有盼头了&#xff0c;可能是看了喜欢的书&#xff0c;可能是我变瘦了&#xff…

LMD-恶意软件检测工具

LMD是Linux恶意软件扫描器&#xff0c;以GNU GLPv2许可发布。 官方地址&#xff1a;https://www.rfxn.com 下载软件包命令&#xff1a; wget https://www.rfxn.com/downloads/maldetect-current.tar.gz tar命令解包后进入其目录。 安装命令如下&#xff1a; ./install.sh …

10分钟搞懂缓存设计策略

在设计缓存系统时需要考虑不同缓存策略的优缺点和适用场景&#xff0c;通过了解和应用这些策略&#xff0c;可以优化缓存系统的性能和效率。原文: 6-Caching Strategies to Remember while designing Cache System 前言 缓存的目标是减少从原始数据源获取数据的次数&#xff0c…

【计算机组成 课程笔记】4.1 乘法器的硬件实现

课程链接&#xff1a; 计算机组成_北京大学_中国大学MOOC(慕课) 4 - 1 - 401-乘法的运算过程&#xff08;11-33--&#xff09;_哔哩哔哩_bilibili 乘法是比加减法更复杂的算数运算。小学的时候我们学习乘法&#xff0c;需要背一个九九乘法表。那么如果是计算机&#xff0c;又是…

信息化发展18

存储技术 1 、存储分类 2 、常用存储模式的技术与应用对比&#xff1a; ( 1 &#xff09; 存储虚拟化&#xff08; Storage Virtualization &#xff09; 是“ 云存储” 的核心技术之一。 它带给人们直接的好处是提高了存储利用率&#xff0c; 降低了存储成本&#xff0c; 简…

Python基础教程:内置函数之字典函数的使用方法

前言 大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 如果有什么疑惑/资料需要的可以点击文章末尾名片 len(字典名)&#xff1a; 返回键的个数&#xff0c;即字典的长度 # len(字典名)&#xff1a; # 返回键的个数&#xff0c;即字典的长度dic {a:123,b:456,c:789,d:567} pri…

HashMap、LinkedHashMap、ConcurrentHashMap、ArrayList、LinkedList的底层实现。

HashMap、LinkedHashMap、ConcurrentHashMap、ArrayList、LinkedList的底层实现。 HashMap相关问题 1、你用过HashMap吗&#xff1f;什么是HashMap&#xff1f;你为什么用到它&#xff1f;用过&#xff0c;HashMap是基于哈希表的Map接口的非同步实现&#xff0c; 它允许null键…

被车撞了!

买了新车之后&#xff0c;因为是新手司机上路&#xff0c;开了不到4个月&#xff0c;车身已经被划伤好多处了&#xff0c;有的是我自己不小心划的&#xff0c;有的是车在停车场&#xff0c;不知道被谁划伤的&#xff0c;找不到肇事者了。不过好在都是小小的划伤&#xff0c;不影…

微信小程序|基于小程序实现发送语音消息及转文字

此文主要在小程序内聊天的基础上实现语音发送及文字转换。 小程序账号创建及工具准备页面大体设计实现录音功能实现对话界面语音转换文字账号创建及应用申请实现语音转文字小程序 账号创建及工具准备 访问微信公众平台,点击账号注册。选择小程序,并在表单填写所需的各项信息…

两个线程并发(乱序)执行:乱箭穿心 std::thread

C自学精简教程 目录(必读) C并发编程入门 目录 在 创建2个线程并执行 创建10个线程并执行 中&#xff0c;我们已经看到了多个线程执行的顺序是没有任何保证的。 他们之间就是各自独立的同时在执行。 下面我们来看看两个线程同时往控制台打印信息&#xff0c;控制台会乱成什…

Blender插件:GLTF 2.0 导入/导出工具

推荐&#xff1a;使用 NSDT场景编辑器快速搭建3D应用场景 用法 glTF™&#xff08;GL传输格式&#xff09;用于3D模型的传输和加载 在 Web 和本机应用程序中。glTF 减小了 3D 模型的大小和 解包和呈现这些模型所需的运行时处理。 这种格式在网络上常用&#xff0c;并且在各种3…

COSCon'23 开源市集:共赴一场草坪上的开源派对

一年一度的开源盛会&#xff0c;第八届中国开源年会&#xff08;COSCon23 &#xff09;&#xff0c;将于10月28~29日&#xff0c;在四川成都市高新区菁蓉汇召开&#xff01;本次大会的主题是&#xff1a;“开源&#xff1a;川流不息、山海相映”&#xff01; 我们预期会有超过1…

腾讯云免费SSL证书申请流程_每年免费50个HTTPS证书

2023腾讯云免费SSL证书申请流程&#xff0c;一个腾讯云账号可以申请50张免费SSL证书&#xff0c;免费SSL证书为DV证书&#xff0c;仅支持单一域名&#xff0c;申请腾讯云免费SSL证书3分钟即可申请成功&#xff0c;免费SSL证书品牌为TrustAsia亚洲诚信&#xff0c;腾讯云百科分享…

构建知识库——一文解决跨平台科研文献及笔记同步问题

文章目录 需求及目标现有方案调研文献管理方案云存储方案Markdown编辑器Windows端Ipad端 图床管理方案 最终方案操作流程最后 作为一个十级懒人&#xff0c;要么躺着要么在探寻提效工具的路上。 开始打工生涯之后&#xff0c;除了正常工作时间&#xff0c;总想利用业余时间提升…

详解Vue中的render: h => h(App)

声明:只是记录&#xff0c;会有错误&#xff0c;谨慎阅读 我们用脚手架初始化工程的时候&#xff0c;main.js的代码如下 import Vue from vue import App from ./App.vueVue.config.productionTip falsenew Vue({// 把app组件放入容器中render: h > h(App), }).$mount(#ap…

PaddleNLP使用Vicuna

LLaMA 模型 LLaMa 是一个大型语言模型&#xff0c;由 Meta 开源。它的全称是 Large Language Model Meta AI&#xff0c;参数量从 70 亿到 650 亿不等。例如&#xff0c;130 亿参数的 LLaMA 模型在大多数基准上可以胜过参数量达 1750 亿的 GPT-3&#xff0c;而且可以在单块 V1…

Vue框架--Vue中的事件

1.事件处理 事件的基本使用: (1).使用v-on:xxx 或 @xxx 绑定事件,其中xxx是事件名; (2).事件的回调需要配置在methods对象中,最终会在vm上; (3).methods中配置的函数,不要用箭头函数!否则this就不是vm了; (4).methods中配置的函数,都是被Vue所管理的函数,this的…

python 之import与from import 导入库的解析与差异

文章目录 1. **使用import导入整个模块**&#xff1a;2. **使用from import导入特定内容**&#xff1a;注意事项别名的使用 在Python中&#xff0c;import和from import是用于导入模块中内容的两种不同方式。下面详细介绍它们的用法和差异&#xff1a; 1. 使用import导入整个模…

python in excel 如何尝鲜 有手就行

众所周知&#xff0c;微软在8月下旬放出消息python已入驻excel&#xff0c;可到底怎么实现呢。 今天我就将发布python in excel的保姆级教程&#xff0c;开始吧&#xff01; 获取office 365 账号 首先我们要有微软office365 这时候需要再万能的某宝去找一个账号&#xff0c;…