使用VSCODE跑orbslam2踩的坑

news2024/11/13 13:10:33

我用的是ubuntu22.04,opencv是4.7,使用其他的库感觉就算版本不一样,也能跑。

一、运行build.sh能够产生可执行文件遇到的问题

1.由于opencv版本高带来的问题

这些问题怎么定位出现在哪些文件中,你通过命令行,运行下面三句话,然后看报的错的文件

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

问题1:找不到opencv/cv.h

由于我用的是cv4,代码用的cv3,而cv4没有opencv/cv.h,网上查了查用其他的库替代

替代方式:

 如果还有类似的错就根据提示去查找问题的地方,然后进行修改。有两处需要多次修改的是当出现类似

问题2:出现类似error: ‘cvSolve’ was not declared in this scope

此时就在出错的文件里前面加上包含头文件:

 注意这个错误出现过好多次,需要修改的地方比较多

问题3:未定义标识符“CV_BGR2GRAY“

  • 错误原因:在新版本中,CV_BGR2GRAY被COLOR_BGR2GRAY替换。只需将CV改成COLOR就行。

在新版本中,CV基本都被COLOR替换。

问题4:error: ‘CV_LOAD_IMAGE_UNCHANGED’ was not declared in this scope

解决方案:CV_LOAD_IMAGE_UNCHANGED 改为 cv::IMREAD_UNCHANGED

2.c++ error: ‘decay_t’ is not a member of ‘std’

大概是c++版本的问题,在主目录下的CMakeLIists.txt上修改支持C++14标准

 3.ORB_SLAM安装问题error: ‘std::chrono::monotonic_clock’ has not been declared

4.报错“没有规则可制作目标” 以及报opencv>2.4.3找不到的问题

修改CMakeList.txt

注意不只是修改一部分,还有那个thirdparty里面的CMakeList.txt也需要修改!!

我遇到的大体上是这些错误,遇到其他错误不要慌,找找总会有解决方法!

二、在vscode上配置第三方库

 1. 首先是在c_cpp_properties.json增加库

{
    "configurations": [
        {
            "name": "Win32",
            "includePath": [
                "${workspaceFolder}/**",
                "/usr/local/include",
                "/usr/include/eigen3",
                "/usr/local/include/opencv4",
                "/home/gallagher/cpp_all/slam/ORB_SLAM2/include",
                "/usr/local/include/pangolin"
            ],
            "defines": [
                "_DEBUG",
                "UNICODE",
                "_UNICODE"
            ],
            "windowsSdkVersion": "10.0.18362.0",
            "compilerPath": "/usr/bin/g++-11",
            "cStandard": "c11",
            "cppStandard": "c++17",
            "intelliSenseMode": "msvc-x64"
        }
    ],
    "version": 4
}

运行任何一个Example里面的cc文件就会生成tasks.json和launch.json,其中tasks.json的配置如下(主要是-L和-I以及后面的连接库):

