使用VSCODE跑orbslam2踩的坑

我用的是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.hqwc.cn/news/2408.html

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

相关文章

【K8SRockyLinux】基于开源操作系统搭建K8S高可用集群(详细版)

文章目录 一、实验节点规划表👇二、实验版本说明📃三、实验拓扑📊四、实验详细操作步骤🕹️1. 安装Rocky Linux开源企业操作系统2. 所有主机系统初始化3. 所有master节点部署keepalived4. 所有master节点部署haproxy5. 所有节点配…

【SpringMVC 学习笔记】

SpringMVC 笔记记录 1. SpringMVC 简介2. 入门案例3. 基本配置3.1 xml形式配置3.2 注解形式配置 4. 请求4.1 请求参数4.1.1 普通类型传参4.1.2 实体类类型传参4.1.3 数组和集合类型传参 4.2 类型转换器4.3 请求映射 5. 响应 1. SpringMVC 简介 三层架构 2. 入门案例 3. 基本…

Java死锁

代码: package Test0629;public class BankTest {static Bank b1 null;static Bank b2 null;public static void main(String[] args) {Thread t1 new Thread(){public void run(){b1 Bank.getInstance();}};Thread t2 new Thread(){public void run(){b2 Ba…

fast admin报错:Unexpected token ‘<‘, “ (已解决)

报错信息: 在新加视图的时候的,点击编辑/添加忽然报这个错误,网上找了半天,js、视图、修修改改最后竟是一个小问题; 解决方法: 改为: 简单的说就是:btn-ajax ->btn-dialog

【MySQL】MySQL数据库,RDBMS 术语,使用说明和报错解决的详细讲解

作者简介: 辭七七,目前大一,正在学习C/C,Java,Python等 作者主页: 七七的个人主页 文章收录专栏: 七七的闲谈 欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖&#x1f…

【强化学习】常用算法之一 “SAC”

作者主页:爱笑的男孩。的博客_CSDN博客-深度学习,活动,python领域博主爱笑的男孩。擅长深度学习,活动,python,等方面的知识,爱笑的男孩。关注算法,python,计算机视觉,图像处理,深度学习,pytorch,神经网络,opencv领域.https://blog.csdn.net/Code_and516?typeblog个…

【网络安全带你练爬虫-100练】第1练:发送请求获取返回内容

目录 一、前置知识1 二、前置知识2 requests库的7个主要方法 语法: 注解: 三、扩展工具 四、网络安全小圈子 一、前置知识1 顾名思义网络爬虫第一步,爬取目标 URL的网页的信息 可以使用 urllib.request 和 requests发送请求&#xff0…

浪潮发布G2平台

2017年2月28日下午,浪潮在北京粤财JW万豪酒店以“智变”为主题,发布新一代智能存储平台G2,该平台基于统一架构和In系列智能软件设计,在保障”三高”特性满足企业级关键数据存储、处理需求的同时,更强调数据生命周期的智…

了解浏览器缓存

什么是HTTP缓存,如何工作的? 当我们打开一个页面时,会向服务端发起很多次请求,如下图打开百毒首页,发起了HTML、各种图片、JS、CSS等资源共101次请求。这里面很多资源并不会频繁变化,每次打开页面都重新请…

为什么有了HTTP,还需要WebSocket协议?

目录 WebSocket是什么? WebSocket怎样建立连接? WebSocket的实际用途 WebSocket 与 HTTP 的选择 HTTP是基于TCP协议的,同一时间里,客户端和服务器只能有一方主动发数据,是半双工通信。 通常,打开某个网…

Html + Jquery + Vue前端学习笔记

文章目录 一,Vue1,v-model 数据绑定2,生成描述列表 二,HtmlJquery1,动态修改类名2,layui手风琴效果3,输入框样式修改4,多行文本显示省略号5,div内容居右6,字符…

k8s calico 网络异常处理

故障 worker3故障重启后,该节点的 pod 访问不了其它节点服务 2023-06-26T07:44:41.041Z ERROR setup unable to start manager {"error": "Get \"https://10.244.64.1:443/api?timeout32s\": dial tcp 10.244.64.1:443: i/o…