记录配置ubuntu18.04下运行ORBSLAM3的ros接口的过程及执行单目imu模式遇到的问题(详细说明防止忘记)

今天的工作需要自己录制的数据集来验证昨天的标定结果

用ORBSLAM3单目imu模式运行,mentor给的是一个rosbag格式的数据包,配置过程出了几个问题记录一下,沿配置流程写。

一.orbslam3编译安装

1.首先是安装各种依赖

这里不再赘述,网上参考博客非常多

2.下载orbslam3:

git clone https://github.com/UZ-SLAMLab/ORB_SLAM3.git

3.编译:

修改下cmakelists.txt,因为是ubuntu18.04,ros为melodic,对应的opencv版本为3.2,所以将cmakelist.txt中设置为3.2,而且ros/orbslam3中的还有dbow中的都要一同设置

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

正常编译,哪里有问题改哪里,这个网上资料都很多

最终顺利结束

二.然后是ros接口的orbslam3

首先把anaconda环境退了

conda deactivate

然后修改build_ros.sh,将最下面make -j改成make -j12(自己选,对应自己电脑cpu性能就好),防止卡死。

然后执行

./build_ros.sh

这里会出一些问题了。

首先是因为没添加到环境变量中而导致找不到,这里添加就好:(这里是笔者自己的路径)

sudo gedit ~/.bashrc
export ROS_PACKAGE_PATH=${ROS_PACKAGE_PATH}:/home/shikai/cyber/ORB_SLAM3-master/Examples_old/ROS/ORB_SLAM3
source ~/.bashrc

然后编译:

cd Examples_old/ROS/ORB_SLAM3
mkdir build
cd build
cmake .. -DROS_BUILD_TYPE=Release
make -j4

最开始会报找不到sophus库头文件的错:fatal error: sophus/se3.hpp: 没有那个文件或目录
#include <sophus/se3.hpp>

这个去第三方库那个文件夹中,将sophus sudo make install就可以了

然后会报和ar相关的错,这里ar没什么用,直接在ros/orbslam3中的cmakelist.txt中将相关的删掉即可,然后重新执行编译,这次执行通过

注意,在这里有坑,笔者之前的电脑是opencv多版本共存的,也就是笔者安装了opencv3.4.5,此时可以看到:

/usr/bin/ld: warning: libopencv_imgproc.so.3.2, needed by /opt/ros/melodic/lib/libcv_bridge.so, may conflict with libopencv_imgproc.so.3.4
/usr/bin/ld: warning: libopencv_core.so.3.2, needed by /opt/ros/melodic/lib/libcv_bridge.so, may conflict with libopencv_core.so.3.4
[ 80%] Built target Mono_Inertial
/usr/bin/ld: warning: libopencv_imgproc.so.3.2, needed by /opt/ros/melodic/lib/libcv_bridge.so, may conflict with libopencv_imgproc.so.3.4
/usr/bin/ld: warning: libopencv_core.so.3.2, needed by /opt/ros/melodic/lib/libcv_bridge.so, may conflict with libopencv_core.so.3.4

虽然编译也通过,但是你会发现执行普通版的orbslam3是没问题的,但是执行ros接口的会报错:

ORB Extractor Parameters:
- Number of Features: 1000
- Scale Levels: 8
- Scale Factor: 1.2
- Initial Fast Threshold: 20
- Minimum Fast Threshold: 7
double free or corruption (out)

这个就很烦,是因为cv_bridge对opencv指向问题,cv_bridge默认指向ros安装自带的opencv3.2.0,就会与自己安装的opencv产生冲突。

笔者参考了好多帖子:

ROS1 Ubuntu系统运行ORB_SLAM3报段错误(核心已转储)

ORB SLAM3 ubuntu18.04 ROS 运行 段错误 (核心已转储) 踩坑及解决

等等,都很复杂不好操作,且感觉不一定好用,所以笔者这里采用暴力删除方法,直接将其他版本的opencv都卸载,并调整项目中的cmakelist.txt,将其都设置为find opencv 3.2,这样编译后

三.运行

然后就是跑rosbag,这里使用自己的rosbag,开启三个终端,第一个执行

roscore

然后开启orbslam3 单目+imu的ros节点:

rosrun ORB_SLAM3 Mono_Inertial /home/shikai/cyber/ORB_SLAM3-master/Vocabulary/ORBvoc.txt /home/shikai/cyber/ORB_SLAM3-master/Examples_old/ROS/zjbd_T265.yaml

这里使用的是自己标定的参数构成的yaml文件,读取对格式要求较为严格,如遇到这个问题:

terminate called after throwing an instance of 'cv::Exception'   what():  OpenCV(3.4.5) /home/shikai/3rd/opencv-3.4.5/modules/core/src/persistence_c.cpp:1426: error: (-2:Unspecified error) The node does not represent a user object (unknown type?) in function 'cvRead',那就是yaml文件内部哪个地方格式有问题,自己找吧,调整好之后,可以看到节点被打开:

