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

ORB-SLAM3复现过程中遇到的问题及解决办法

在复现过程中遇到的问题的解决过程

  • 1. 版本检查
    • 1.1 Opencv版本的检测
    • 1.2 Eigen版本的检测
    • 1.3 查看Python版本
    • 1.4 其他
  • 2. 编译过程中遇到的问题及解决办法
    • 2.1 ./build.sh遇到的问题
    • 2.2 ./build_ros.sh遇到的问题

因为环境比较干净,所以遇到的问题相对少一些,不过每一个问题都进行了完善的解决
我的环境是刚装完Ubuntu20.04之后,并进行了Ubuntu系统安装之后首需要做的事情的操作之后的一个环境。

1. 版本检查

因为ORB-SLAM3对环境的要求和ORB-SLAM2有一些不一样,有的版本过低是会导致错误的。
所以,在开始之前,先来检测一下自己环境中的库的版本。
注意:使用的是Ubuntu20.04

1.1 Opencv版本的检测

执行以下命令,可以发现版本为4.2.0

pkg-config --modversion opencv
# 4.2.0
//或者
opencv_version
# 4.2.0

1.2 Eigen版本的检测

执行以下命令:

whereis eigen3
# 我的是在/usr/include/eigen3
gedit /usr/include/eigen3/Eigen/scr/Core/util/Macros.h

文件开头的几行如下所示,意味着我的Eigen版本为3.3.7

#ifndef EIGEN_MACROS_H
#define EIGEN_MACROS_H#define EIGEN_WORLD_VERSION 3
#define EIGEN_MAJOR_VERSION 3
#define EIGEN_MINOR_VERSION 7

1.3 查看Python版本

  1. 执行以下命令:
xiaoduan@fighter:~$ python3 --version
Python 3.8.10
  1. 也可以在终端输入python接着连着按两下tab键,也能看到自己的python版本。

1.4 其他

  1. 在c++方面,我的是C++11。
  2. DBoW2 and g2o在项目文件中直接存在,无需手动安装,在编译的过程中会自动安装。
  3. Pangolin还没有安装。

2. 编译过程中遇到的问题及解决办法

2.1 ./build.sh遇到的问题

1. 问题一:

出现下图所示错误:

在这里插入图片描述
原因分析:

版本不匹配,所以更改版本即可。

解决办法:

打开文件/home/xiaoduan/project/source2/orb_slam3/CMakeLists.txt
更改以下两个内容:

  • 第33行Opencv的版本改为4
  • 第41行Eigen的版本改为3

2. 问题二:

错误展示:

‘slots_reference’ was not declared in this scope 1180 | cow_copy_type<list_type, Lockable>

原因分析:
因为我的是C++11,这里C++ 11 不支持本项目的一些编译,把 C++版本换到 C++14 就可以了

解决办法:在终端输以下命令

sed -i 's/++11/++14/g' CMakeLists.txt

3. 问题三:

错误展示:

./Monocular/mono_euroc: error while loading shared libraries: libpango_windowing.so: cannot open shared object file: No such file or directory

原因分析:

原因一:运行的文件夹位置不对,注意看自己运行命令时的位置,保证能够找到运行的文件。
原因二:配置文件没生效

解决办法:

针对第一种情况,只需要cd到对应的文件夹中即可。针对第二种情况,执行以下命令即可:

sudo ldconfig

2.2 ./build_ros.sh遇到的问题

1. 问题一:

错误展示:

Error: the rosdep view is empty: call ‘sudo rosdep init‘ and ‘rosdep update‘

原因分析:

因为ROS是一键安装的,所以rosdep没有进行初始化,所以只需要执行终端报错中的提示语句即可

解决办法:

执行以下命令:

sudo rosdep fix-permissions
sudo rosdep init
rosdep update

注意: 在这个过程中可能会由于网络问题,总是不成功,所以多进行几遍就好了。如果实在不行运行一个sudo apt install python2在重新执行。

2. 问题二:

错误展示:

‘slots_reference’ was not declared in this scope 1180 | cow_copy_type<list_type, Lockable>

原因分析:

版本不匹配,所以更改版本即可。

解决办法:

