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

举报
MAVER1CK 发表于 2023/03/18 20:10:23 2023/03/18
【摘要】 @[toc]参考官方文档:Recording and playing back data ros2 bag 命令简介ros2 bag 是一个命令行工具,用于记录在你的系统中的话题上发布的数据。它积累了在任何数量的话题上传递的数据,并将其保存在一个数据库中。然后你可以重放这些数据来重现你的测试和实验的结果。记录主题也是分享你的工作并允许他人重现的一个好方法。 1. 准备环境安装软件包:sudo...

@[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
【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。