警告
您正在阅读的 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
主题。返回远程操作终端,再次移动乌龟。移动的幅度并不重要,但要尽量做出可识别的模式,以便稍后重放数据时查看。

新闻 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 对系统时间上的微小变化很敏感)。

因为 子集
文件记录了 /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 工具 "教程!下一步是学习 "初学者:客户端库 "教程:客户端库 "教程,首先是 创建工作区.