【ROS】rosbag

在 ROS 系统中,可以使用 bag 文件来保存和恢复系统的运行状态,比如录制雷达和相机话题的 bag 包,然后回放用来进行联合外参标定。
这里记录下我学习官方的 rosbag 教程的笔记:ROS rosbag

一、常用几个操作

1 录包

# 录制所有话题:
rosbag record -a

# 录制指定话题,设置 bag 包名:
rosbag record -O bag_name.bag /topic1_name /topic2_name /xxx

# 有时候我录制包不设置名称,默认按照录制结束时间命名:
rosbag record /topic1_name /topic2_name /xxx

2 回放

# 我常用的是以暂停的方式启动,防止跑掉数据:
rosbag play --pause record.bag

# 你也可以直接回放:
rosbag play record.bag

# 我建图过程中有时会设置以 0.5 倍速回放,也就是以录制频率的一半回放:
rosbag play -r 0.5 record.bag

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

3 修复

之前在我们小车的 Intel NUC 上录包拷到台式机上回放会报错,提示需要 reindex,执行一下即可,不过数据好像会少一些:

rosbag reindex xxx.bag

二、完整的rosbag用法

1 rosbag 基本作用

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

rosbag 目前常用的命令如下(fixfilter 暂时没有用到):

  • record:用指定的话题录制一个 bag 包
  • info:显示一个 bag 包的基本信息,比如包含哪些话题
  • play:回放一个或者多个bag包
  • check:检查一个 bag 包在当前的系统中是否可以回放和迁移
  • compress:压缩一个或多个 bag 包
  • decompress:解压缩一个或多个 bag 包
  • reindex:重新索引一个或多个损坏 bag 包

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

2 rosbag record

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

# 用指定的话题 topic_names 来录制 bag 包:
rosbag record <topic_names>

# 比如录制 rosout、tf、cmd_vel 3 个话题,录制的 bag 包以时间命名:
rosbag recoed rosout tf cmd_vel

# 录制完保存 bag 包名称为 session1 + 时间戳.bag 格式:
rosbag record -o session1 /chatter

# 录制完保存为指定文件名 session2_090210.bag:
rosbag record -o session2_090210.bag /chatter

# 录制系统中所有的话题:
rosbag record -a

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

3 rosbag info

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

显示一个 bag 包的信息:

rosbag info name.bag
$ rosbag info foo.bag
path:        foo.bag
version:     2.0
duration:    1.2s
start:       Jun 17 2010 14:24:58.83 (1276809898.83)
end:         Jun 17 2010 14:25:00.01 (1276809900.01)
size:        14.2 KB
messages:    119
compression: none [1/1 chunks]
types:       geometry_msgs/Point [4a842b65f413084dc2b10fb484ea7f17]
topics:      /points   119 msgs @ 100.0 Hz : geometry_msgs/Point
# 查看常用命令:
rosbag info -h

# 输出 YAML 格式的信息:
rosbag info -y name.bag

# 输出 bag 中指定域的信息,比如只显示持续时间:
rosbag info -y -k duration name.bag

4 rosbag play

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

如果同时回放两个单独的 bag 文件,则根据时间戳的间隔来播放。比如我先录制一个 bag1 包,等待一个小时,然后录制另一个 bag2 包,那我在一起回放 bag1 和 bag2 时,在回放的中间会有 1 个小时的停滞期,也就是先回放 bag1,然后需要等待 1 个小时才能回放 bag2。

# 在回放过程中按空格暂停,常见用法如下,回放单个 bag:
rosbag play record.bag

# 回放多个 bag,基于全局时间间隔播放:
rosbag play record1.bag record2.bag

# 开始播放立刻暂停,按空格继续:
rosbag play --pause record.bag

# 以录制的一半频率回放:
rosbag play -r 0.5 --pause record.bag

# 指定回放频率,默认 100HZ:
rosbag play --clock --hz=200 record.bag

# 循环播放:
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

# 也可以使用 LZ4 来压缩数据:
rosbag compress --lz4 xxx.bag

