记录配置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

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【汇编】c++游戏开发

由一起学编程创作的‘C/C项目实战&#xff1a;2D射击游戏开发&#xff08;简易版&#xff09;&#xff0c; 440 行源码分享来啦~’&#xff1a; C/C项目实战&#xff1a;2D射击游戏开发&#xff08;简易版&#xff09;&#xff0c; 440 行源码分享来啦~_射击c-CSDN博客文章浏览…

Vue Canvas实现区域拉框选择

canvas.vue组件 <template><div class"all" ref"divideBox"><!-- 显示图片&#xff0c;如果 imgUrl 存在则显示 --><img id"img" v-if"imgUrl" :src"imgUrl" oncontextmenu"return false" …

JavaWeb--MySQL

1. MySQL概述 首先来了解一下什么是数据库。 数据库&#xff1a;英文为 DataBase&#xff0c;简称DB&#xff0c;它是存储和管理数据的仓库。 像我们日常访问的电商网站京东&#xff0c;企业内部的管理系统OA、ERP、CRM这类的系统&#xff0c;以及大家每天都会刷的头条、抖音…

在MATLAB中导入TXT文件的若干方法

这是一篇关于如何在MATLAB中导入TXT文件的文章&#xff0c;包括示例代码和详细说明 文章目录 在MATLAB中导入TXT文件1. 使用readtable函数导入TXT文件示例代码说明 2. 使用load函数导入TXT文件示例代码说明 3. 使用importdata函数导入TXT文件示例代码说明 4. 自定义导入选项示例…

Clonezilla 再生龙制作系统U盘还原系统 ubuntu 22.04 server

参考 Clonezilla 再生龙制作系统U盘还原系统(UltraISO) https://blog.csdn.net/qq_57172130/article/details/120417522 Clonezilla-备份_部署ubuntu https://blog.csdn.net/xiaokai1999/article/details/131054826 基于再生龙&#xff08;clonezilla&#xff09;的Ubuntu镜…

号卡分销系统,号卡系统,物联网卡系统源码安装教程

号卡分销系统&#xff0c;号卡系统&#xff0c;物联网卡系统&#xff0c;&#xff0c;实现的高性能(PHP协程、PHP微服务)、高灵活性、前后端分离(后台)&#xff0c;PHP 持久化框架&#xff0c;助力管理系统敏捷开发&#xff0c;长期持续更新中。 主要特性 基于Auth验证的权限…

Nature Communications 基于触觉手套的深度学习驱动视触觉动态重建方案

在人形机器人操作领域&#xff0c;有一个极具价值的问题&#xff1a;鉴于操作数据在人形操作技能学习中的重要性&#xff0c;如何有效地从现实世界中获取操作数据的完整状态&#xff1f;如果可以&#xff0c;那考虑到人类庞大规模的人口和进行复杂操作的简单直观性与可扩展性&a…

STM32 独立看门狗(IWDG)详解

目录 一、引言 二、独立看门狗的作用 三、独立看门狗的工作原理 1.时钟源 2.计数器 3.喂狗操作 4.超时时间计算 5.复位机制 四、独立看门狗相关寄存器 1.键寄存器&#xff08;IWDG_KR&#xff09; 2.预分频寄存器&#xff08;IWDG_PR&#xff09; 3.重载寄存器&…

vue3点击按钮el-dialog对话框不显示问题

vue3弹框不显示问题&#xff0c;控制台也没报错 把 append-to-body:visible.sync"previewDialogOpen" 改为 append-to-bodyv-model"previewDialogOpen" 就好了。

vue项目使用eslint+prettier管理项目格式化

代码格式化、规范化说明 使用eslintprettier进行格式化&#xff0c;vscode中需要安装插件ESLint、Prettier - Code formatter&#xff0c;且格式化程序选择为后者&#xff08;vue文件、js文件要分别设置&#xff09; 对于eslint规则&#xff0c;在格式化时不会全部自动调整&…

Python爬虫----python爬虫基础

一、python爬虫基础-爬虫简介 1、现实生活中实际爬虫有哪些&#xff1f; 2、什么是网络爬虫&#xff1f; 3、什么是通用爬虫和聚焦爬虫&#xff1f; 4、为什么要用python写爬虫程序 5、环境和工具 二、python爬虫基础-http协议和chrome抓包工具 1、什么是http和https协议…

大数据新视界 -- 大数据大厂之 Impala 性能飞跃:动态分区调整的策略与方法(上)(21 / 30)

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

Java基础-Java多线程机制

(创作不易&#xff0c;感谢有你&#xff0c;你的支持&#xff0c;就是我前行的最大动力&#xff0c;如果看完对你有帮助&#xff0c;请留下您的足迹&#xff09; 目录 一、引言 二、多线程的基本概念 1. 线程与进程 2. 多线程与并发 3. 多线程的优势 三、Java多线程的实…

Unity中HDRP设置抗锯齿

一、以前抗锯齿的设置方式 【Edit】——>【Project Settings】——>【Quality】——>【Anti-aliasing】 二、HDRP项目中抗锯齿的设置方式 在Hierarchy中——>找到Camera对象——>在Inspector面板上——>【Camera组件】——>【Rendering】——>【Pos…

动手学深度学习72 优化算法

1. 优化算法 任意两点连线&#xff0c;所有线上的值都在集合里面–凸集 在机器学习&#xff0c;凹凸函数的区别&#xff1f; 凸函数表达能力有限 动量法&#xff1a; 比较平滑的改变方向&#xff0c;两个下降方向不一样【冲突】的时候&#xff0c;抵消掉一些使梯度的更新不那…

Linux:进程的优先级 进程切换

文章目录 前言一、进程优先级1.1 基本概念1.2 查看系统进程1.3 PRI和NI1.4 调整优先级1.4.1 top命令1.4.2 nice命令1.4.3 renice命令 二、进程切换2.1 补充概念2.2 进程的运行和切换步骤&#xff08;重要&#xff09; 二、Linux2.6内核进程O(1)调度队列&#xff08;重要&#x…

Python绘制雪花

文章目录 系列目录写在前面技术需求完整代码代码分析1. 代码初始化部分分析2. 雪花绘制核心逻辑分析3. 窗口保持部分分析4. 美学与几何特点总结 写在后面 系列目录 序号直达链接爱心系列1Python制作一个无法拒绝的表白界面2Python满屏飘字表白代码3Python无限弹窗满屏表白代码4…

2023年MathorCup数学建模B题城市轨道交通列车时刻表优化问题解题全过程文档加程序

2023年第十三届MathorCup高校数学建模挑战赛 B题 城市轨道交通列车时刻表优化问题 原题再现&#xff1a; 列车时刻表优化问题是轨道交通领域行车组织方式的经典问题之一。列车时刻表规定了列车在每个车站的到达和出发&#xff08;或通过&#xff09;时刻&#xff0c;其在实际…

AntFlow 0.11.0版发布,增加springboot starter模块,一款设计上借鉴钉钉工作流的免费企业级审批流平台

AntFlow 0.11.0版发布,增加springboot starter模块,一款设计上借鉴钉钉工作流的免费企业级审批流平台 传统老牌工作流引擎比如activiti,flowable或者camunda等虽然功能强大&#xff0c;也被企业广泛采用&#xff0c;然后也存着在诸如学习曲线陡峭&#xff0c;上手难度大&#x…

构建SSH僵尸网络

import argparse import paramiko# 定义一个名为Client的类&#xff0c;用于表示SSH客户端相关操作 class Client:# 类的初始化方法&#xff0c;接收主机地址、用户名和密码作为参数def __init__(self, host, user, password):self.host hostself.user userself.password pa…