乐于分享
好东西不私藏

机器人系统——ROS2文档—记录和回放数据

机器人系统——ROS2文档—记录和回放数据
目标:记录话题、服务和动作上发布的数据,以便随时回放和检查。教程级别:入门级时间: 20 分钟

目录

·背景

·前置条件

·管理话题数据

o环境准备

o选择话题

o记录话题

o检查话题数据

o回放话题数据

·管理服务数据

o环境准备

o检查服务可用性

o记录服务

o检查服务数据

o回放服务数据

·管理动作数据

o环境准备

o检查动作可用性

o记录动作

o检查动作数据

o回放动作数据

·总结

·后续步骤

·相关资料

本教程主要包括以下命令:

$ ros2 run turtlesim turtlesim_node
$ ros2 run turtlesim turtle_teleop_key
mkdirbag_files
$ cd bag_files
$ ros2 topic list
$ ros2 topic echo /turtle1/cmd_vel
$ ros2 bag record --topics <topic_name>
$ ros2 bag record --topics /turtle1/cmd_vel
$ ros2 bag record -o subset --topics /turtle1/cmd_vel /turtle1/pose
$ ros2 bag record -o subset_split -d 5 --topics /turtle1/cmd_vel /turtle1/pose
$ ros2 bag info subset
$ ros2 bag play subset
$ ros2 topic hz /turtle1/pose
$ ros2 run demo_nodes_cppintrospection_service --ros-args -p service_configure_introspection:=contents
$ ros2 run demo_nodes_cppintrospection_client --ros-args -p client_configure_introspection:=contents
$ ros2 bag record --all-services
$ ros2 bag record -o subset_cmd_vel --topics /turtle1/cmd_vel
$ ros2 action echo --flow-style /fibonacci

背景

ros2 bag是一个命令行工具,用于记录 ROS 2 系统中话题、服务和动作上发布的数据。它积累在任何数量的话题、服务和动作上传递的数据,然后将它们保存在数据库中。然后您可以回放这些数据以重现测试和实验的结果。记录话题、服务和动作也是分享您的工作并允许他人重现的好方法。

前置条件

您应该已经将ros2 bag作为常规 ROS 2 设置的一部分安装。如果您需要安装 ROS 2,请参阅安装说明

本教程涉及之前教程中介绍的概念,如节点话题服务动作。它还使用turtlesim包、服务内省演示动作内省演示

和往常一样,别忘了在打开的每个新终端中加载 ROS 2 环境。

管理话题数据

环境准备

您将记录turtlesim系统中的键盘输入,以便稍后保存和回放,因此首先启动/turtlesim/teleop_turtle节点。

打开一个新终端并运行:

$ ros2 run turtlesim turtlesim_node

打开另一个终端并运行:

$ ros2 run turtlesim turtle_teleop_key

作为良好实践,让我们创建一个新目录来存储保存的记录:

mkdirbag_files
$ cd bag_files

选择话题

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

起初不会显示任何内容,因为遥控器没有发布数据。返回到运行遥控器的终端并选中它以使其处于活动状态。使用箭头键移动乌龟,您将在运行ros2 topic echo的终端上看到正在发布的数据。

linear:

x:2.0

y:0.0

z:0.0

angular:

x:0.0

y:0.0

z:0.0

---

记录话题

3.1 记录单个话题

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

$ ros2 bag record --topics <topic_name>

在所选话题上运行此命令之前,打开一个新终端并移动到您之前创建的bag_files目录,因为rosbag文件将保存在您运行它的目录中。

运行命令:

$ ros2 bag record --topics /turtle1/cmd_vel

[INFO] [rosbag2_storage]: Opened database 'rosbag2_2019_10_11-05_18_45'.

[INFO] [rosbag2_transport]: Listening for topics...

[INFO] [rosbag2_transport]: Subscribed to topic '/turtle1/cmd_vel'

[INFO] [rosbag2_transport]: All requested topics are subscribed. Stopping discovery...

现在ros2 bag正在记录发布到/turtle1/cmd_vel话题的数据。返回到遥控终端并再次移动乌龟。移动的内容不重要,但尝试做一个可识别的图案,以便稍后回放数据时查看。

Ctrl-C停止记录。