7 rosbag decompress

# 压缩完后,使用需要解压缩:
rosbag decompress xxx.bag

8 rosbag reindex

# 如果回放遇到问题,提示 reindex 的话,直接执行即可,这个会自动生成一个原 bag 的备份:
rosbag reindex xxx.bag
  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: rosbagROS中一个常用的记录和回放ROS消息的工具。通过rosbag,我们可以轻松地将ROS系统中的消息记录到一个文件,然后在稍后的时间回放这些消息。这对于开发和测试ROS系统非常有用。 在Python代码中使用rosbag库,需要使用"import rosbag"来导入这个库。通过该库,我们可以使用rosbag的API来读取、写入和回放ROS消息。可以使用rospy来与ROS系统通信,也可以使用其它的ROS库。 使用rosbag记录ROS消息非常简单。我们只需要调用rosbag API中的一些函数,如:rosbag.Bag()来创建一个新的rosbag文件,rosbag.write()来写入消息,rosbag.close()来关闭rosbag文件。同样,使用rosbag回放ROS消息也很容易。我们只需要使用rosbag.Bag()读取rosbag文件,然后使用for循环遍历所有的消息并进行回放即可。 总之,import rosbag是Python代码中使用rosbag库的必要步骤,通过这个库,我们可以方便地记录、读取和回放ROS消息。 ### 回答2: import rosbag是Robot Operating System(ROS)中的一个Python库,用于读取和写入Bag文件。Bag文件是ROS中一种动态数据格式,通常用于记录ROS话题(topic)的数据。Bag文件可以用来回放ROS节点的数据,并且可以用于离线数据分析、数据处理和可视化。 在ROS中,许多节点会发布(publish)和订阅(subscribe)话题。这些话题可以包含机器人传感器数据、机器人控制命令、机器人状态信息等。Bag文件捕捉这些话题的数据并将其保存在文件中。拥有Bag文件可以使得用户在不连接机器人和传感器的情况下分析数据,从而帮助用户更好地设计、开发和测试机器人应用程序。 在Python代码中,首先需要导入rosbag库。这个库包含了读取Bag文件和写入Bag文件的API。 导入之后,使用rosbag.Bag()函数打开Bag文件,并可以通过调用read_messages()函数来读取消息。使用Bag()函数时需要传递Bag文件名和读写权限参数。如果只需要读取Bag文件,则权限参数为'r',如果要写入Bag文件,则权限参数为'w'。 常用函数: rosbag.Bag()函数:打开Bag文件。 read_messages()函数:从Bag文件中读取消息。 write()函数:将消息写入Bag文件中。 close()函数:关闭Bag文件。 使用import rosbag库可以在Python中方便地处理Bag文件,实现数据的读取和写入。随着ROS的日益普及和机器人应用程序的广泛开发,使用Bag文件成为了ROS开发者们不可或缺的工具。 ### 回答3: rosbagROS(Robot Operating System)下的一个数据记录工具,可以在ROS机器人系统中对话题话题和服务信息进行记录,以便后续的回放和分析。 在Python中使用rosbag记录和回放数据时,需要通过import rosbag导入rosbag库。这个库在ROS中是一个标准的库,可以通过sudo apt-get install ros-<ros-version>-rosbag的命令进行安装。 在安装完成后,我们就可以在Python代码中使用rosbag库来创建rosbag文件,写入和读取ROS数据。其中常用的函数包括: 1. Bag() - 创建一个rosbag文件。 2. write() - 向rosbag文件中写入消息。 3. read_messages() - 从rosbag文件中读取消息,可以指定时间范围或话题名称。 4. get_message_count() - 获取rosbag文件中的消息数量。 5. close() - 关闭rosbag文件。 使用rosbag记录和回放数据可以方便的进行测试和调试,尤其是对于移动机器人等实际应用场景下的数据处理和分析非常有用。此外,rosbag还可以与其他ROS工具和库进行配合使用,如rviz等,更有助于对数据进行可视化呈现和实时监测。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

宇光_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值