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

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

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Webgoat-Hijack a session通关答题教程

Webgoat-Hijack a session Hijack session是会话劫持&#xff0c;先了解需要用到的知识&#xff1a; Cookie原理&#xff1a; 1.客户端向服务端发起请求 2.服务端返回cookie&#xff0c;自己也保存了一份 3.客户端收到后&#xff0c;将cookie也保存起来 4.客户端再次发起请求时…

Linux服务器中创建SVN项目详细步骤

一、Linux服务器中的SVN安装和搭建项目环境可以参考一下文章: 1、《阿里云服务器搭建》------搭建SVN服务 2、在一个服务器的svn上&#xff0c;设置一个端口号对应一个项目 3、如何解决Linuxsvn无法显示日志的问题 二、Linux服务器中的SVN项目如何添加项目的忽略文件&#xff1…

Vue实现Antv/X6中的示例,以及一些er图开发场景

通过Vue实现Antv X6中的示例&#xff0c;以及一些开发场景&#xff0c;代码已经丢到仓库里了。 lwstudy/antv-x6-vue-demo: Vue实现Antv X6中的示例&#xff0c;以及一些开发场景 (github.com)learn-antv-x6: antv/X6学习 (gitee.com) 介绍 使用脚手架&#xff08;自动生成接…

QT实现任意阶贝塞尔曲线绘制

bezier曲线在编程中的难点在于求取曲线的系数&#xff0c;如果系数确定了那么就可以用微小的直线段画出曲线。bezier曲线的系数也就是bernstein系数&#xff0c;此系数的性质可以自行百度&#xff0c;我们在这里是利用bernstein系数的递推性质求取&#xff1a; 简单举例 两个…

基于JavaWeb和mysql实现校园订餐前后台管理系统(源码+数据库)

一、项目简介 本项目是一套基于JavaWeb和mysql实现网上书城前后端管理系统&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Java学习者。 包含&#xff1a;项目源码、项目文档、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都…

Ubuntu22.04安装Mongodb7.0

Ubuntu安装Mongodb 1.平台支持2.安装MongoDB社区版2.1导入包管理系统使用的公钥2.2为MongoDB创建列表文件2.3重新加载本地包数据库2.4安装MongoDB包1.安装最新版MongoDB2.安装指定版MongoDB 3.运行MongoDB社区版1.目录2.配置文件3.初始化系统4.启动MongoDB5.验证MongoDB是否成功…

无涯教程-Android - Absolute Layout函数

Absolute Layout 可让您指定其子级的确切位置(x/y坐标)&#xff0c;绝对布局的灵活性较差且难以维护。 Absolute Layout - 属性 以下是AbsoluteLayout特有的重要属性- Sr.NoAttribute & 描述1 android:id 这是唯一标识布局的ID。 2 android:layout_x 这指定视图的x坐标…

坦克400 Hi4-T预售价28.5万元起,越野新能源好理解

8月25日&#xff0c;在以“智享蓉城&#xff0c;驭见未来”为主题的成都国际车展上&#xff0c;坦克品牌越野新能源再启新程&#xff0c;首次以全Hi4-T新能源阵容亮相展台&#xff0c;释放坦克品牌加速布局越野新能源的强烈信号。 Hi4-T架构首款落地车型坦克500 Hi4-T上市至今斩…

buildroot修改内核防止清理重新加载办法

当你使用 Buildroot 构建 Linux 内核时&#xff0c;如果对内核文件进行了手动修改&#xff0c;重新执行 Buildroot 的构建过程将会覆盖你所做的修改。这是因为 Buildroot会根据配置重新下载、提取和编译内核。 为了避免在重新构建时覆盖你的修改&#xff0c;可以采取以下两种方…

【Day-27满就是快】代码随想录-二叉树-二叉树的最大深度

给定一个二叉树&#xff0c;找出其最大深度。 二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。 说明: 叶子节点是指没有子节点的节点。 ———————————————————————————————————— 1. 递归法 可以使用前序和后序遍历。前序就是…

爬虫逆向实战(二十六)--某某学堂登录

一、数据接口分析 主页地址&#xff1a;某某学堂 1、抓包 通过抓包可以发现数据接口是Account/LoginPost 2、判断是否有加密参数 请求参数是否加密&#xff1f; 通过查看“载荷”模块可以发现pass是加密参数 请求头是否加密&#xff1f; 无响应是否加密&#xff1f; 无co…

BlockUI专栏目录

文章作者&#xff1a;里海 来源网站&#xff1a;王牌飞行员_里海_里海NX二次开发3000例,里海BlockUI专栏,C\C-CSDN博客 简介&#xff1a; BlockUI是一个设计NX对话框的工具&#xff0c;是官方推荐使用的对话框制作方法&#xff0c;能够与NX自身风格相统一&#xff0c;并且在实际…