ROS中bag的录制、播放和使用

news2024/11/24 20:43:54

文章目录

  • 前言
  • 一、bag录制
  • 二、bag信息查看
  • 三、bag播放
  • 四、bag的使用(以A-LOAM为例)


前言

传感器获取到的信息,有时我们可能需要实时处理,有时可能只是采集数据,事后分析,比如:
机器人导航实现中,可能需要绘制导航所需的全局地图,地图绘制实现,有两种方式

  • 方式1:可以控制机器人运动,将机器人传感器感知到的数据时时处理,生成地图信息。
  • 方式2:同样是控制机器人运动,将机器人传感器感知到的数据留存,事后,再重新读取数据,生成地图信息。

两种方式比较,显然方式2使用上更为灵活方便。在ROS中关于数据的留存以及读取实现,提供了专门的工具: rosbag。rosbag本质也是ros的节点,当录制时,rosbag是一个订阅节点,可以订阅话题消息(这是ROS核心的数据通讯,ros开发每天都会打交道的话题通讯机制)并将订阅到的数据写入磁盘文件;当重放时,rosbag是一个发布节点,可以读取磁盘文件,发布文件中的话题消息。这就有助于我们基于离线数据快速重现曾经的实际场景,进行可重复、低成本的分析和调试。如果有ROS基础,下面的内容将很好理解,否则并不能快速学会使用:

一、bag录制

录制所有话题数据(此时会在当前路径下生成名称为当前时间的bag包):

rosbag record -a

录制指定话题数据:

rosbag record <topic_name1> <topic_name2> <topic_name3> ...

指定指定话题数据并指定保存bag的路径名称:

rosbag record  -O <bagname> <topic_name1> <topic_name2> <topic_name3> ...

例如:
在这里插入图片描述

二、bag信息查看

rosbag info指令可以数据包中包含的话题名称,话题数量,话题消息类型等信息:

rosbag info <bagname>

在这里插入图片描述

通过rqt_bag命令将bag进行(数据流)可视化

rqt_bag <bagname>

在这里插入图片描述

三、bag播放

bag的回放就像放视频一样,可以再现数据录制时的实时数据流,但是有一些命令可以控制播放时间、速率、话题等功能:
回放指定bag(一般最常用)

rosbag play <bagname> 

回放当前目录下所有bag

rosbag play *

从指定时间(n = 指定时间s)开始回放bag

rosbag play -s n <bagname>

延时指定时间(n = 延时时间s)开始回放bag

rosbag play -d n <bagname>

播放指定结束时间(n = 指定秒数)的bag

rosbag play -u n <bagname>

从指定时间(n = 开始时间s)开始播放到指定时间(m = 指定播放时间s)的bag

rosbag play -s n -u m <bagname>

按指定倍率(n = 倍率)回放bag

rosbag play -r n <bagname>

只播放感兴趣的 topic

rosbag play <bagname> --topic /topic1 /topic2 ...

播放bag的 topic重命名:

rosbag play <bagname> /topic1:=/topic1

回放包时,其他节点可以接受实时的话题数据,进行SLAM或者显示等处理,播放例如我们利用可视化工具rviz查看小车的点云和图像话题:
在这里插入图片描述
在这里插入图片描述

四、bag的使用(以A-LOAM为例)

A-LOAM是一个纯激光SALM,订阅一个激光消息进行SLAM处理,因此首先我们要获取点云话题,即需要知道其话题名以及消息类型,通过rosbag info查看即可:
在这里插入图片描述
通过rostopic可以在命令行订阅消息,查看其内容(每个话题都一定包含header消息,其中有消息的时间戳stamp和其对应的坐标系frame_id--noarr参数是把点云原始数据data折叠起来了,否则满屏显示"<array type: uint8, length: 460800>"看不到消息其他内容):
在这里插入图片描述

知道bag中的点云话题/point_raw后,在代码中订阅点云消息

ros::Subscriber subLaserCloud = nh.subscribe<sensor_msgs::PointCloud2>(/point_raw, 100, laserCloudHandler);

