当前位置: 首页 > news >正文

Rosbag常见使用汇总

在 ROS 系统中,可以使用 bag 文件来保存和记录系统的运行状态,比如录制激光雷达和相机话题的 bag 包,然后回放用来,进行联合外参标定。

1.官方的 rosbag 教程的笔记

https://wiki.ros.org/rosbag/Commandline

1.常用的几个操作

虽然命令很多,但是实际工作中常用的命令也就如下几个:

1. 1.录包

录制所有话题:

rosbag record -a

录制指定话题,设置 bag 包名:

rosbag record -O bag_name.bag /topic1_name /topic2_name /xxx

有时候我录制包不设置名称,默认按照录制结束时间命名:

rosbag record /topic1_name /topic2_name /xxx

1. 2.回放

常用的是以暂停的方式启动,防止跑掉数据:

rosbag play --pause record.bag

你也可以直接回放:

rosbag play record.bag

建图过程中有时会设置以 0.5 倍速回放,也就是以录制频率的一半回放:

rosbag play -r 0.5 record.bag

回放完后,我一般会用 rostopic list 查看下发布的主题,确保是我需要的:

rostopic list

1. 3.修复

如果遇到拷到bag包中文件损坏,提示需要 reindex,执行一下即可,不过数据好像会少一些:

rosbag reindex xxx.bag

下面是完整的 rosbag 用法,需要的可以查找下

2.rosbag 基本作用

rosbag 工具可以录制一个包、从一个或多个包中重新发布消息、查看一个包的基本信息、检查一个包的消息定义,基于 Python 表达式过滤一个包的消息,压缩和解压缩一个包以及重建一个包的索引。

rosbag 目前常用的命令如下(fix 和 filter 暂时没有用到):
record:用指定的话题录制一个 bag 包
info:显示一个 bag 包的基本信息,比如包含哪些话题
play:回放一个或者多个 bag 包
check:检查一个 bag 包在当前的系统中是否可以回放和迁移
compress:压缩一个或多个 bag 包
decompress:解压缩一个或多个 bag 包
reindex:重新索引一个或多个损坏 bag 包

在实际的项目的中,用的最多的就是 record、info 以及 play 功能,先录制想要的话题包,录制完毕检查下包的信息,最后再回放作为算法的输入,下面就详细学习下上面命令的用法。

3.rosbag record使用

record 订阅指定主题并生成一个 bag 文件,其中包含有关这些主题的所有消息,常见用法如下。
录制系统中所有的话题:

rosbag record -a

录制指定的话题 topic_names 数据

rosbag record <topic_names>
比如录制 rosout、tf、cmd_vel 3 个话题,录制的 bag 包以时间命名:
rosbag record rosout tf cmd_vel

指定数据包名称,如指定文件名 20250104.bag:

rosbag record -O 20250104.bag 
注意:-O需要大写

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

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

使用 -h 查看 record 使用方法,很多命令都可以用这个:

rosbag record -h

4.rosbag info使用

rosbag info 显示包文件内容的可读摘要,包括开始和结束时间,主题及其类型,消息计数、频率以及压缩统计信息,常见用法如下:

查看常用命令:

rosbag info xxx.bag

xxx.bag就是你录取时候设置或者系统你默认的包名。(请保证ROS主节点roscore已运行)
在这里插入图片描述读取rosbag包指定 topic 的所有 msg 内容

rostopic echo -b square_cmd_1.bag /turtle1/cmd_vel
rostopic echo -b square_cmd_1.bag /turtle1/pose

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

rqt_bag <bagname>

4.rosbag play使用

rosbag play 读取一个或多个 bag 文件的内容,并以时间同步的方式回放,时间同步基于接收消息的全局时间。回放开始后,会根据相对偏移时间发布消息。

回放单个 bag:

rosbag play record.bag

回放当前目录下所有bag

rosbag play *

回放多个 bag,基于全局时间间隔播放:

rosbag play record1.bag record2.bag

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

rosbag play -s n <bagname>

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

rosbag play -d n <bagname>

开始播放立刻暂停,按空格继续:

rosbag play --pause record.bag

