Recording and playing back data:录制和播放数据

简介: Recording and playing back data:录制和播放数据

@[toc]
参考官方文档:Recording and playing back data

ros2 bag 命令简介

ros2 bag 是一个命令行工具,用于记录在你的系统中的话题上发布的数据。它积累了在任何数量的话题上传递的数据,并将其保存在一个数据库中。然后你可以重放这些数据来重现你的测试和实验的结果。记录主题也是分享你的工作并允许他人重现的一个好方法。

1. 准备环境

安装软件包:

sudo apt-get install ros-humble-ros2bag \
                     ros-humble-rosbag2-storage-default-plugins

打开两个终端,分别运行:

ros2 run turtlesim turtlesim_node
ros2 run turtlesim turtle_teleop_key

新建一个文件夹用于保存录制的数据:

mkdir bag_files && cd bag_files

2. 选择一个话题

ros2 bag 只能记录已发布的话题中的数据。要查看你的系统的话题列表,请打开一个新的终端并运行命令:

ros2 topic list

返回结果如下:

/parameter_events
/rosout
/turtle1/cmd_vel
/turtle1/color_sensor
/turtle1/pose

在前面的教程中,已经知道 /turtle_teleop 节点在 /turtle1/cmd_vel 话题上发布命令,使乌龟在turtlesim中移动。

要查看 /turtle1/cmd_vel 正在发布的数据,运行命令:

ros2 topic echo /turtle1/cmd_vel

一开始不会有什么显示,因为节点没有发布数据。回到你运行teleop的终端,选择它,使它处于激活状态。使用方向键移动乌龟,你会看到运行ros2 topic echo的终端上正在发布数据:

linear:
  x: 2.0
  y: 0.0
  z: 0.0
angular:
  x: 0.0
  y: 0.0
  z: 0.0
  ---

3. ros2 bag record 命令

要记录发布到一个话题的数据,使用命令:

ros2 bag record <topic_name>

在你选择的话题上运行这个命令之前,打开一个新的终端,并进入你先前创建的bag_files目录,因为rosbag文件将保存在你运行它的目录中。

运行命令:

ros2 bag record /turtle1/cmd_vel

你会在终端看到以下信息(日期和时间会有所不同):
image.png

现在ros2包正在记录/turtle1/cmd_vel话题上发布的数据。回到teleop终端,再次移动乌龟。

移动几次之后按 Ctrl+C 停止记录,数据将被记录到一个 bag 文件中,名称命名模式为 rosbag2_year_month_day-hour_minute_second 。

image.png

3.1 记录多个话题

你还可以记录多个话题,以及改变ros2 bag保存的文件的名称。

使用以下命令:

ros2 bag record -o subset /turtle1/cmd_vel /turtle1/pose

-o 选项允许你为你的bag文件选择一个独特的名字。

要想一次记录一个以上的话题,只需将每个话题用空格隔开即可。

你会看到以下信息,确认两个话题都在录制中:
image.png
还有一个选项可以添加到命令中,即 -a ,它可以记录你系统中的所有话题。

4. ros2 bag info 命令

你可以通过运行以下命令查看关于录制的细节:

ros2 bag info <bag_file_name>

对 subset 文件运行此命令将返回文件的信息列表:

ros2 bag info subset

image.png
要查看单个信息,你必须打开数据库,在这种情况下是sqlite3,来检查它,这超出了ROS 2的范围。

5. ros2 bag play 命令

在重放bag文件之前,在teleop运行的终端上输入Ctrl+C。然后确保你的turtlesim窗口是可见的,这样你就可以看到bag文件的运行情况。

输入命令:

ros2 bag play subset

你的乌龟将遵循你在录制时输入的路径(虽然不是100%准确;turtlesim对系统时间的微小变化很敏感)。

因为 subset 文件记录了 /turtle1/pose 主题,所以只要你有turtlesim运行,ros2 bag play命令就不会退出,即使你没有移动。

这是因为只要/turtlesim节点处于活动状态,它就会定期在/turtle1/pose主题上发布数据。你可能已经注意到在上面的ros2 bag info例子结果中,/turtle1/cmd_vel主题的Count信息有56个;这就是我们在录制时按下方向键的次数。

请注意,/turtle1/pose的Count值有12436;在我们录制的时候,该话题的数据被发布了12436次。

为了了解位置数据的发布频率,你可以运行命令:

ros2 topic hz /turtle1/pose
目录
相关文章
|
小程序
小程序 video 组件播放本地视频(黑屏无法播放,报错:MEDIA_ERR_SRC_NOT_SUPPORTED)
小程序 video 组件播放本地视频(黑屏无法播放,报错:MEDIA_ERR_SRC_NOT_SUPPORTED)
664 0
|
2月前
video和audio的事件
【10月更文挑战第5天】video和audio的事件。
37 4
|
3月前
|
Python
音乐播放 pygame mp3play 和获取音乐信息的 库from mutagen.mp3 import MP3
音乐播放 pygame mp3play 和获取音乐信息的 库from mutagen.mp3 import MP3
|
7月前
|
JavaScript 前端开发
video-03-video事件汇总
video-03-video事件汇总
122 1
|
7月前
|
移动开发 JavaScript Android开发
H5 video 自动播放(autoplay)不生效解决方案
H5 video 自动播放(autoplay)不生效解决方案
745 0
|
小程序 API
小程序背景音乐及音频播放demo(copy直接使用~)
小程序背景音乐及音频播放demo(copy直接使用~)
303 0
小程序背景音乐及音频播放demo(copy直接使用~)
av_seek_frame实战--跳转到文件指定时间后开始推流或写入新文件
av_seek_frame实战--跳转到文件指定时间后开始推流或写入新文件
149 0
av_seek_frame实战--跳转到文件指定时间后开始推流或写入新文件