其中sensor_msgs::PointCloud2是点云消息类型,一些特殊的数据例如点云、IMU和图像等,ROS中有定义好的消息类型,我们还可以定义自己的消息(底层就是一个C++类);/point_raw就是要订阅的话题名称;100是缓存队列的长度,防止处理时间跟不上bag播放速度而丢失数据;laserCloudHandler是回调函数,用于保存或者处理接收的数据。
接下来同时播放包和运行SLAM节点,SLAM算法即可实时接收点云数据并实时处理:

# 分别打开两个终端,输入命令
roslaunch aloam_velodyne aloam_velodyne_VLP_16.launch
rosbag play autoware-20230608161607.bag

在这里插入图片描述

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

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

相关文章

Tomcat 基础

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 前言 一、概述 二、安装 三、 目录结构 四、启停 五、配置文件 1. server.xml (1) Server (2) Listener (3) GlobalNamingResources (4) Service 01.Connector (1) port…

硬件故障恢复出文件之后数据库故障处理---惜分飞

客户那边硬件故障(raid损坏磁盘超过了极限,导致raid offline),通过硬件恢复出来数据文件,然后尝试自行恢复,我接手的时候大量数据文件resetlogs scn异常. 重建控制文件报错 WARNING: Default Temporary Tablespace not specified in CREATE DATABASE command Default Tempora…

Git安装详解(写吐了,看完不后悔)

Git 是一个非常流行的分布式版本控制系统&#xff0c;它帮助开发者管理和跟踪项目中的代码变化。通俗地说&#xff0c;可以认为 Git 就像是一个代码的时间机器&#xff0c;它记录了项目从开始到结束的每一次代码变动。 无论你是个人开发者还是团队成员&#xff0c;掌握 Git 都能…

三防平板在工业生产中的物料追溯与供应链管理

科技的不断发展和技术的不断进步&#xff0c;越来越多的企业开始关注物料追溯和供应链管理的重要性。特别是在工业生产中&#xff0c;确保物料的安全性和可追溯性对于提高生产效率和产品质量至关重要。10.1寸三防平板采用新一代英特尔Jasper Lake平台处理器赛扬RN5100&#xff…

SpringBoot2+Vue2实战(十七)vue集成markdown实现多级评论功能

