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

news2024/11/15 10:05:44

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

用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.coloradmin.cn/o/2240769.html

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

相关文章

vue2项目启用tailwindcss - 开启class=“w-[190px] mr-[20px]“ - 修复tailwindcss无效的问题

效果图 步骤 停止编译"npm run dev"安装依赖 npm install -D tailwindcssnpm:tailwindcss/postcss7-compat postcss^7 autoprefixer^9 创建文件/src/assets/tailwindcss.css&#xff0c;写入内容&#xff1a; tailwind base; tailwind components; tailwind utiliti…

实施工程师简历「精选篇」

【#实施工程师简历#】一份出色的实施工程师简历&#xff0c;是获得优质工作机会的重要跳板。那么&#xff0c;如何打造一份令人眼前一亮的实施工程师简历呢&#xff1f;以下是幻主简历网整理的实施工程师简历「精选篇」&#xff0c;欢迎大家阅读收藏&#xff01; 实施工程师简历…

Linux篇(权限管理命令)

目录 一、权限概述 1. 什么是权限 2. 为什么要设置权限 3. Linux中的权限类别 4. Linux中文件所有者 4.1. 所有者分类 4.2. 所有者的表示方法 属主权限 属组权限 其他权限 root用户&#xff08;超级管理员&#xff09; 二、普通权限管理 1. ls查看文件权限 2. 文件…

惊爆!72.1K star 的 Netdata:实时监控与可视化的超炫神器!

在当今复杂的 IT 环境中&#xff0c;实时监控与可视化对于保障系统的稳定运行和性能优化至关重要。 无论是服务器、应用程序&#xff0c;还是网络设备&#xff0c;及时获取性能数据能够帮助我们快速定位问题、优化资源配置。 Netdata&#xff0c;作为一个开源的实时监控工具&a…

姓名改成商标名称,李子柒已成身份证名字!

近日李子柒紫气东来&#xff0c;以中国非物质文化遗产“漆器”生动地展现了中国漆器的独特美学和工艺之美&#xff0c;这条视频在微博已超过1.3亿观看&#xff0c;在国外视频平台订阅超二千万粉丝成海外中文创作第一人。 李子柒原名李佳佳&#xff0c;在网上看到她已经正式将身…

论云游戏的性能与性价比,ToDesk、青椒云、顺网云游戏等具体实操看这篇就够了

文章目录 一、前言二、云电脑产品基础介绍2.1 ToDesk云电脑2.1.1 ToDesk云电脑硬件参数2.1.2 ToDesk云电脑鲁大师跑分2.1.3 ToDesk云电脑收费方式2.1.4 ToDesk云电脑特色功能 2.2 青椒云2.2.1 青椒云游戏娱乐硬件配置2.2.2 青椒云云电脑鲁大师跑分2.2.3 青椒云收费方式2.2.4 青…

服务器数据恢复——Ext4文件系统使用fsck后mount不上的数据恢复案例

关于Ext4文件系统的几个概念&#xff1a; 块组&#xff1a;Ext4文件系统的全部空间被划分为若干个块组&#xff0c;每个块组结构基本上相同。 块组描述符表&#xff1a;每个块组都对应一个块组描述符&#xff0c;这些块组描述符统一放在文件系统的前部&#xff0c;称为块组描述…

ubuntu 下mosquitto TLS配置

1、/etc/mosquitto/mosquitto.conf文件配置 persistence true persistence_location /var/lib/mosquitto/ log_dest file /var/log/mosquitto/mosquitto.log include_dir /etc/mosquitto/conf.d listener 1883 listener 8883 0.0.0.0 password_file /etc/mosquitto/pwfile cert…

隧道论文阅读2-采用无人融合扫描数据的基于深度学习的垂直型隧道三维数字损伤图

目前存在的问题&#xff1a; 需要开发新的无人测量系统测量垂直隧道图像数据量巨大&#xff0c;基于深度学习完成损伤评估跟踪获取图像位置的困难&#xff0c;对大型基础设施感兴趣区域(roi)的2d和3d地图建立进行了研究&#xff0c;对整个目标结构的损伤定位仍然具有挑战性。为…

【C++动态规划 最长公共子序列】1035. 不相交的线|1805

