记录配置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.rhkb.cn/news/473732.html

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

相关文章

STM32设计井下瓦斯检测联网WIFI加Zigbee多路节点协调器传输

目录 目录 前言 一、本设计主要实现哪些很“开门”功能&#xff1f; 二、电路设计原理图 1.电路图采用Altium Designer进行设计&#xff1a; 2.实物展示图片 三、程序源代码设计 四、获取资料内容 前言 本系统基于STM32微控制器和Zigbee无线通信技术&#xff0c;设计了…

华为HCIP——MSTP/RSTP与STP的兼容性

一、MSTP/RSTP与STP的兼容性的原理&#xff1a; 1.BPDU版本号识别&#xff1a;运行MSTP/RSTP协议的交换机会根据收到的BPDU&#xff08;Bridge Protocol Data Unit&#xff0c;桥协议数据单元&#xff09;版本号信息自动判断与之相连的交换机的运行模式。如果收到的是STP BPDU…

Python绘制雪花

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

第六节、Docker 方式部署指南 github 上项目 mkdocs-material

一、简介 MkDocs 可以同时编译多个 markdown 文件,形成书籍一样的文件。有多种主题供你选择,很适合项目使用。 MkDocs 是快速,简单和华丽的静态网站生成器,可以构建项目文档。文档源文件在 Markdown 编写,使用单个 YAML 配置文件配置。 MkDocs—markdown项目文档工具,…

Spring Boot教程之Spring Boot简介

Spring Boot 简介 接下来一段时间&#xff0c;我会持续发布并完成Spring Boot教程 Spring 被广泛用于创建可扩展的应用程序。对于 Web 应用程序&#xff0c;Spring 提供了 Spring MVC&#xff0c;它是 Spring 的一个广泛使用的模块&#xff0c;用于创建可扩展的 Web 应用程序。…

无线迷踪:陈欣的网络之旅

第一章 陈欣是一名资深的网络工程师&#xff0c;工作在一家领先的科技公司。她的生活平静而有序&#xff0c;直到有一天&#xff0c;公司的无线网络突然出现了严重的问题。员工们的设备频繁断开连接&#xff0c;无法正常使用。这个问题不仅影响了工作效率&#xff0c;还引起了…

ssm129办公用品管理系统开发与设计+jsp(论文+源码)_kaic

毕 业 设 计&#xff08;论 文&#xff09; 题目&#xff1a;办公用品管理系统设计与实现 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本办公用品管理系统…

OMV7 树莓派 tf卡安装

​ 升级7之后&#xff0c;问题多多&#xff0c;不是docker不行了&#xff0c;就是代理不好使 今天又重装了一遍&#xff0c;用官方的链接&#xff0c;重新再折腾一遍…… 使用raspberry pi imager安装最新版lite OS。 注意是无桌面 Lite版 配置好树莓派初始化设置&#xff0…

【数据结构与算法】查找

文章目录 一.查找二.线性结构的查找2.1顺序查找2.2折半查找2.3分块查找 三.树型结构的查找3.1二叉排序树1.定义2.二叉排序树的常见操作3.性能分析 3.2平衡二叉树1.定义2.平衡二叉树的常见操作3.性能分析 3.3B树1.定义2.B树的相关操作 3.4B树1.定义2.B树与B树的比较 四.散列表1.…

SpringCloud篇(服务保护 - Sentinel)

目录 一、雪崩问题及解决方案 1. 雪崩问题 2. 解决方案 方案一&#xff1a;超时处理 方案二&#xff1a;仓壁模式 方案三&#xff1a;断路器模式 方案四&#xff1a;限流 3. 总结 二、服务保护技术对比 三、Sentinel介绍与安装 1. 初识Sentinel 2. Sentinel 优势 3…

C语言项⽬实践-贪吃蛇

