警告

您正在阅读的 ROS 2 文档版本已达到 EOL(生命周期结束),不再受官方支持。如果您想了解最新信息,请访问 Jazzy.

记录和播放数据

目标 记录就某个主题发布的数据,以便随时回放和检查。

辅导水平: 初学者

时间 10 分钟

背景介绍

玫瑰2 背包 是一款命令行工具,用于记录系统中主题发布的数据。它可以累积在任意数量主题上传递的数据,并将其保存到数据库中。然后,您就可以重放数据,重现测试和实验结果。记录主题也是分享您的工作成果并允许他人重现的好方法。

先决条件

您应该 玫瑰2 背包 作为 ROS 2 常规设置的一部分进行安装。

如果你是从 Linux 上的 Debians 安装的,而你的系统无法识别该命令,请像这样安装:

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

本教程将讨论前面教程中涉及的概念,如节点和 主题.它还使用 海龟模拟软件包.

与往常一样,别忘了在 您打开的每个新终端.

任务

1 设置

您将把键盘输入记录在 海龟 系统进行保存和重放。 /turtlesim/teleop_turtle 节点。

打开一个新终端并运行

ros2 运行 turtlesim turtlesim_node

打开另一个终端并运行:

ros2 run turtlesim turtle_teleop_key

我们还可以新建一个目录来存储已保存的录音,以备不时之需:

mkdir bag_files
cd bag_files

2 选择主题

玫瑰2 背包 只能记录已发布主题的数据。要查看系统主题列表,请打开一个新终端并运行命令:

ros2 主题列表

哪个会回来?

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

在主题教程中,您了解到 /turtle_teleop 节点在 /turtle1/cmd_vel 使乌龟在乌龟模拟器中移动的主题。

查看以下数据 /turtle1/cmd_vel 发布,运行该命令:

ros2 topic echo /turtle1/cmd_vel

一开始什么都不会显示,因为远程操作没有发布数据。返回运行远程操作的终端,选择它,使其处于激活状态。使用方向键移动乌龟,你就会看到终端上运行的数据正在发布。 玫瑰2 主题 回响.

线性
  x: 2.0
  y:0.0
  z: 0.0

  x: 0.0
  y:0.0
  z: 0.0
  ---

3 ROS2 袋记录

要记录发布到主题的数据,请使用命令语法:

ros2 bag record <topic_name>;

在所选主题上运行此命令之前,请打开一个新终端,进入 文件袋 目录,因为 rosbag 文件会保存在运行它的目录中。

运行该命令:

ros2 bag record /turtle1/cmd_vel

您将在终端中看到以下信息(日期和时间会有所不同):

[INFO] [rosbag2_storage]:已打开数据库 'rosbag2_2019_10_11-05_18_45'。
[INFO] [rosbag2_transport]:监听主题...
[INFO] [rosbag2_transport]:已订阅主题 '/turtle1/cmd_vel';
[INFO] [rosbag2_transport]:所有请求的主题都已订阅。停止发现...

现在 玫瑰2 背包 记录在 /turtle1/cmd_vel 主题。返回远程操作终端,再次移动乌龟。移动的幅度并不重要,但要尽量做出可识别的模式,以便稍后重放数据时查看。

./././_images/record.png

新闻 Ctrl+C 停止录制。

数据将累积到一个包文件中,文件名格式为 rosbag2_year_month_day-hour_minute_second

3.1 记录多个主题

您还可以录制多个主题,以及更改文件名 玫瑰2 背包 保存到

运行以下命令

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

"(《世界人权宣言》) -o 选项可以为 bag 文件选择一个唯一的名称。本例中使用以下字符串 子集是文件名。

要同时记录多个主题,只需列出每个主题,中间用空格隔开。

您将看到以下信息,确认正在录制两个主题。

[INFO] [rosbag2_storage]:已打开数据库 'subset'。
[INFO] [rosbag2_transport]:监听主题...
[INFO] [rosbag2_transport]:已订阅主题 '/turtle1/cmd_vel';
[INFO] [rosbag2_transport]:已订阅主题 '/turtle1/pose';
[INFO] [rosbag2_transport]:所有请求的主题都已订阅。停止发现...

您可以移动乌龟,然后按 Ctrl+C 完成后

备注

您还可以在命令中添加另一个选项、 -a记录系统中的所有主题。但是,这可能会导致循环依赖,使系统崩溃。最好选择您需要的主题子集。

4 ros2 袋信息

运行 "查看 "可以查看录音的详细信息:

ros2 bag info <bag_file_name>;

子集 bag file 将返回该文件的信息列表:

文件: subset.db3
包大小: 228.5 KiB
存储 ID:sqlite3
持续时间48.47s
开始2019 年 10 月 11 日 06:09:09.12 (1570799349.12)
结束 2019 年 10 月 11 日 06:09:57.60 (1570799397.60)
留言3013
主题信息:主题:/turtle1/cmd_vel | Type: geometry_msgs/msg/Twist | Count:9 | 序列化格式:cdr
                 Topic:/turtle1/pose | Type: turtlesim/msg/Pose | Count:3004 | 序列化格式:cdr

要查看单条信息,必须打开数据库(这里是 sqlite3)进行检查,这超出了 ROS 2 的范围。

5 ROS2 背包游戏

在重新播放袋文件之前,输入 Ctrl+C 在运行远程操作的终端中执行。然后确保 "turtlesim "窗口可见,这样就能看到包文件的运行情况。

输入命令:

ROS2 袋戏子集

终端将返回信息:

[INFO] [rosbag2_storage]:已打开数据库 'subset'。

您的乌龟将按照您在录制时输入的相同路径运行(尽管不是 100% 精确;turtlesim 对系统时间上的微小变化很敏感)。

./././_images/playback.png

因为 子集 文件记录了 /turtle1/pose 主题 玫瑰2 背包 游戏 只要你还在运行 turtlesim,即使你没有移动,命令也不会退出。

这是因为只要 /turtlesim 节点处于活动状态时,它会在 /turtle1/pose 定期专题。您可能已经注意到 玫瑰2 背包 信息 上述示例结果表明 /turtle1/cmd_vel 主题的 计数 信息只有 9 个;这是我们在录音时按箭头键的次数。

注意到 /turtle1/pose 有一个 计数 值超过 3000;在我们记录期间,有关该主题的数据已发布 3000 次。

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

ros2 topic echo /turtle1/pose

摘要

您可以在 ROS 2 系统中使用 玫瑰2 背包 命令。无论您是与他人分享自己的作品,还是反省自己的实验,它都是一个值得了解的好工具。

下一步工作

您已完成 "初学者:CLI 工具 "教程!下一步是学习 "初学者:客户端库 "教程:客户端库 "教程,首先是 创建工作区.