新建数据库表 Article Data TableName("sys_article") public class Article implements Serializable {private static final long serialVersionUID 1L;TableId(value "id", type IdType.AUTO)private Integer id;/*** 标题*/private String name;/…

FreerRTOS(二值信号量和计数型信号量)

什么是信号量&#xff1f; 信号量&#xff08;Semaphore&#xff09;&#xff0c;是在多任务环境下使用的一种机制&#xff0c;是可以用来保证两个或多个关键代 码段不被并发调用。 信号量这个名字&#xff0c;我们可以把它拆分来看&#xff0c;信号可以起到通知信号的作用&…

机器学习 day26(多标签分类,Adam算法,卷积层)

多标签分类 多标签分类&#xff1a;对于单个输入特征&#xff0c;输出多个不同的标签y多类分类&#xff1a;对于单个输入特征&#xff0c;输出单个标签y&#xff0c;但y的可能结果有多个 为多标签分类构建神经网络模型 我们可以构建三个不同的神经网络模型来分别预测三个不…

C++14新特性扫盲探究

闲暇之时&#xff0c;聊到C14&#xff0c;实际上C14相对之前的11并没有太大的改动&#xff0c;或者说更像C11标准基础上的查漏补缺&#xff0c;C14之后&#xff0c;还有17、20甚至23&#xff0c;所以说&#xff0c;C14更像个过渡版本。 下面粗略聊聊C14新特性&#xff1a; 语言…

解决Ubuntu下arm-none-linux-gnueabihf-gcc -v :未找到命令

问题&#xff1a;arm-none-linux-gnueabihf-gcc -v arm-none-linux-gnueabihf-gcc&#xff1a;未找到命令 学习MP135开发板搭建环境之后没gcc不可用&#xff0c;网上找了很多教程都没法解决 解决方法&#xff1a; 1、重启&#xff1a;&#xff08;我试了没用&#xff09; 2、…

Element分页组件自定义样式

样式效果 页面代码 <el-paginationsize-change"handleSizeChange"current-change"handleCurrentChange":current-page"page.page":page-sizes"[10, 20, 30, 40]":page-size"page.size"layout"total, sizes, prev, …

计算机网络 day5 子网划分 - IP包 - arp协议

目录 子网划分 为什么需要子网划分&#xff1f; 我们为什么不直接使用一个A类的IP地址给一家2000人的公司使用呢&#xff1f; 子网划分本质 子网划分的步骤&#xff1a; 实验&#xff1a;将192.168.1.0/24 划分为4个小网段 --》192.168.1.0/26 减少的IP地址去哪里了&…

遥感云大数据在灾害、水体与湿地领域案例实践及GPT【洪涝灾害、洪水敏感性和风险模拟、河道轮廓监测、地下水变化、红树林遥感制图】

近年来遥感技术得到了突飞猛进的发展&#xff0c;航天、航空、临近空间等多遥感平台不断增加&#xff0c;数据的空间、时间、光谱分辨率不断提高&#xff0c;数据量猛增&#xff0c;遥感数据已经越来越具有大数据特征。遥感大数据的出现为相关研究提供了前所未有的机遇&#xf…

【搜索引擎Solr】Solr:提高批量索引的性能

几个月前&#xff0c;我致力于提高“完整”索引器的性能。我觉得这种改进足以分享这个故事。完整索引器是 Box 从头开始创建搜索索引的过程&#xff0c;从 hbase 表中读取我们所有的文档并将文档插入到 Solr 索引中。 我们根据 id 对索引文档进行分片&#xff0c;同样的文档 id…

第50步 深度学习图像识别:Data-efficient Image Transformers建模(Pytorch)

基于WIN10的64位系统演示 一、写在前面 &#xff08;1&#xff09;Data-efficient Image Transformers Data-efficient Image Transformers (DeiT)是一种用于图像分类的新型模型&#xff0c;由Facebook AI在2020年底提出。这种方法基于视觉Transformer&#xff0c;通过训练策…

LeetCode Java实现 222. 完全二叉树的节点个数

文章目录 题目递归遍历左右子树个数实现思路具体代码实现缺点 根据完全二叉树性质优化思路具体代码实现优点 结语 题目 给你一棵 完全二叉树 的根节点 root &#xff0c;求出该树的节点个数。 完全二叉树 的定义如下&#xff1a;在完全二叉树中&#xff0c;除了最底层节点可能…

串口的再认识

常用函数介绍 串口发送/接收函数 HAL_UART_Transmit(); 串口发送数据&#xff0c;使用超时管理机制&#xff08;即在发送成功前一直阻塞&#xff09; HAL_UART_Receive(); 串口接收数据&#xff0c;使用超时管理机制 HAL_UART_Transmit_IT(); 串口中断模式发送 HAL_UART…

DAY45:动态规划(六)背包问题优化:一维DP解决01背包问题

文章目录 一维DP数组的解法二维DP递推思路滚动数组优化思路&#xff08;重要&#xff09;一维DP数组的含义一维DP递推公式一维DP的初始化遍历顺序&#xff08;重要&#xff09;举例推导DP数组 一维DP数组完整版写法面试问题为什么一维DP背包的for循环一定要倒序遍历为什么一维D…

Qt + QR-Code-generator 生成二维码

0.前言 之前使用 libgrencode 生成二维码&#xff0c;LGPL 协议实在不方便&#xff0c;所以需要找一个 github 星星多的&#xff0c;代码简单最好 header-only&#xff0c;协议最好是 MIT 或者兼容协议而不是 GPL 或者 LPGL。 QR-Code-generator 正好符合这个要求&#xff0c…

JMeter 如何模拟不同的网络速度

目录 前言&#xff1a; 限制输出带宽以模拟不同的网络速度 将这两行添加到user.properties文件中&#xff08;可以在JMeter安装的bin文件夹中找到此行&#xff09; 通过-J 命令行参数传递属性的值&#xff0c;如下所示&#xff1a; 前言&#xff1a; JMeter可以通过使用不同…

【网络安全带你练爬虫-100练】第12练:pyquery解析库提取指定数据

目录 一、目标1、基础/环境的准备工作 二、目标2&#xff1a;开始使用pyquery 三、目标3&#xff1a;提取到指定的数据 四、目标3&#xff1a;通过列表的形式获取指定数据 五、扩展&#xff1a;其他方法 六、网络安全O 一、目标1、基础/环境的准备工作 1、文档&#xff1…