数据将积累在一个新的 bag 目录中,目录名称模式为rosbag2___-__。此目录将包含一个metadata.yaml以及记录格式的 bag 文件。

3.2 记录多个话题

您还可以记录多个话题,并更改ros2 bag保存的 bag 目录名称。

运行以下命令:

$ ros2 bag record -o subset --topics /turtle1/cmd_vel /turtle1/pose
[INFO] [rosbag2_storage]: Opened database 'subset'.

[INFO] [rosbag2_transport]: Listening for topics...

[INFO] [rosbag2_transport]: Subscribed to topic '/turtle1/cmd_vel'

[INFO] [rosbag2_transport]: Subscribed to topic '/turtle1/pose'

[INFO] [rosbag2_transport]: All requested topics are subscribed. Stopping discovery...

-o选项允许您为 bag 目录选择一个唯一的名称。后面的字符串(本例中为subset)是 bag 目录名称。

要同时记录多个话题,只需在--topics后面用空格分隔每个话题。在这种情况下,上面的命令输出确认了两个话题都被记录。

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

注意:您还可以在命令中添加另一个选项-a,它会记录系统上的所有话题。

3.3 将记录分割成多个文件

您还可以根据记录持续时间或文件大小将记录分割成多个文件。-d <max_bag_duration>确保每个文件在开始写入新文件之前持续时间不超过<max_bag_duration>秒,或者-b <max_bag_size>确保每个文件大小不超过<max_bag_size>字节。这可以防止文件过大难以处理,并在记录操作在某个时间点损坏时保护数据不全部丢失。

运行以下命令至少 15 秒,以便写入三个 5 秒的 bag 文件:

$ ros2 bag record -o subset_split -d 5 --topics /turtle1/cmd_vel /turtle1/pose
[INFO] [rosbag2_recorder]: Press SPACE for pausing/resuming

[INFO] [rosbag2_recorder]: Listening for topics...

[INFO] [rosbag2_recorder]: Event publisher thread: Starting

[INFO] [rosbag2_recorder]: Recording...

[INFO] [rosbag2_recorder]: Subscribed to topic '/turtle1/cmd_vel'

[INFO] [rosbag2_recorder]: Subscribed to topic '/turtle1/pose'

[INFO] [rosbag2_recorder]: All requested topics are subscribed. Stopping discovery...

[INFO] [rosbag2_cpp]: Writing remaining messages from cache to the bag. It may take a while

[INFO] [rosbag2_cpp]: Writing remaining messages from cache to the bag. It may take a while

[INFO] [rosbag2_cpp]: Writing remaining messages from cache to the bag. It may take a while

完成后按Ctrl-C。您应该找到一个subset_split目录,其中包含这些文件:0_subset_split_YYYY_MM_DD-HH_MM_SS.mcap1_subset_split_YYYY_MM_DD-HH_MM_SS.mcap,等等。

检查话题数据

您可以通过运行以下命令查看记录的详细信息:

$ ros2 bag info <bag_name>

subset bag 记录上运行此命令将返回一个信息列表:

$ ros2 bag info subset
Files: subset_0.mcap

Bag size: 228.5 KiB

Storage id: mcap

ROS Distro: lyrical

Duration: 48.47s

Start: Oct 11 2019 06:09:09.12 (1570799349.12)

EndOct 11 2019 06:09:57.60 (1570799397.60)

Messages: 3013

Topic information: Topic: /turtle1/cmd_vel | Type: geometry_msgs/msg/Twist | Count: 9 | Serialization Format: cdr

Topic:/turtle1/pose | Type: turtlesim_msgs/msg/Pose | Count: 3004 | Serialization Format: cdr

Services: 0

Service information:

Actions: 0

Action information:

或者,您也可以在单个文件上调用ros2 bag info,例如subset_split/0_subset_split_YYYY_MM_DD-HH_MM_SS.mcap,它将仅显示该部分记录的信息;在本例中为前 5 秒。

回放话题数据

5.1 回放单个 bag

在回放 bag 之前,在运行遥控器的终端中输入Ctrl-C。然后确保您的turtlesim窗口可见,以便查看 bag 文件的运行效果。

输入命令:

$ ros2 bag play subset

[INFO] [rosbag2_player]: Set rate to 1

