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的步骤进行修改源码即可。

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

多线程的五种“打开”方式

1 概念 1.1 线程是什么&#xff1f;&#xff1f; 线程&#xff08;Thread&#xff09;是计算机科学中的一个基本概念&#xff0c;它是进程&#xff08;Process&#xff09;中的一个执行单元&#xff0c;负责执行程序的指令序列。线程是操作系统能够进行调度和执行的最小单位。…

MariaDB数据库服务器

目录 一、什么是数据库&#xff1f; 二、什么是关系型数据库&#xff1f; 三、数据库字符集和排序规则是什么&#xff1f; 四、常用数据类型 五、Mariadb数据库相关配置案例 一、什么是数据库&#xff1f; 数据库&#xff08;DB&#xff09;是以一定方式长期存储在计算机硬盘内…

PHP8内置函数中的数学函数-PHP8知识详解

php8中提供了大量的内置函数&#xff0c;以便程序员直接使用常见的内置函数包括数学函数、变量函数、字符串函数、时间和日期函数等。今天介绍内置函数中的数学函数。 本文讲到了数学函数中的随机数函数rand()、舍去法取整函数floor()、向上取整函数 ceil()、对浮点数进行四舍…

1.频偏估计算法

目录 整数倍频偏估计方法 小数倍频偏估计方法 使用CP进行频偏估计 使用SSB进行频偏估计 OFDM对频偏比较敏感&#xff0c;频偏会影响子载波的正交性&#xff0c;造成载波间干扰。频偏对PRACH相关计算峰值的影响本质上是子载波间干扰导致的。时域检测&#xff1a;首先对接收…

聚合多个电商API接口平台

API接口测试&#xff08;点击免费测试&#xff09; 随着数字化商业时代的到来&#xff0c;API接口已成为电商资源连接利器&#xff0c;也是全球传统互联网企业转型的基础。 2021年 Google Cloud 研究显示&#xff0c;全球互联网企业近3/4的企业持续投入数字化转型&#xff0c…

最佳实践:TiDB 业务读变慢分析处理

作者&#xff1a;李文杰 网易游戏计费 TiDB 负责人 在使用或运维管理 TiDB 的过程中&#xff0c;大家几乎都遇到过 SQL 变慢的问题&#xff0c;尤其是查询相关的读变慢问题。读变慢的问题大部分情况下都遵循一定的规律&#xff0c;通过经验的积累可以快速的定位和优化&#xff…

【倒着考虑】CF Edu 21 D

Problem - D - Codeforces 题意&#xff1a; 思路&#xff1a; 这道题需要倒着步骤考虑&#xff0c;就是先去假设已经分为了两部分&#xff0c;这左右两部分的和相等&#xff0c;然后去想上一个步骤 倒着一个步骤后&#xff0c;可以发现这样的性质&#xff1a; Code&#xf…

C++:初识类与this指针

文章目录 前言一、类类的定义和实例化类的访问限定符类的作用域计算类的大小 二、类的成员函数的this指针总结 个人主页 &#xff1a; 个人主页 个人专栏 &#xff1a; 《数据结构》 《C语言》《C》 前言 一、类 类的定义和实例化 注意类定义结束时后面分号( ; )不能省略。 类…

【算法刷题-栈与队列篇】

目录 1.leetcode-232. 用栈实现队列2.leetcode-225. 用队列实现栈3.leetcode-20. 有效的括号&#xff08;1&#xff09;代码1&#xff08;2&#xff09;代码2 4.leetcode-1047. 删除字符串中的所有相邻重复项5.leetcode-150. 逆波兰表达式求值6.leetcode-239. 滑动窗口最大值7.…

关于一个git的更新使用流程

1.第一步使用git bash 使用git bash命令来进行操作&#xff08;当然我是个人比较喜欢用这种方法的&#xff09; 2. 第二步&#xff1a;连接 3.第三步&#xff1a;进入 4.第四步&#xff1a;查看分支 5.第五步&#xff1a;切换分支 将本地文件更新后之后进行提交 6.第六步&am…

