记录和播放数据
目标 记录就某个主题和服务发布的数据,以便随时重放和检查。
辅导水平: 初学者
时间 15 分钟
背景介绍
玫瑰2 背包
是一个命令行工具,用于记录在 ROS 2 系统中的主题和服务上发布的数据。它可以累积在任意数量的主题和服务上传递的数据,然后将其保存到数据库中。然后你就可以重放这些数据,重现测试和实验结果。记录主题和服务也是分享您的工作成果并允许他人重现的好方法。
先决条件
您应该 玫瑰2 背包
作为 ROS 2 常规设置的一部分进行安装。
如果需要安装 ROS 2,请参见 安装说明.
本教程将讨论之前教程中涉及的概念,例如 结点, 主题 和 服务.它还使用 海龟模拟软件包 和 服务自省演示.
与往常一样,别忘了在 您打开的每个新终端.
管理主题数据
1 设置
您将把键盘输入记录在 海龟
系统进行保存和重放。 /turtlesim
和 /teleop_turtle
节点。
打开一个新终端并运行
ros2 运行 turtlesim turtlesim_node
打开另一个终端并运行:
ros2 run turtlesim turtle_teleop_key
我们还可以新建一个目录来存储已保存的录音,以备不时之需:
mkdir bag_files
cd bag_files
mkdir bag_files
cd bag_files
md 文件袋
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 记录主题
3.1 记录单一主题
要记录发布到主题的数据,请使用命令语法:
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
.该目录将包含一个 metadata.yaml
以及记录格式的袋文件。
3.2 记录多个主题
您还可以录制多个主题,以及更改文件名 玫瑰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 bag info <bag_file_name>;
在 子集
bag file 将返回该文件的信息列表:
ros2 袋信息子集
文件: subset.mcap
包大小: 228.5 KiB
存储 ID:mcap
持续时间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
5 播放主题数据
在重新播放袋文件之前,输入 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 hz /turtle1/pose
管理服务数据
1 设置
您将记录以下时间段的服务数据 反省客户端
和 反省服务
然后再显示和重放相同的数据。记录服务客户端和服务器之间的服务数据、 服务 自省
必须在节点上启用。
开始吧 反省客户端
和 反省服务
节点,并启用 服务 自省
.您可以查看以下内容的详细信息 服务自省演示.
打开一个新终端,运行 反省服务
使 服务 自省
:
ros2 run demo_nodes_cpp introspection_service --ros-args -p service_configure_introspection:=contents
打开另一个终端,运行 反省客户端
使 服务 自省
:
ros2 run demo_nodes_cpp introspection_client --ros-args -p client_configure_introspection:=contents
2 检查服务可用性
玫瑰2 背包
只能记录可用服务的数据。要查看系统服务列表,请打开一个新终端并运行命令:
ros2 服务列表
哪个会回来?
/add_twoo_ints
/introspection_client/describe_parameters
/introspection_client/get_parameter_types
/introspection_client/get_parameters
/introspection_client/get_type_description
/introspection_client/list_parameters
/introspection_client/set_parameters
/introspection_client/set_parameters_atomically
/introspection_service/describe_parameters
/introspection_service/get_parameter_types
/introspection_service/get_parameters
/introspection_service/get_type_description
/introspection_service/list_parameters
/introspection_service/set_parameters
/introspection_service/set_parameters_atomically
检查是否 服务 自省
已在客户端和服务上启用,请运行该命令:
ros2 service echo --flow-style /add_twoo_ints
您应该会看到如下的服务通信:
信息
事件类型:REQUEST_SENT
盖章:
sec: 1713995389
Nanosec: 386809259
client_gid: [1, 15, 96, 219, 162, 1, 108, 201, 0, 0, 0, 0, 0, 0, 21, 3]
序列号: 133
请求:[{a:2,b:3}]
回应:[]
---
3 记录服务
要记录服务数据,支持以下选项。服务数据可与主题同时记录。
记录特定服务:
ros2 bag record --service <service_names>;
记录所有服务:
ros2 bag record --all-services
运行该命令:
ros2 bag record --service /add_twoo_ints
您将在终端中看到以下信息(日期和时间会有所不同):
[INFO] [1713995957.643573503] [rosbag2_recorder]:按空格键暂停/继续
[INFO] [1713995957.662067587] [rosbag2_recorder]:事件发布线程:开始
[INFO] [1713995957.662067614] [rosbag2_recorder]:监听主题...
[INFO] [1713995957.666048323] [rosbag2_recorder]:订阅主题 '/add_two_ints/_service_event';
[INFO] [1713995957.666092458] [rosbag2_recorder]:记录...
现在 玫瑰2 背包
记录在 /add_twoo_ints
服务。要停止记录,请输入 Ctrl+C
在终端中。
数据将累积到一个新的数据包目录中,其名称格式为 rosbag2_year_month_day-hour_minute_second
.该目录将包含一个 metadata.yaml
以及记录格式的袋文件。
4 检查服务数据
运行 "查看 "可以查看录音的详细信息:
ros2 bag info <bag_file_name>;
运行此命令将返回文件的信息列表:
Files: rosbag2_2024_04_24-14_59_17_0.mcap
袋大小: 15.1 KiB
存储 ID:mcap
ROS 发行版:滚动
持续时间:9.211 秒
开始:Apr 24 2024 14:59:17.676 (1713995957.676)
结束:Apr 24 2024 14:59:26.888 (1713995966.888)
消息0
主题信息:
服务:1
服务信息:服务:/add_twoo_ints | 类型:example_interfaces/srv/AddTwoInts | 事件计数:78 | 序列化格式:cdr
5 播放服务数据
在重新播放袋文件之前,输入 Ctrl+C
的终端 反省客户端
正在运行。当 反省客户端
停止运行、 反省服务
也会停止打印结果,因为没有输入请求。
从数据包文件重放服务数据将开始向以下设备发送请求 反省服务
.
输入命令:
ros2 bag play --publish-service-requests <bag_file_name>;
终端将返回信息:
[INFO] [1713997477.870856190] [rosbag2_player]:设置速率为 1
[INFO] [1713997477.877417477] [rosbag2_player]:添加键盘回调。
[INFO] [1713997477.877442404] [rosbag2_player]:按空格键暂停/继续
[INFO] [1713997477.877447855] [rosbag2_player]:按 CURSOR_RIGHT 键播放下一条信息
[INFO] [1713997477.877452655] [rosbag2_player]:按CURSOR_UP键增加10%的速率
[INFO] [1713997477.877456954] [rosbag2_player]:按CURSOR_DOWN键,下降率为10%。
[INFO] [1713997477.877573647] [rosbag2_player]:播放至时间戳:-1
您的 反省服务
终端将再次开始打印以下服务信息:
[INFO] [1713997478.090466075] [introspection_service]:收到请求
a: 2 b: 3
这是因为 玫瑰2 背包 游戏
将包文件中的服务请求数据发送到 /add_twoo_ints
服务。
我们还可以将服务交流内省为 玫瑰2 背包 游戏
正在回放,以验证 反省服务
.
在 玫瑰2 背包 游戏
看到 反省服务
:
ros2 service echo --flow-style /add_twoo_ints
您可从包文件中看到服务请求,从 反省服务
.
信息
事件类型:request_received
盖章:
sec: 1713998176
Nanosec: 372700698
client_gid: [1, 15, 96, 219, 80, 2, 158, 123, 0, 0, 0, 0, 0, 0, 20, 4]
sequence_number: 1
请求:[{a:2,b:3}]
回应:[]
---
信息
事件类型:事件类型: RESPONSE_SENT
盖章:
sec: 1713998176
Nanosec: 373016882
client_gid: [1, 15, 96, 219, 80, 2, 158, 123, 0, 0, 0, 0, 0, 0, 20, 4]
sequence_number: 1
要求:[]
回复:{总和:5}]
摘要
您可以在 ROS 2 系统中使用 玫瑰2 背包
命令。无论是与他人分享自己的作品,还是反省自己的实验,它都是一个值得了解的好工具。
下一步工作
您已完成 "初学者:CLI 工具 "教程!下一步是学习 "初学者:客户端库 "教程:客户端库 "教程,首先是 创建工作区.