[INFO] [rosbag2_player]: Adding keyboard callbacks.

[INFO] [rosbag2_player]: Press SPACE for Pause/Resume

[INFO] [rosbag2_player]: Press CURSOR_RIGHT for Play Next Message

[INFO] [rosbag2_player]: Press CURSOR_UP for Increase Rate 10%

[INFO] [rosbag2_player]: Press CURSOR_DOWN for Decrease Rate 10%

Progress bar enabled at 3 Hz.

Progress bar [?]: [R]unning, [P]aused, [B]urst, [D]elayed, [S]topped

[INFO] [rosbag2_player]: Playback until timestamp: -1

====== Playback Progress ======

[1751923361.427372456] Duration 0.00/48.47 [R]

您的乌龟将跟随您记录时输入的相同路径(虽然不是 100% 完全相同;turtlesim对系统时间的微小变化很敏感)。

因为subset文件记录了/turtle1/pose话题,只要turtlesim在运行,ros2 bag play命令就不会退出,即使您没有移动乌龟。

这是因为只要/turtlesim节点处于活动状态,它就会定期在/turtle1/pose话题上发布数据。您可能注意到在上述ros2 bag info示例结果中,/turtle1/cmd_vel话题的Count信息只有 9;那正是我们记录时按下箭头键的次数。

注意/turtle1/poseCount值超过 3000;当我们在记录时,该话题上发布了 3000 次数据。

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

$ ros2 topic hz /turtle1/pose

5.2 回放多个 bag

有时,为了分配记录工作负载,将所需的记录话题分割到多个记录中是相关的。例如,我们可以将/turtle1/cmd_vel/turtle1/pose各自记录到自己的 bag 中。

创建两个终端实例。在第一个终端中,运行:

$ ros2 bag record -o subset_cmd_vel --topics /turtle1/cmd_vel

在第二个终端中,运行:

$ ros2 bag record -o subset_pose --topics /turtle1/pose

像之前一样移动乌龟,完成后按Ctrl-C结束两个记录。

要让这两个记录以正确的时序并行回放,为每个要包含的 bag 使用-i <bag_name>调用ros2 bag play。在本例中,运行:

$ ros2 bag play -isubset_cmd_vel -isubset_pose

这将一起回放subset_cmd_velsubset_pose记录,回放同步以复制原始消息顺序。如果使用,可选参数--message-order {received,sent}确定消息是按照接收时间还是发布时间排序(默认为 received)。这也适用于回放单个 bag

管理服务数据

环境准备

您将记录introspection_clientintrospection_service之间的服务数据,然后稍后显示和回放相同的数据。要记录服务客户端和服务器之间的服务数据,必须在节点上启用服务内省

让我们启动introspection_clientintrospection_service节点并启用服务内省。您可以查看服务内省演示以获取更多详细信息。

打开一个新终端并运行introspection_service,启用服务内省

$ ros2 run demo_nodes_cppintrospection_service --ros-args -p service_configure_introspection:=contents

打开另一个终端并运行introspection_client,启用服务内省

$ ros2 run demo_nodes_cppintrospection_client --ros-args -p client_configure_introspection:=contents

检查服务可用性

ros2 bag只能记录来自可用服务的数据。要查看系统的服务列表,打开一个新终端并运行命令:

$ ros2 service list

/add_two_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_two_ints

info:

event_type: REQUEST_SENT

stamp:

sec:1713995389

nanosec: 386809259

client_gid: [1, 15, 96, 219, 162, 1, 108, 201, 0, 0, 0, 0, 0, 0, 21, 3]

sequence_number: 133

request:[{a: 2, b: 3}]

response:[]

---

您应该看到服务通信。

记录服务

要记录服务数据,支持以下选项。服务数据可以与话题同时记录。

记录特定服务:

$ ros2 bag record --service <service_names>

记录所有服务:

$ ros2 bag record --all-services

运行命令:

$ ros2 bag record --service /add_two_ints
[INFO] [1713995957.643573503] [rosbag2_recorder]: Press SPACE for pausing/resuming

[INFO] [1713995957.662067587] [rosbag2_recorder]: Event publisher thread: Starting

[INFO] [1713995957.662067614] [rosbag2_recorder]: Listening for topics...