然后在第三个终端上执行:

rosbag play  -r 0.5 --pause '/home/shikai/cyber/ORB_SLAM3-master/Examples_old/ROS/2024-11-04-17-01-19.bag'  后面对应自己的话题,一定要和节点要求的对应

(正常就可以看到轨迹和图像了,但笔者这里还有问题)

在这个后面加上自己的话题,这里不知道orbslam3 单目imu要什么话题可以输入这个命令查看:

 rosnode info / Mono_Inertial

 

可以看到是这个话题:camera/image_raw,查看我自己rosbag,我们把image弄成压缩的了,但是orbslam3又识别不到,所以需要解压缩,这里使用image_transport这个工具,

rospack list | grep image_transport

查看一下自己是否有:

发现是有的,于是启动另一个节点:

rosrun image_transport replish compressed in:=/camera_chest/fisheye1/image_raw raw out:=/camera/image_raw

其中:/camera_chest/fisheye1/image_raw这是自己rosbag中压缩的图像话题,而 /camera/image_raw对应orbslam3 单目imu节点需要的话题,此时再次播放rosbag:

rosbag play  -r 0.5 --pause '/home/shikai/cyber/ORB_SLAM3-master/Examples_old/ROS/2024-11-04-17-01-19.bag'  /camera_chest/imu:=/imu --clock

按下空格键开始播放,可以看到有轨迹啦:(因数据涉密,只显示部分照片)

到这里就结束了,尽可能详细了,如小伙伴再有什么疑问,可以评论我

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

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

相关文章

实验5:网络设备发现、管理和维护

实验5&#xff1a;网络设备发现、管理和维护 实验目的及要求&#xff1a; 通过实验&#xff0c;掌握Cisco 路由器和交换机的IOS配置管理。自动从NTP服务器获取时间信息。能够利用TFTP服务器实现路由器和交换机配置文件的备份和恢复。同时验证CDP协议和LLDP协议的网络参数。完…

前端(2)——快速入门CSS

参考&#xff1a; 罗大富 CSS 参考手册 | 菜鸟教程 CSS 参考手册 1. CSS CSS全名是层叠样式表&#xff0c;中文名层叠样式表。用于定义网页样式和布局的样式表语言。 通过 CSS&#xff0c;你可以指定页面中各个元素的颜色、字体、大小、间距、边框、背景等样式&#xff0c;…

yolo标签自动标注(使用python和yolo方法)

yolo代码自动标注 1.引言1.初阶“自动标注”&#xff0c;给每个图像都生成一个固定的标注文件&#xff0c;进而在labglimg中对矩形框进行微调&#xff0c;减少标注的工作量2.高阶自动标注&#xff0c;利用我们训练好的&#xff08;但是没有特别精准的&#xff09;yolo文件先对每…

jmeter常用配置元件介绍总结之线程组

系列文章目录 安装jmeter jmeter常用配置元件介绍总结之线程组 1.线程组(用户)1.1线程组1.1.setUp线程组和tearDown线程组1.2.Open Model Thread Group(开放模型线程组)1.3.bzm - Arrivals Thread Group(到达线程组)1.4.jpgc - Ultimate Thread Group(终极线程组)1.5.jpgc - St…

spring gateway 动态路由

##yml配置 spring:application:name: public-gateway # cloud: # gateway: # routes: # - id: mybatis-plus-test # 路由的唯一标识 # uri: http://192.168.3.188:9898 # 目标服务的地址 # predicates: # - Path/test/** # 匹配…

NVT新能德科技入职测评SHL题库更新:数字推理+演绎推理高分答案、真题解析

新能德的入职Verify测评主要考察应聘者的逻辑推理能力、数学能力、数据分析能力以及处理信息的能力。根据搜索结果&#xff0c;测评通常包含以下几个部分&#xff1a; 1. **语言理解**&#xff1a;这部分包括阅读理解、逻辑填空和语句排序。要求应聘者在17分钟内完成30题&#…

学法减分交管12123模拟练习小程序源码前端和后端和搭建教程

交管推出个学法减分&#xff0c;每个驾驶员可以把被扣的6分&#xff0c;以看视频答题的形式学习回来&#xff0c;然后答题这个一共二十道题每道题60秒&#xff0c;有好多人不会&#xff0c;用咱们的小程序就可以模拟练习强化练习&#xff0c;还有拍照识别题目找到正确答案&…

element-plus <el-date-picker>日期选择器踩坑!!!!

我怎么一上午踩两个坑&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff08;大声bb&#xff09; 原来的vue2老项目是这样写的 <el-form-item label"时间" prop"time"><el-date-pickerv-model"addForm.time"typ…

