【ROS2指南-9】Bag的record和play操作

  • Post author:
  • Post category:其他



目标:

记录在某个话题上发布的数据,以便您可以随时回放和检查它。


教程级别:

初学者


时间:

10分钟


背景


ros2 bag

是一个命令行工具,用于记录系统中主题发布的数据。它可以访问任意数量的话题上传递的数据并将其保存在数据库中。然后您可以重播数据以重现测试和实验的结果。记录bag也是分享您的作品并允许其他人重新创作的好方法。


先决条件

您应该作为常规 ROS 2 安装程序的一部分进行安装。

ros2 bag

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

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

本教程讨论了以前教程中涵盖的概念,例如

nodes



topics

。仍然使用

turtlesim 包


任务


1 设置

您将在

turtlesim

系统中记录您的键盘输入以便稍后保存和重播,因此首先启动

/turtlesim



/teleop_turtle

节点。

打开一个新的终端并运行:

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 没有发布任何数据。返回到您运行 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包记录

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

ros2 bag record <topic_name>

在对您选择的主题运行此命令之前,打开一个新终端并进入

bag_files

您之前创建的目录,因为 rosbag 文件将保存在您运行它的目录中。

运行命令:

ros2 bag record /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...

现在正在记录该主题上发布的数据。返回 teleop 终端并再次移动乌龟。移动并不重要,但尝试制作一个可识别的模式,以便稍后重放数据时查看。


ros2 bag


/turtle1/cmd_vel



Ctrl+C

停止录音。

数据将累积在一个包文件中,其名称为:


rosbag2_year_month_day-hour_minute_second

3.1 记录多个主题

您还可以录制多个主题,以及更改保存文件的名称。


ros2 bag

运行以下命令:

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



-o

选项允许您为包文件选择一个唯一的名称。在本例中,以下字符串

subset

是文件名。

要一次记录多个主题,只需列出每个主题并用空格分隔即可。

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

[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...

您可以四处移动乌龟并

Ctrl+C

在完成后按下。

PS:您可以将另一个选项添加到命令中,

-a

它会记录您系统上的所有主题。但是,这可能会导致循环依赖并导致系统崩溃。最好选择您需要的主题的子集。


4 ros2 包信息

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

ros2 bag info <bag_file_name>

在 bag 文件上运行此命令

subset

将返回文件信息列表:

ros2 bag info subset

Files:             subset.db3
Bag size:          228.5 KiB
Storage id:        sqlite3
Duration:          48.47s
Start:             Oct 11 2019 06:09:09.12 (1570799349.12)
End                Oct 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/msg/Pose | Count: 3004 | Serialization Format: cdr

要查看单个消息,您必须打开数据库(在本例中为 sqlite3)进行检查,这超出了 ROS 2 的范围。


5 ros2包玩

在重放 bag 文件之前,进入

Ctrl+C

运行 teleop 的终端。然后确保你的 turtlesim 窗口是可见的,这样你就可以看到正在运行的包文件。

输入命令:

ros2 bag play subset

终端将返回消息:

[INFO] [rosbag2_storage]: Opened database 'subset'.

你的乌龟将遵循你在记录时输入的相同路径(虽然不是 100% 准确;turtlesim 对系统时间的微小变化很敏感)。

因为该

subset

文件记录了

/turtle1/pose

主题,所以只要您运行 turtlesim,该命令就不会退出,即使您没有移动。


ros2 bag play

这是因为只要

/turtlesim

节点处于活动状态,它就会

/turtle1/pose

定期发布有关该主题的数据。您可能已经注意到,在上面的示例结果中,该主题的信息只有 9;那是我们在录制时按下箭头键的次数。


ros2 bag info


/turtle1/cmd_vel


Count

注意 的

/turtle1/pose



Count

超过 3000;在我们录制期间,关于该主题的数据被发布了 3000 次。

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

ros2 topic hz /turtle1/pose


概括

您可以使用命令记录 ROS 2 系统中主题传递的数据。无论您是与他人分享您的工作成果还是反思您自己的实验,它都是一个值得了解的好工具。

ros2 bag


下一步




您已经完成了“初学者:CLI 工具”教程!下一步是处理“初学者:客户端库”教程,从

创建工作区

开始。



版权声明:本文为weixin_39538031原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。