本文涉及知识点 C动态规划 LeetCode1035. 不相交的线 在两条独立的水平线上按给定的顺序写下 nums1 和 nums2 中的整数。 现在&#xff0c;可以绘制一些连接两个数字 nums1[i] 和 nums2[j] 的直线&#xff0c;这些直线需要同时满足&#xff1a; nums1[i] nums2[j] 且绘制的…

SELINUX和防火墙

SELINUX 简介&#xff1a; SELinux通过对进程和文件的访问进行精细的控制和限制&#xff0c;可以在系统级别上实现强制访问控制&#xff0c;即使是root用户也无法绕过这种控制。它基于策略规则来确定哪些进程可以访问哪些文件&#xff0c;从而有效地减少了系统遭受恶意攻击的…

计算机毕业设计Python+大模型农产品推荐系统 农产品爬虫 农产品商城 农产品大数据 农产品数据分析可视化 PySpark Hadoop

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

VUE实现点击导航栏进行切换右边内容

首先看看效果&#xff0c;左边导航栏进行切换&#xff0c;右边内容进行切换 代码如下 <div><el-tabs :tab-position"tabPosition" style"height: 800px;"><el-tab-pane label"通知通告">通知通告</el-tab-pane><el-t…

Power BI - Get Data from SQLite

1.简单介绍 Power BI支持连接的数据源很多&#xff0c;比如SQL Server, PostgreSQL,MYSQL, Dataverse等。如果要连接小型数据源Sqlite&#xff0c;由于没有内置的直接连接Sqlite选项&#xff0c;需要使用ODBC driver来进行连接 这边尝试一下使用Power BI去连接本地Sqlite数据…

DAY63||拓扑排序精讲 |dijkstra(朴素版)精讲

拓扑排序精讲 117. 软件构建 题目描述 某个大型软件项目的构建系统拥有 N 个文件&#xff0c;文件编号从 0 到 N - 1&#xff0c;在这些文件中&#xff0c;某些文件依赖于其他文件的内容&#xff0c;这意味着如果文件 A 依赖于文件 B&#xff0c;则必须在处理文件 A 之前处理文…

爬虫补环境案例---问财网(rpc,jsdom,代理,selenium)

目录 一.环境检测 1. 什么是环境检测 2.案例讲解 二 .吐环境脚本 1. 简介 2. 基础使用方法 3.数据返回 4. 完整代理使用 5. 代理封装 6. 封装所有使用方法 jsdom补环境 1. 环境安装 2. 基本使用 3. 添加参数形式 Selenium补环境 1. 简介 2.实战案例 1. 逆向目…

DICOM图像解析:深入解析DICOM格式文件的高效读取与处理(续)

目录 一、DICOM图像高效解析 1、处理压缩的像素数据 常见压缩算法及其处理方法 解压缩示例 2、多帧图像的处理 多帧图像解析流程 三维图像的体绘制 3、序列和嵌套数据元素 序列数据的解析 二、错误处理与数据验证 常见错误类型 错误处理策略 三、使用现有的DICOM库…

「QT」高阶篇 之 d-指针 的用法

✨博客主页何曾参静谧的博客&#x1f4cc;文章专栏「QT」QT5程序设计&#x1f4da;全部专栏「Win」Windows程序设计「IDE」集成开发环境「UG/NX」BlockUI集合「C/C」C/C程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「UG/NX」NX定制…

如何绑定洛谷账号

首先注册洛谷 然后登陆 点击键盘F12 点击加号 点击应用程序 在name中找到__client_id和_uid 再复制相应的value到下图右侧 然后点击confirm即可 愿我们都能成为我们想要去成为的人&#xff01; 花会沿路盛开&#xff0c;我们以后的路也会&#xff01; 追风赶月莫停留&…

5G CPE:为什么活动会场与商铺的网络成为最新选择

在快节奏的现代社会中&#xff0c;无论是举办一场盛大的活动还是经营一家繁忙的商铺&#xff0c;稳定的网络连接都是不可或缺的基石。然而&#xff0c;面对复杂的布线难题或高昂的商业宽带费用&#xff0c;许多场所往往陷入两难境地。幸运的是&#xff0c;5G CPE&#xff08;Cu…