打开文件/home/xiaoduan/project/source2/orb_slam3/Examples_old/ROS/ORB_SLAM3/CMakeLists.txt
更改以下两个内容:

  • 第33行Opencv的版本改为4
  • 第41行Eigen的版本改为3

3. 问题三:

错误展示:

fatal error: sophus/se3.hpp: No such file or directory
29 | #include <sophus/se3.hpp>

原因分析:

找不到sophus文件的位置,添加即可。

解决办法:

打开文件
/home/xiaoduan/project/source2/orb_slam3/Examples_old/ROS/ORB_SLAM3/CMakeLists.txt
第49行加入
${PROJECT_SOURCE_DIR}/../../../Thirdparty/Sophus

4. 问题四:

错误展示:

/usr/local/include/sigslot/signal.hpp:1180:65: error: ‘slots_reference’ was not declared in this scope cow_copy_type<list_type, Lockable> ref = slots_reference();

原因分析:
因为我的是C++11,这里C++ 11 不支持本项目的一些编译,把 C++版本换到 C++14 就可以了

解决办法:
在终端输以下命令

sed -i 's/++11/++14/g' CMakeLists.txt

5. 问题五:

错误展示:

4. 问题四:

错误展示:

/usr/local/include/sigslot/signal.hpp:1180:65: error: ‘slots_reference’ was not declared in this scope cow_copy_type<list_type, Lockable> ref = slots_reference();

原因分析:
Sophus::SE3f, cv::MAT,Eigen::Vector3f类型转换报错,应该是不能直接转换,不过可以换个办法

解决办法:在终端输以下命令

sed -i 's/++11/++14/g' CMakeLists.txt

原因分析:
因为我的是C++11,这里C++ 11 不支持本项目的一些编译,把 C++版本换到 C++14 就可以了

解决办法:
解决办法参考文章ORB-SLAM3复现的详细过程——配置安装及ROS和脚本运行—Ubuntu20.04中的2.4。按照2.4的步骤进行修改源码即可。

至此,就是我遇到的所有的问题。

相关文章:

ORB-SLAM3复现过程中遇到的问题及解决办法

在复现过程中遇到的问题的解决过程 1. 版本检查1.1 Opencv版本的检测1.2 Eigen版本的检测1.3 查看Python版本1.4 其他 2. 编译过程中遇到的问题及解决办法2.1 ./build.sh遇到的问题2.2 ./build_ros.sh遇到的问题 因为环境比较干净&#xff0c;所以遇到的问题相对少一些&#xf…...

vue开发桌面exe应用

vue开发桌面exe应用 Electron-vue 参考 Electron-vue搭建vue全家桶Element UI客户端&#xff08;一&#xff09; 如何使用Vue.js构建桌面应用程序...

C# 实现PictureBox从随机选择的文件夹内对图像进行随机播放

using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System...

腾讯云国际代充-GPU服务器安装驱动教程NVIDIA Tesla

腾讯云国际站GPU 云服务器是基于 GPU 的快速、稳定、弹性的计算服务&#xff0c;主要应用于深度学习训练/推理、图形图像处理以及科学计算等场景。 GPU 云服务器提供和标准腾讯云国际 CVM 云服务器一致的方便快捷的管理方式。 GPU 云服务器通过其强大的快速处理海量数据的计算性…...

【python爬虫】9.带着小饼干登录(cookies)

文章目录 前言项目&#xff1a;发表博客评论post请求 cookies及其用法session及其用法存储cookies读取cookies复习 前言 第1-8关我们学习的是爬虫最为基础的知识&#xff0c;从第9关开始&#xff0c;我们正式打开爬虫的进阶之门&#xff0c;学习爬虫更多的精进知识。 在前面几…...

原神剑冢三层封印怎么解开 原神剑冢三层封印在哪里打

在原神游戏中原神探索剑冢封印并解开三层封印&#xff0c;玩家可以去蒙德城接取一个隐藏任务&#xff0c;这项任务需要玩家去解开剑冢三层封印&#xff0c;才能完成任务。然而&#xff0c;许多玩家可能还不知道如何解开这个封印&#xff0c;今天小编为大家整理了一份详细的攻略…...

Papers with Semi-supervised Learning for Medical Image Segmentation(SSL4MIS)