JS的学习与使用

JS的学习与使用 一 什么是Javascript&#xff1f; Javascript是一门跨平台&#xff0c;面向对象的脚本语言&#xff0c;是用来控制网页行为的&#xff0c;它能使网页可以交互 java与Javascript是完全不同的语言&#xff0c;不论是概念还是设计&#xff0c;但是基础语法类似 E…

ubuntu20.04 解决Pytorch默认安装CPU版本的问题

ubuntu20.04 解决Pytorch默认安装CPU版本的问题 在使用Anaconda安装支持CUDA的PyTorch版本时&#xff0c;遇到只能安装CPU版本的PyTorch是一个常见问题。这通常由于Anaconda环境配置、镜像源设置不当或版本匹配问题导致。以下是详尽的解决方案和步骤&#xff0c;以确保能够正确…

【操作系统】守护进程

一、守护进程的概念 守护进程是一个在后台运行并且不受任何终端控制的进程 二、自己实现守护进程 1.预备知识 &#xff08;1&#xff09;/dev/null /dev/null是一个特殊的设备文件&#xff0c;往这个文件里写不进去任何数据&#xff0c;也读不出来任何数据 因此&#xff0…

【数据结构与算法】第12课—数据结构之归并排序

文章目录 1. 归并排序2. 计数排序3. 排序算法复杂度及稳定性分析在这里插入图片描述 1. 归并排序 分治法&#xff08;Divide and Conquer&#xff09;是一种重要的算法设计策略&#xff0c;其核心思想是将一个复杂的大问题分解为若干个小规模的子问题&#xff0c;递归地解决这些…

【安全通信】告别信息泄露:搭建你的开源视频聊天系统briefing

文章目录 前言1.关于briefing2.本地部署briefing3.使用briefing4.cpolar内网穿透工具安装5.创建远程连接公网地址6.固定briefing公网地址 前言 在这个信息爆炸的时代&#xff0c;视频聊天几乎成了我们日常沟通的标配。但你是否曾在视频会议中感到不安&#xff0c;担心自己的私…

pip install tkinter报错

pip install tkinter&#xff1a;ERROR: Could not find a version that satisfies the requirement tkinter 这是因为&#xff0c;安装python的时候没有安装tkinter选项&#xff0c;解决这个问题有下面两种方法 一、重新安装python 但是这个步骤有点麻烦 二、在python-3.1…

Python的面向对象day7

1、什么是面向对象 面向对象称为OO&#xff0c;他通过将数据和功能封装在一个被称为‘对象’的实体中&#xff0c;来组织和管理代码。面向对象变成&#xff08;OOP&#xff09;具有四个特性&#xff0c;封装、继承、多态、抽象 优点&#xff1a;模块化、安全性高、代码重用性…

自动化工具 Gulp

自动化工具 gulp 摘要 概念&#xff1a;gulp用于自动化开发流程。 理解&#xff1a;我们只需要编写任务&#xff0c;然后gulp帮我们执行 核心概念&#xff1a; 任务&#xff1a;通过定义不同的任务来组织你的构建流程。 管道&#xff1a;通过管道方式将文件从一个插件传递…

探索 Seata 分布式事务

Seata(Simple Extensible Autonomous Transaction Architecture)是阿里巴巴开源的一款分布式事务解决方案,旨在帮助开发者解决微服务架构下的分布式事务问题。它提供了高效且易于使用的分布式事务管理能力,支持多种事务模式,确保数据的一致性和完整性。 以下是 Seata 的一…

【QT常用技术讲解】优化网络链接不上导致qt、qml界面卡顿的问题

前言 qt、qml项目经常会涉及访问MySQL数据库、网络服务器&#xff0c;并且界面打开时的初始化过程就会涉及到链接Mysql、网络服务器获取数据&#xff0c;如果网络不通&#xff0c;卡个几十秒&#xff0c;会让用户觉得非常的不爽&#xff0c;本文从技术调研的角度讲解解决此类问…

编程之路,从0开始:知识补充篇

Hello大家好&#xff0c;很高兴我们又见面了&#xff01; 给生活添点passion&#xff0c;开始今天的编程之路&#xff01; 这一篇我们来补充一下在之前篇目没讲到的知识&#xff0c;并结合一些码友的私信提问和我在编程中遇到的问题&#xff0c;做一些易错点或易混点的讲解。 …

C语言中,让人又爱又恨的字符串编码

引言 在C语言的世界里&#xff0c;字符串编码是一个让人既爱又恨的话题。 所有的打印信息&#xff0c;都是以字符串输出的。但是&#xff0c;大家在编码的时候&#xff0c;经常会遇到一些情况&#xff0c;稍不注意&#xff0c;就会导致显示出乱码&#xff0c;到了客户那里&…