[INFO] [1713995957.666048323] [rosbag2_recorder]: Subscribed to topic '/add_two_ints/_service_event'

[INFO] [1713995957.666092458] [rosbag2_recorder]: Recording...

现在ros2 bag正在记录发布到/add_two_ints服务的服务数据。要停止记录,在终端中输入Ctrl-C

数据将积累在一个新的 bag 目录中,目录名称模式为rosbag2___-__。此目录将包含一个metadata.yaml以及记录格式的 bag 文件。

检查服务数据

您可以通过运行以下命令查看记录的详细信息:

$ ros2 bag info <bag_file_name>
Files: rosbag2_2024_04_24-14_59_17_0.mcap

Bag size: 15.1 KiB

Storage id: mcap

ROS Distro: lyrical

Duration: 9.211s

Start: Apr 24 2024 14:59:17.676 (1713995957.676)

End: Apr 24 2024 14:59:26.888 (1713995966.888)

Messages: 0

Topic information:

Service: 1

Service information: Service: /add_two_ints | Type: example_interfaces/srv/AddTwoInts | Event Count: 78 | Serialization Format: cdr

回放服务数据

在回放 bag 文件之前,在运行introspection_client的终端中输入Ctrl-C。当introspection_client停止运行时,introspection_service也会停止打印结果,因为没有传入请求。

 bag 文件回放服务数据将开始向introspection_service发送请求。

输入命令:

$ ros2 bag play --publish-service-requests <bag_file_name>
[INFO] [1713997477.870856190] [rosbag2_player]: Set rate to 1

[INFO] [1713997477.877417477] [rosbag2_player]: Adding keyboard callbacks.

[INFO] [1713997477.877442404] [rosbag2_player]: Press SPACE for Pause/Resume

[INFO] [1713997477.877447855] [rosbag2_player]: Press CURSOR_RIGHT for Play Next Message

[INFO] [1713997477.877452655] [rosbag2_player]: Press CURSOR_UP for Increase Rate 10%

[INFO] [1713997477.877456954] [rosbag2_player]: Press CURSOR_DOWN for Decrease Rate 10%

[INFO] [1713997477.877573647] [rosbag2_player]: Playback until timestamp: -1

您的introspection_service终端将再次开始打印以下服务消息:

[INFO] [1713997478.090466075] [introspection_service]: Incoming request
a: 2 b: 3

这是因为ros2 bag play bag 文件中的服务请求数据发送到/add_two_ints服务。

我们还可以在ros2 bag play回放时内省服务通信,以验证introspection_service

ros2 bag play之前运行此命令以查看introspection_service

$ ros2 service echo --flow-style /add_two_ints

您可以看到来自 bag 文件的服务请求和来自introspection_service的服务响应。

info:

event_type: REQUEST_RECEIVED

stamp:

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

request:[{a: 2, b: 3}]

response:[]

---

info:

event_type: RESPONSE_SENT

stamp:

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

request:[]

response:[{sum: 5}]

管理动作数据

环境准备

您将记录fibonacci_action_clientfibonacci_action_server之间的动作数据,然后稍后显示和回放相同的数据。要记录动作客户端和服务器之间的动作数据,必须在节点上启用动作内省

让我们启动fibonacci_action_clientfibonacci_action_server节点并启用动作内省。您可以查看动作内省演示以获取更多详细信息。

打开一个新终端并运行fibonacci_action_server,启用动作内省

$ ros2 run action_tutorials_pyfibonacci_action_server --ros-args -p action_server_configure_introspection:=contents

打开另一个终端并运行fibonacci_action_client,启用动作内省

$ ros2 run action_tutorials_cppfibonacci_action_client --ros-args -p action_client_configure_introspection:=contents

检查动作可用性

ros2 bag只能记录来自可用动作的数据。要查看系统的动作列表,打开一个新终端并运行命令:

$ ros2 action list
/fibonacci

要检查动作上是否启用了动作内省,运行命令:

$ ros2 action echo --flow-style /fibonacci
interface: GOAL_SERVICE

info:

event_type: REQUEST_SENT

stamp:

sec:1744917904

nanosec: 760683446

client_gid: [1, 15, 165, 231, 234, 109, 65, 202, 0, 0, 0, 0, 0, 0, 19, 4]