目录 1.项目要点 2.窗口设置 2.1mode命令 2.2title命令 2.3system函数 2.Win32 API 2.1 COORD 2.2 GetStdHandle 2.3 CONSOLE_CURSOR_INFO 2.4 GetConsoleCursorInfo 2.5 SetConsoleCursorInfo 2.5 SetConsoleCursorPosition 2.7 GetAsyncKeyState 3.贪吃蛇游戏设…

笔记|M芯片MAC (arm64) docker上使用 export / import / commit 构建amd64镜像

很简单的起因&#xff0c;我的东西最终需要跑在amd64上&#xff0c;但是因为mac的架构师arm64&#xff0c;所以直接构建好的代码是没办法跨平台运行的。直接在arm64上pull下来的docker镜像也都是arm64架构。 检查镜像架构&#xff1a; docker inspect 8135f475e221 | grep Arc…

热点更新场景,OceanBase如何实现性能优化

案例背景 这个案例来自一个保险行业的客户&#xff1a;他们的核心系统底层采用了OceanBase数据库作为存储解决方案&#xff0c;然而&#xff0c;在系统上线运行后&#xff0c;出现了一个异常情况&#xff0c;执行简单的主键更新语句时SQL执行时间出现了显著的波动。为了迅速定…

MYSQL_深入理解自连接_图书借阅情况(2/2)

光说不练假把式。这就开门见山——引出我们的自连接实例&#xff1a;图书借阅情况。 题目&#xff1a; 这是一道笔试题目&#xff1a;如果限时5min内完成&#xff0c;同学们可以测试一下自己对于SQL语句的熟练程度。 题目分析&#xff1a; 可以看见这个数据库有三个实体&…

uniapp luch-request 使用教程+响应对象创建

1. 介绍 luch-request 是一个基于 Promise 开发的 uni-app 跨平台、项目级别的请求库。它具有更小的体积、易用的 API 和方便简单的自定义能力。luch-request 支持请求和响应拦截、全局挂载、多个全局配置实例、自定义验证器、文件上传/下载、任务操作、自定义参数以及多拦截器…

MySQL技巧之跨服务器数据查询:基础篇-A数据库与B数据库查询合并--封装到存储过程中

MySQL技巧之跨服务器数据查询&#xff1a;基础篇-A数据库与B数据库查询合并–封装到存储过程中 我们的最终目的是什么&#xff1f;当然的自动执行这些合并操作&#xff01; 上一篇 MySQL技巧之跨服务器数据查询&#xff1a;基础篇-A数据库与B数据库查询合并 我们已经知道怎么合…

解决 IDEA 修改代码重启不生效的问题

前言 在使用 IntelliJ IDEA 进行 Java 项目开发时&#xff0c;有时会遇到一个令人头疼的问题&#xff1a;修改了代码后&#xff0c;重启服务却发现更改没有生效。通常情况下&#xff0c;解决这个问题需要通过 Maven 的 clean 和 compile 命令来强制重新编译&#xff0c;但这显…

【Mysql】Mysql函数(上)

1、概述 在Mysql中&#xff0c;为了提高代码重用性和隐藏实现细节&#xff0c;Mysql提供了很多函数。函数可以理解为封装好的模块代码。 2、分类 在Mysql中&#xff0c;函数非常多&#xff0c;主要可以分为以下几类&#xff1a; &#xff08;1&#xff09;聚合函数 &#xf…

帧中继原理与配置

Frame Relay 帧中继 LMI(Local Management Interface)本地管理接口 LMI协议通过状态查询报文和状态应答报文维护帧中继的链路状态和PVC状态. DLCI(Data Link Connection Identifier)数据链路连接标识符 DLCI只在本地接口和与之直接相连的对端接口有效,不具有全局有效性,记载帧…

Spring Boot 接口防重复提交解决方案

文章目录 前言使用Token机制实现步骤1.生成Token2.传递Token3.验证Token 使用Redis实现步骤1.引入Redis依赖2.生成Token3.传递Token4.验证Token 使用Spring AOP实现步骤1.定义注解2.创建切面3.使用注解 总结 前言 在Web开发中&#xff0c;防止用户重复提交表单是一个常见的需求…