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
AI 代码解读

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

ros2 run turtlesim turtlesim_node
AI 代码解读
ros2 run turtlesim turtle_teleop_key
AI 代码解读

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

mkdir bag_files && cd bag_files
AI 代码解读

2. 选择一个话题

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

ros2 topic list
AI 代码解读

返回结果如下:

/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
AI 代码解读

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

linear:
  x: 2.0
  y: 0.0
  z: 0.0
angular:
  x: 0.0
  y: 0.0
  z: 0.0
  ---
AI 代码解读

3. ros2 bag record 命令

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

ros2 bag record <topic_name>
AI 代码解读

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

运行命令:

ros2 bag record /turtle1/cmd_vel
AI 代码解读

你会在终端看到以下信息(日期和时间会有所不同):
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
AI 代码解读

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

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

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

4. ros2 bag info 命令

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

ros2 bag info <bag_file_name>
AI 代码解读

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

ros2 bag info subset
AI 代码解读

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

5. ros2 bag play 命令

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

输入命令:

ros2 bag play subset
AI 代码解读

你的乌龟将遵循你在录制时输入的路径(虽然不是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
AI 代码解读
目录
相关文章
小程序 video 组件播放本地视频(黑屏无法播放,报错:MEDIA_ERR_SRC_NOT_SUPPORTED)
小程序 video 组件播放本地视频(黑屏无法播放,报错:MEDIA_ERR_SRC_NOT_SUPPORTED)
856 0
audio的自动播放报错解决
使用audio标签时,当前页面没有进行交互时,比如用户刷新了页面后,play()调用就会报错,要如何解决?
H5 video 自动播放(autoplay)不生效解决方案
H5 video 自动播放(autoplay)不生效解决方案
852 0
小程序背景音乐及音频播放demo(copy直接使用~)
小程序背景音乐及音频播放demo(copy直接使用~)
368 0
小程序背景音乐及音频播放demo(copy直接使用~)
av_seek_frame实战--跳转到文件指定时间后开始推流或写入新文件
av_seek_frame实战--跳转到文件指定时间后开始推流或写入新文件
175 0
av_seek_frame实战--跳转到文件指定时间后开始推流或写入新文件
使用AudioRecord和AudioTrack来录制和播放音频
使用AudioRecord和AudioTrack来录制和播放音频
717 0
video_replay如何捕获和回放WebRTC视频流
视频编码问题常常是最难解决的问题之一,video_replay工具可以帮助分析定位故障。
2284 0