Papers_with_SSL4MIS CVPR2023 DateCategory标题TitleCodeBlog2023-06半监督医学图像分割用于半监督医学图像分割的伪标签引导对比学习Pseudo-Label Guided Contrastive Learning for Semi-Supervised Medical Image SegmentationLinkLink2023-06半监督图像分割SemiCVT&#…...

c#继承(new base)的使用

概述 C#中的继承是面向对象编程的重要概念之一&#xff0c;它允许一个类&#xff08;称为子类或派生类&#xff09;从另一个类&#xff08;称为父类或基类&#xff09;继承属性和行为。 继承的主要目的是实现代码重用和层次化的组织。子类可以继承父类的字段、属性、方法和事…...

【办公自动化】使用Python批量处理Excel文件并转为csv文件

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…...

手机怎么剪视频?分享一些剪辑工具和注意事项

视频剪辑是一种将多个视频片段进行剪切、合并和编辑的技术&#xff0c;它可以帮助我们制作出精彩的视频作品。如今&#xff0c;随着智能手机的普及&#xff0c;我们可以随时随地使用手机进行视频剪辑。本文将为大家介绍一些手机剪辑工具和注意事项&#xff0c;帮助大家更好地进…...

面试题汇总

文章目录 一. 腾讯二. 华为三. 快手1. Long 的长度和范围&#xff0c;为什么要减 1 (Java基础)2. 线程池配置无界队列了之后&#xff0c;拒绝策略怎么搞&#xff0c;什么时候用到无界队列 (JUC并发) 四. 美团五. 阿里六. 百度七. 字节八. 大疆1. 为什么创建进程开销比线程大? …...

LLVM系列:1.设计思想和LLVM IR简介

文章目录 背景介绍内容简介LLVM库的集合以及模块化设计LLVM优化器的模块化设计LLVM代码生成器的模块化设计LLVM IRLLVM编译流程LLVM IR的设计思想LLVM的形式LLVM IR的结构组成指令格式和变量示例参考文献:背景介绍 LLVM项目于2000年创立于伊利诺斯州大学,原本是一个为了静态…...

mysql中间件Atlas

Mysql 的 proxy 中间件有比较多的工具&#xff0c;例如&#xff0c;mysql-proxy(官方提供), atlas , cobar, mycat, tddl, tinnydbrouter等等。 ​ 而Atlas是由 Qihoo 360公司Web平台部基础架构团队开发维护的一个基于MySQL协议的数据中间层项目。它在MySQL官方推出的MySQL-Pro…...

ChatGPT 实现动态地图可视化展示

地图可视化分析有许多优点和好处: 1.直观理解:地图可视化使得复杂的数据更易于理解。通过地图可视化,人们可以直观地看到地理位置、地区之间的关系以及空间分布的模式。 2.提高决策效率:地图可视化可以帮助决策者快速理解和解释数据,从而提高决策效率。 3.高效的数据整…...

Vue.js安装步骤和注意事项

安装完node.js后开始安装和部署Vue在检查webpack的下载版本时出现错误出现错误的原因是之前下载时未指定对应的版本号导致版本不兼容先卸载掉之前下载的版本 cnpm uninstall webpack-cli -g cnpm install webpack-cli4.9.2 -g 最后检查版本是否对应...

IDEA中Run/Debug Configurations添加VM options和Program arguments

1. 现象描述 我在我的IDEA当中打开配置模板后&#xff0c;发现没有VM options和Program arguments&#xff0c;也就是虚拟机选项和程序实参这两项&#xff0c;导致我不能配置系统属性参数和命令行参数&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff0…...

信息技术03--初/高中--简答题(73道知识简答)

文章目录 第一章 初中简答 1-231.1、请简要回答TCP/IP中传输层的功能以及两种主要协议1.2、请简要回答”数字化学习与创新“主要体现在哪些方面&#xff1f;1.3、人工智能给人类社会带来了巨大的变化也带来了一些问题&#xff0c;请列举出三个涉及个人隐私问题的场景并进行简要…...

Matlab之统计一维数组直方图 bin 计数函数histcounts

一、语法 [N,edges] histcounts(X) [N,edges] histcounts(X,nbins) [N,edges] histcounts(X,edges) 解释&#xff1a; 1.1 [N,edges] histcounts(X) 将 X 的值划分为多个 bin&#xff0c;并返回每个 bin 中的计数以及 bin 边界。histcounts 函数使用自动分 bin 算法&am…...