{
    "tasks": [
        {
            "type": "cppbuild",
            "label": "C/C++: g++ 生成活动文件",
            "command": "/usr/bin/g++",
            "args": [
                "-fdiagnostics-color=always",
                "-g",
                "${file}",
                "-o",
                "${fileDirname}/${fileBasenameNoExtension}",
                "-L",
                "/usr/local/lib",
                "-L",
                "/usr/lib",
                "-L",
                "/home/gallagher/cpp_all/slam/ORB_SLAM2/lib",
                "-I",
                "/usr/include/eigen3",
                "-I",
                "${workspaceFolder}/",
                "-I",
                "/usr/local/include/",
                "-I",
                "/usr/local/include/opencv4/",
                "-I",
                "/usr/local/include/sophus/",
                "-I",
                "/usr/include/suitesparse",
                "-I",
                "/usr/local/include/pangolin/",
                "-I",
                "/home/gallagher/cpp_all/slam/ORB_SLAM2/include",
                "/usr/local/lib/libpangolin.so",
                "/usr/local/lib/libopencv_*",
                "/usr/local/lib/libgstgl-1.0.so.0",
                "/usr/local/lib/libSophus.so",
                "/home/gallagher/cpp_all/slam/ORB_SLAM2/lib/libORB_SLAM2.so"
            ],
            "options": {
                "cwd": "${fileDirname}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            },
            "detail": "调试器生成的任务。"
        },
        {
            "type": "cppbuild",
            "label": "C/C++: g++-11 生成活动文件",
            "command": "/usr/bin/g++-11",
            "args": [
                "-fdiagnostics-color=always",
                "-g",
                "${file}",
                "-o",
                "${fileDirname}/${fileBasenameNoExtension}"
            ],
            "options": {
                "cwd": "${fileDirname}"
            },
            "problemMatcher": [
                "$gcc"
            ],
            "group": "build",
            "detail": "调试器生成的任务。"
        }
    ],
    "version": "2.0.0"
}

三、点击调试按钮遇到的问题

1.由于pangolin版本带来的问题

这个库版本太高会带来下图中类似的问题,一般安装这个版本会带来这个问题:

GitHub - stevenlovegrove/Pangolin: Pangolin is a lightweight portable rapid development library for managing OpenGL display / interaction and abstracting video input.

 但是如果安装低版本又会带来编译不通过的结果,即会报下面的错误:

于是我在github上找打了一个折中的版本:

GitHub - zzx2GH/Pangolin: It's a correct package.

但是也会遇到【视觉slam14讲】第三章 Ubuntu18.04安装pangolin出现的问题_-dcpp11_no_boosr=1_qin__han的博客-CSDN博客但是遇到的问题上面链接可以解决,最终总算是解决了这个库带来的问题

2.第三方库Eigen问题

这是因为eigen的版本太高所导致的,去Eigen下载3.2.1

安装完成后出现

 但这个文件在目录中存在,这是因为你没有把工程文件下的libORB_SLAM2.so给移动到/usr/local/lib下面,运行下面的cp命令即可

 最终看下能够调试的结果:

以及命令行跑一个测试集的效果 

 

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

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

相关文章

更灵活的CSS3新特性:帮你简化样式管理和优化网站性能

文章目录 I. 前言:介绍CSS3的进化和发展趋势CSS3的历史和版本CSS3的标准化和浏览器支持情况 II. 新的CSS选择器:扩展选择器的功能属性选择器:更多方式选择元素伪类和伪元素:更方便地定义样式 III. 改进的排版和布局:实…

在 EulerOS 系统中设置 Chrony 时间同步服务

以下是在 EulerOS 系统中设置 Chrony 时间同步服务的所有步骤。 1.查看系统版本 [rootservice11 ~]# cat /etc/redhat-release EulerOS release 2.0 (SP5)2.检查是否已安装chrony软件 [rootservice11 ~]# rpm -qa|grep chrony chrony-3.2-2.eulerosv2r7.x86_64如果没有安装…

Openlayers实战教程学习大纲及引导

本系列教程是Openlayers的实战教程,介绍Openlayes的一些基础知识,并重点讲述哪些地方是openlayers项目中常用的,给出具体示例,起到一个很好的引导学习作用。 版本说明 Openlayers的实战教程 分为**图文版** 和 **视频版**&#x…

【经验分享】全志科技官方Ubuntu16.04根文件系统镜像的替换和测试方法

本文主要基于全志A40i开发板——TLA40i-EVM,一款基于全志科技A40i处理器设计的4核ARM Cortex-A7高性能低功耗国产评估板,演示Ubuntu根文件系统镜像的替换和测试方法。 创龙科技TLA40i-EVM评估板接口资源丰富,引出双路网口、双路CAN、双路USB…

7.5_1散列查找(上)

基于一种数据结构: 散列表(Hash Table),又称作哈希表 特点:数据元素的关键字与其存储地址直接相关 其实这个散列表也是基于数组实现的 加入19对13取余 加入再次插入1的话,塞不进去 数据元素不会直接存放到…

深入浅出设计模式 - 适配器模式

博主介绍: ✌博主从事应用安全和大数据领域,有8年研发经验,5年面试官经验,Java技术专家✌ Java知识图谱点击链接:体系化学习Java(Java面试专题) 💕💕 感兴趣的同学可以收…

Presto(Trino)分布式(物理)执行计划的生成和调度

文章目录 1.前言2.物理执行生成(Stage)的生成2.1不同的调度分区策略2.1.1 Connector自己提供的分区策略2.1.2 Presto提供的Partition策略(SystemPartitioningHandle): 2.2 为Stage创建StageScheduler2.2.1 普通的非bucket表的TableScan StageSplit 放置策略解析 2.2…

UE5.1.1 c++从0开始(14.用C++写UMG类)

先在这里放一个链接防止第一次看的朋友们不知道我在讲什么:https://www.bilibili.com/video/BV1nU4y1X7iQ/ 这一段的教程不难,唯一新建的C类是UMG的一个类。这个类用来写绑定在ai身上的血条。 总结一下一共做了什么事情: 给ai写了一个血条…

LeetCode Java两个单链表相交的一系列问题

题目描述 单链表可能有环,也可能无环。给定两个单链表的头节点 head1和head2,这两个链表可能相交,也可能不相交。 请实现一个函数,如果两个链表相交,请返回相交的第一个节点;如果不相交,返回n…

Android 渐变背景色

目录 一、背景 二、渐变 2.1 线性渐变背景色 1.新建资源文件 2.编辑样式文件 3.使用 4.编辑样式参数说明 2.2 圆角按钮渐变背景色 2.3 放射渐变 2.4 扫描线渐变 一、背景 单纯的颜色背景已经不能够满足UI大佬们的发挥,渐变色背景无疑成了一个炫技的方向。现在…

chatgpt赋能python:Python调用同一个类中方法详解

Python调用同一个类中方法详解 在Python编程中,类是一种非常重要的概念,可用于组织和管理代码。在同一个类中,可以定义多个方法。本文将详细介绍如何调用同一个类中的方法。 什么是类方法? 在Python中,类方法是指类…

魔兽世界自己架设任务

在魔兽世界中,玩家可以使用游戏内的任务编辑器自己架设任务来增加游戏的乐趣和挑战性。以下是详细的步骤: 第一步:打开任务编辑器 玩家可以在游戏中按下“ESC”键,进入游戏设置页面。在这个页面中,有一个“编辑器”选…

DSL查询分类与全文检索查询

DSL查询分类 Elasticsearch提供了基于JSON的DSL(Domain Specific Language)来定义查询。常见的查询类型包括: 查询所有:查询出所有数据,一般测试用。例如:match_all全文检索(full text&#x…

Idea新建springboot项目遇到的问题及解决

1.更换阿里云 方法&#xff1a; 找到文件路径&#xff1a;Settings > Build,Execution,Deployment > Build Tools > Maven 如下图&#xff1a; 找到相应的settings文件 如果没有就新建一个同名文件&#xff0c;内容如下&#xff1a; <settings xmlns"h…

Gitlab回退到指定版本的方法与步骤

一、先根据分支获取代码 如下&#xff1a; 下载好后&#xff0c;通过右键菜单进入git bash here 就进入下面界面 去gitlab上面去寻找需要的faf0af86d24f7de73b024785ad864f36da4284e2 git reset --hard cf2a5283b9a79f8cf04b003d05cdd94b2b3ff166 执行命令“git push -f”&…

vue中对语句的语义进行比较

一、安装 string-similarity库 npm install string-similarity二、html <div><input type"text" v-model"string1" placeholder"文本1" /> </div> <div><input type"text" v-model"string2" p…

[计算机入门]了解键盘

2.1 了解键盘 键盘一般可以根据按键的功能进行分区&#xff0c;一般分为&#xff1a;主键盘区、小键盘区、控制键区、功能键区、指示灯区。下面介绍键盘的各个分区按键及功能。 2.1.1 主键盘区 主键盘区又叫打字键盘区或字符键区&#xff0c;具有标准英文打字机键盘的格式。…

【Java】Java 中的栈和堆内存

本文仅供学习参考&#xff01; 相关教程地址&#xff1a; https://www.cnblogs.com/whgw/archive/2011/09/29/2194997.html https://www.developer.com/java/stack-heap-java-memory/ https://zhuanlan.zhihu.com/p/529280783 Java 数据类型在执行过程中存储在两种不同形式的内…

HOT24-回文链表

leetcode原题链接&#xff1a;回文链表 题目描述 给你一个单链表的头节点 head &#xff0c;请你判断该链表是否为回文链表。如果是&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 示例 1&#xff1a; 输入&#xff1a;head [1,2,2,1] 输出&#xff1a…

Leetcode 刷题 动态规划

198. 打家劫舍 1. 确定dp数组&#xff08;dp table&#xff09;以及下标的含义 dp[i]&#xff1a;考虑下标i&#xff08;包括i&#xff09;以内的房屋&#xff0c;最多可以偷窃的金额为dp[i] 2. 确定递推公式 dp[i] max(dp[i - 2] nums[i], dp[i - 1]); 3. dp数组如何初始…