sequence_number: 1

request:[{goal_id: {uuid: [81, 55, 121, 145, 81, 66, 209, 93, 214, 113, 255, 100, 120, 6, 102, 83]}, goal: {order: 10}}]

response:[]

---

...

记录动作

要记录动作数据,支持以下选项。动作数据可以与话题和服务同时记录。

记录特定动作:

$ ros2 bag record --action <action_names>

记录所有动作:

$ ros2 bag record --all-actions

运行命令:

$ ros2 bag record --action /fibonacci

[INFO] [1744953225.214114862] [rosbag2_recorder]: Press SPACE for pausing/resuming

[INFO] [1744953225.218369761] [rosbag2_recorder]: Listening for topics...

[INFO] [1744953225.218386223] [rosbag2_recorder]: Event publisher thread: Starting

[INFO] [1744953225.218580294] [rosbag2_recorder]: Recording...

[INFO] [1744953225.725417634] [rosbag2_recorder]: Subscribed to topic '/fibonacci/_action/cancel_goal/_service_event'

[INFO] [1744953225.727901848] [rosbag2_recorder]: Subscribed to topic '/fibonacci/_action/feedback'

[INFO] [1744953225.729655213] [rosbag2_recorder]: Subscribed to topic '/fibonacci/_action/get_result/_service_event'

[INFO] [1744953225.731315612] [rosbag2_recorder]: Subscribed to topic '/fibonacci/_action/send_goal/_service_event'

[INFO] [1744953225.735061252] [rosbag2_recorder]: Subscribed to topic '/fibonacci/_action/status'

...

现在ros2 bag正在记录/fibonacci动作的动作数据:目标、结果和反馈。要停止记录,在终端中输入Ctrl-C

数据将积累在一个新的 bag 目录中,目录名称模式为rosbag2___-__。此目录将包含一个metadata.yaml以及记录格式的 bag 文件。

检查动作数据

您可以通过运行以下命令查看记录的详细信息:

$ ros2 bag info <bag_file_name>
Files: rosbag2_2025_04_17-22_20_40_0.mcap

Bag size: 20.7 KiB

Storage id: mcap

ROS Distro: lyrical

Duration: 9.019568080s

Start: Apr 17 2025 22:20:47.263125070 (1744953647.263125070)

End: Apr 17 2025 22:20:56.282693150 (1744953656.282693150)

Messages: 0

Topic information:

Services: 0

Service information:

Actions: 1

Action information:

Action:/fibonacci | Type: example_interfaces/action/Fibonacci | Topics: 2 | Service: 3 | Serialization Format: cdr

Topic:feedback | Count: 9

Topic:status | Count: 3

Service:send_goal | Event Count: 4

Service:cancel_goal | Event Count: 0

Service:get_result | Event Count: 4

回放动作数据

在回放 bag 文件之前,在运行fibonacci_action_client的终端中输入Ctrl-C。当fibonacci_action_client停止运行时,fibonacci_action_server也会停止打印结果,因为没有传入请求。

 bag 文件回放动作数据将开始向fibonacci_action_server发送请求。

输入命令:

$ ros2 bag play --send-actions-as-client <bag_file_name>
[INFO] [1744953720.691068674] [rosbag2_player]: Set rate to 1

[INFO] [1744953720.702365209] [rosbag2_player]: Adding keyboard callbacks.

[INFO] [1744953720.702409447] [rosbag2_player]: Press SPACE for Pause/Resume

[INFO] [1744953720.702423063] [rosbag2_player]: Press CURSOR_RIGHT for Play Next Message

[INFO] [1744953720.702431404] [rosbag2_player]: Press CURSOR_UP for Increase Rate 10%

[INFO] [1744953720.702437677] [rosbag2_player]: Press CURSOR_DOWN for Decrease Rate 10%

Progress bar enabled at 3 Hz.

Progress bar [?]: [R]unning, [P]aused, [B]urst, [D]elayed, [S]topped

[INFO] [1744953720.702577680] [rosbag2_player]: Playback until timestamp: -1

====== Playback Progress ======

[1744953656.281683207] Duration 9.02/9.02 [R]

您的fibonacci_action_server终端将再次开始打印以下服务消息:

[INFO] [1744953720.815577088] [fibonacci_action_server]: Executing goal...
[INFO] [1744953720.815927050] [fibonacci_action_server]: Feedback: array('i', [0, 1, 1])

[INFO] [1744953721.816509658] [fibonacci_action_server]: Feedback: array('i', [0, 1, 1, 2])

[INFO] [1744953722.817220270] [fibonacci_action_server]: Feedback: array('i', [0, 1, 1, 2, 3])

[INFO] [1744953723.817876426] [fibonacci_action_server]: Feedback: array('i', [0, 1, 1, 2, 3, 5])

[INFO] [1744953724.818498515] [fibonacci_action_server]: Feedback: array('i', [0, 1, 1, 2, 3, 5, 8])

[INFO] [1744953725.819182228] [fibonacci_action_server]: Feedback: array('i', [0, 1, 1, 2, 3, 5, 8, 13])

[INFO] [1744953726.820032562] [fibonacci_action_server]: Feedback: array('i', [0, 1, 1, 2, 3, 5, 8, 13, 21])

[INFO] [1744953727.820738690] [fibonacci_action_server]: Feedback: array('i', [0, 1, 1, 2, 3, 5, 8, 13, 21, 34])

[INFO] [1744953728.821449308] [fibonacci_action_server]: Feedback: array('i', [0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55])

这是因为ros2 bag play bag 文件中的动作目标请求数据发送到/fibonacci动作。

我们还可以在ros2 bag play回放时内省动作通信,以验证fibonacci_action_server

ros2 bag play之前运行此命令以查看fibonacci_action_server。您可以看到来自 bag 文件的动作目标请求和来自fibonacci_action_server的服务响应:

$ ros2 action echo --flow-style /fibonacci
interface: STATUS_TOPIC

status_list: [{goal_info: {goal_id: {uuid: [34, 116, 225, 217, 48, 121, 146, 36, 240, 98, 99, 134, 55, 227, 184, 72]}, stamp: {sec: 1744953720, nanosec: 804984321}}, status: 4}]

---

interface: GOAL_SERVICE

info:

event_type: REQUEST_RECEIVED

stamp:

sec:1744953927

nanosec: 957359210

client_gid: [1, 15, 165, 231, 190, 254, 1, 50, 0, 0, 0, 0, 0, 0, 19, 4]

sequence_number: 1

request:[{goal_id: {uuid: [191, 200, 153, 122, 221, 251, 152, 172, 60, 69, 94, 20, 212, 160, 40, 12]}, goal: {order: 10}}]

response:[]

---

interface: GOAL_SERVICE

info:

event_type: RESPONSE_SENT

stamp:

sec:1744953927

nanosec: 957726145

client_gid: [1, 15, 165, 231, 190, 254, 1, 50, 0, 0, 0, 0, 0, 0, 19, 4]

sequence_number: 1

request:[]

response:[{accepted: true, stamp: {sec: 1744953927, nanosec: 957615866}}]

---

interface: STATUS_TOPIC

status_list: [{goal_info: {goal_id: {uuid: [191, 200, 153, 122, 221, 251, 152, 172, 60, 69, 94, 20, 212, 160, 40, 12]}, stamp: {sec: 1744953927, nanosec: 957663383}}, status: 2}]

---

interface: FEEDBACK_TOPIC

goal_id:

uuid: [191, 200, 153, 122, 221, 251, 152, 172, 60, 69, 94, 20, 212, 160, 40, 12]

feedback:

sequence:[0, 1, 1]

---

...

总结

您可以使用ros2 bag命令记录 ROS 2 系统中话题、服务和动作上传递的数据。无论您是与他人分享您的工作还是内省自己的实验,这都是一个值得了解的好工具。

后续步骤

您已经完成了CLI 工具教程!下一步是开始客户端库教程,从创建工作空间开始。

相关资料

关于ros2 bag的更详细解释可以在README中找到。关于服务记录和回放的更多信息可以在设计文档中找到。关于动作记录和回放的更多信息可以在设计文档中找到。有关 QoS 兼容性和ros2 bag的更多信息,请参阅rosbag2:覆盖 QoS 策略

本文档完整翻译自 ROS 2 Lyrical 官方文档,仅用于学习交流。