TDengine函数大全-时间和日期函数

以下内容来自 TDengine 官方文档 及 GitHub 内容 。 以下所有示例基于 TDengine 3.1.0.3 TDengine函数大全 1.数学函数 2.字符串函数 3.转换函数 4.时间和日期函数 5.聚合函数 6.选择函数 7.时序数据库特有函数 8.系统函数 时间和日期函数 TDengine函数大全NOWTIMEDIFFTIMETRU…...

算法笔记——路径问题

在引入介绍如何写一个算法的时候&#xff0c;我们先引入一个题作为例子 1137. 第 N 个泰波那契数 - 力扣&#xff08;LeetCode&#xff09; 作为刚开始学习算法的我们&#xff0c;看到这个题目的时候&#xff0c;应该想好以下的问题&#xff1a; 1.状态表示 我们要用什么来表…...

通过Wrangler CLI在worker中创建数据库和表

官方使用文档&#xff1a;Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后&#xff0c;会在本地和远程创建数据库&#xff1a; npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库&#xff1a; 现在&#xff0c;您的Cloudfla…...

QMC5883L的驱动

简介 本篇文章的代码已经上传到了github上面&#xff0c;开源代码 作为一个电子罗盘模块&#xff0c;我们可以通过I2C从中获取偏航角yaw&#xff0c;相对于六轴陀螺仪的yaw&#xff0c;qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...

Nuxt.js 中的路由配置详解

Nuxt.js 通过其内置的路由系统简化了应用的路由配置&#xff0c;使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...

uniapp微信小程序视频实时流+pc端预览方案

方案类型技术实现是否免费优点缺点适用场景延迟范围开发复杂度​WebSocket图片帧​定时拍照Base64传输✅ 完全免费无需服务器 纯前端实现高延迟高流量 帧率极低个人demo测试 超低频监控500ms-2s⭐⭐​RTMP推流​TRTC/即构SDK推流❌ 付费方案 &#xff08;部分有免费额度&#x…...

A2A JS SDK 完整教程:快速入门指南

目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库&#xff…...

STM32HAL库USART源代码解析及应用

STM32HAL库USART源代码解析 前言STM32CubeIDE配置串口USART和UART的选择使用模式参数设置GPIO配置DMA配置中断配置硬件流控制使能生成代码解析和使用方法串口初始化__UART_HandleTypeDef结构体浅析HAL库代码实际使用方法使用轮询方式发送使用轮询方式接收使用中断方式发送使用中…...

从 GreenPlum 到镜舟数据库:杭银消费金融湖仓一体转型实践

作者&#xff1a;吴岐诗&#xff0c;杭银消费金融大数据应用开发工程师 本文整理自杭银消费金融大数据应用开发工程师在StarRocks Summit Asia 2024的分享 引言&#xff1a;融合数据湖与数仓的创新之路 在数字金融时代&#xff0c;数据已成为金融机构的核心竞争力。杭银消费金…...

LabVIEW双光子成像系统技术

双光子成像技术的核心特性 双光子成像通过双低能量光子协同激发机制&#xff0c;展现出显著的技术优势&#xff1a; 深层组织穿透能力&#xff1a;适用于活体组织深度成像 高分辨率观测性能&#xff1a;满足微观结构的精细研究需求 低光毒性特点&#xff1a;减少对样本的损伤…...

Python实现简单音频数据压缩与解压算法

Python实现简单音频数据压缩与解压算法 引言 在音频数据处理中&#xff0c;压缩算法是降低存储成本和传输效率的关键技术。Python作为一门灵活且功能强大的编程语言&#xff0c;提供了丰富的库和工具来实现音频数据的压缩与解压。本文将通过一个简单的音频数据压缩与解压算法…...

java高级——高阶函数、如何定义一个函数式接口类似stream流的filter

java高级——高阶函数、stream流 前情提要文章介绍一、函数伊始1.1 合格的函数1.2 有形的函数2. 函数对象2.1 函数对象——行为参数化2.2 函数对象——延迟执行 二、 函数编程语法1. 函数对象表现形式1.1 Lambda表达式1.2 方法引用&#xff08;Math::max&#xff09; 2 函数接口…...