播放指定时间(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 ...

循环播放:

rosbag play -l record.bag

5.rosbag check使用

检查一个 bag 在当前系统中是否可以回放:

rosbag check xxx.bag

6.rosbag compress使用

如果录制的 bag 很大,我们可以压缩它,默认的压缩格式是 bz2:

rosbag compress xxx.bag

你也可以添加 -j 手动指定压缩格式为 bz2:

rosbag compress -j xxx.bag

7.rosbag decompress使用

压缩完后,使用需要解压缩:

rosbag decompress xxx.bag

rosbag截取时间段

rosbag filter input.bag output.bag "t.to_sec() <= 1284703001.00 and t.to_sec() >= 1284703000.00"

rqt_bag显示与绘制
rqt_bag是一个用于记录和管理包文件的应用程序。主要特点:

显示bag信息内容
显示图像消息(可选为时间线上的缩略图)
绘制消息值的可配置时间序列
向ROS发布/记录所选topic的消息
将时间范围内的消息导出到新bag

8.rosbag reindex使用

如果回放遇到问题,提示 reindex 的话,直接执行即可,这个会自动生成一个原 bag 的备份:

rosbag reindex xxx.bag

9.rosbag中读取点云数据

确保linux系统中安装了pcl_ros包:

rospack find pcl_ros

若没有安装则需要运行以下命令:

sudo apt-get install ros-noetic-pcl-ros

启动ros的master节点

roscore

运行以下命令,读取点云数据

rosrun pcl_ros bag_to_pcd bag包 点云话题 保存pcd的路径
#eg: rosrun pcl_ros bag_to_pcd data.bag /1 pcd

点云可视化

pcl_viewer  xxx.pcd

10.解析.bag文件得到带时间戳的.jpg格式图片

通过ros自带命令也可实现这一功能,但通过如下代码能一次性没有遗漏的解析出全部带有时间戳的图片。将下面的.py文件与.bag文件置于同一目录下运行,即可在pic文件夹下得到时间戳的全部XXX张图片。

#coding:utf-8import roslib;  
import rosbag
import rospy
import cv2
from sensor_msgs.msg import Image
from cv_bridge import CvBridge
from cv_bridge import CvBridgeErrorpath='/home/song/Autoware/ros/pic/' #存放图片的位置
class ImageCreator():def __init__(self):self.bridge = CvBridge()with rosbag.Bag('test.bag', 'r') as bag:   #要读取的bag文件;for topic,msg,t in bag.read_messages():if topic == "/image_raw":  #图像的topic;try:cv_image = self.bridge.imgmsg_to_cv2(msg,"bgr8")except CvBridgeError as e:print etimestr = "%.6f" %  msg.header.stamp.to_sec()#%.6f表示小数点后带有6位,可根据精确度需要修改;image_name = timestr+ ".jpg" #图像命名:时间戳.jpgcv2.imwrite(path+image_name, cv_image)  #保存;if __name__ == '__main__':#rospy.init_node(PKG)try:image_creator = ImageCreator()except rospy.ROSInterruptException:pass

11.解析.bag文件得到带时间戳的.pcd点云数据文件

在rosbag数据包所在文件夹下新建pcd文件夹,新建终端输入如下命令可实现pcd文件的解析。

rosrun pcl_ros bag_to_pcd <*.bag> <topic> <output_directory>

示例如下:

rosrun pcl_ros bag_to_pcd test.bag /points_raw ./pcd

/points_raw为查看.bag文件后,你的点云数据的节点名称。


http://www.mrgr.cn/news/82549.html

相关文章:

  • 【Unity3D】UGUI Canvas画布渲染流程
  • 初步了解MindScience里的MindSpore SPONGE框架(启智社区平台安装未成功)
  • pycharm完成git项目的拉取及修改,并保存为自己的项目,以cosyvoice为例
  • spring防止重复点击,两种注解实现(AOP)
  • 蓝桥杯-Python
  • 【从零开始入门unity游戏开发之——C#篇42】C#补充知识——随机数(Random)、多种方法实现string字符串拼接、语句的简写
  • 一文讲清楚HTTP常见的请求头和应用
  • 【算法不挂科】算法期末考试【选择题专项练习】<多单元汇总>
  • C++例程:使用其I/O模拟IIC接扣(2)
  • SAP SD销售模块常见BAPI函数
  • pandas-栗子
  • Arduino UNO 驱动1.8 TFT屏幕显示中文
  • 软件逆向之标志位
  • 公共数据授权运营系统建设手册(附下载)
  • Tableau数据可视化与仪表盘搭建-数据连接
  • C语言:结构体
  • 【Rust自学】10.4. trait Pt.2:trait作为参数和返回类型、trait bound
  • 每天你好20250105(距离春节24天!!!)
  • 「C++笔记」unordered_map:哈希化的无序映射函数(键值对)
  • BerOS 文件系统路径归一化问题及其 Python 实现
  • 软件测试面试题整理
  • Chapter 3 Coding Attention Mechanisms
  • unity学习6:unity的3D项目的基本界面和菜单
  • 基于NLP的医学搜索相关性判断
  • GIT 企业级开发学习 1_基本操作
  • Navicat 17 for Mac 数据库管理软件