猫头虎博主赠书一期:《Kubernetes原生微服务开发》

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

【力扣 第 360 场周赛】题解(一题待补)

目录 2833. 距离原点最远的点2834. 找出美丽数组的最小和2835. 使子序列的和等于目标的最少操作次数TODO 2836. 在传球游戏中最大化函数值 这场比赛排名第 1 - 1000 名的参赛者 可获「NIO 蔚来」简历内推机会&#xff0c;比有的场次前十才给容易多了。 2833. 距离原点最远的点…

计算机/嵌入式入门教材资料

背景 自学计算机&#xff0c;首先我们要找到好的教材、教程&#xff0c;可以事半功倍。 目前&#xff0c;互联网上计算机资源较多&#xff0c;难的不再是寻找资源&#xff0c;而是筛选出质量比较高的资源。 基于笔者经验&#xff0c;推荐以下资源。 书籍 传统的书籍是纸质版…

C语言:三子棋小游戏

简介&#xff1a; 目标很简单&#xff1a;实现一个 三子棋小游戏。三子棋大家都玩过&#xff0c;规则就不提及了。本博文中实现的三子棋在对局中&#xff0c;电脑落子是随机的&#xff0c;不具有智能性&#xff0c;玩家的落子位置使用键盘输入坐标。下面开始详细介绍如何实现一…

基于RabbitMQ的模拟消息队列之二---创建项目及核心类

一、创建项目 创建一个SpringBoot项目&#xff0c;环境&#xff1a;JDK8&#xff0c;添加依赖&#xff1a;Spring Web、MyBatis FrameWork(最主要&#xff09; 二、创建核心类 1.项目分层 2.核心类 在mqserver包中添加一个包&#xff0c;名字为core&#xff0c;表示核心类…

前端Vue自定义得分构成水平柱形图组件 可用于系统专业门类得分评估分析

引入Vue自定义得分构成水平柱形图组件&#xff1a;cc-horBarChart 随着技术的发展&#xff0c;传统的开发方式使得系统的复杂度越来越高&#xff0c;一个小小的改动或小功能的增加可能会导致整体逻辑的修改&#xff0c;造成牵一发而动全身的情况。为了解决这个问题&#xff0c…

设计模式系列-创建者模式

一、上篇回顾 上篇我们主要讲述了抽象工厂模式和工厂模式。并且分析了该模式的应用场景和一些优缺点&#xff0c;并且给出了一些实现的思路和方案,我们现在来回顾一下&#xff1a; 抽象工厂模式&#xff1a;一个工厂负责所有类型对象的创建&#xff0c;支持无缝的新增新的类型对…

centos安装jdk-8u371-linux-x64.tar.gz包

java -version //查看jdk版本 rpm -qa | grep jdk 删除带有"openjdk"字样的jdk 例: rpm -e --nodeps java-1.7.0-openjdk-1.7.0.141-2.6.10.5.el7.x86_64 下载该版本的jdk(jdk-8u371-linux-x64.tar.gz) (https://www.oracle.com/java/technologies/javase/javase8u2…

linux 内存一致性

linux 出现内存一致性的场景 1、编译器优化 &#xff0c;代码上下没有关联的时候&#xff0c;因为编译优化&#xff0c;会有执行执行顺序不一致的问题&#xff08;多核单核都会出现&#xff09; 2、多核cpu乱序执行&#xff0c;cpu的乱序执行导致内存不一致&#xff08;多核出…

MATLAB制图代码【第二版】

MATLAB制图代码【第二版】 文档描述 Code describtion: This code is version 2 used for processing the data from the simulation and experiment. Time : 2023.9.3 Author: PEZHANG 这是在第一版基础上&#xff0c;迭代出的第二版MATLAB制图代码&#xff0c;第二版的特点是…