ROS2学习之旅(11)——记录和回放数据

ros2 bag是一个命令行工具,用于记录发布在系统中话题上的数据。它累积记录任意数量话题的数据,并将其保存在数据库中。然后可以重放数据以再现测试和实验的结果。记录话题数据也是分享工作和让别人重现工作的好方法。

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 bag record

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

ros2 bag record <topic_name>

打开一个新的终端并移动到之前创建的bag_files目录中,因为rosbag文件将保存在运行它的目录中,然后执行:

ros2 bag record /turtle1/cmd_vel

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

[INFO] [rosbag2_storage]: Opened database 'rosbag2_2021_07_14-09_39_06/rosbag2_2021_07_14-09_39_06_0.db3' for READ_WRITE.
[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来停止记录。

保存的文件名称具有以下格式:

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/subset_0.db3' for READ_WRITE.
[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结束记录,此时记录的文件夹为:

image-20210714094952319

注意:

还可以向命令添加另一个选项-a,它记录系统上的所有话题。

4.ros2 bag info

可以查看记录包的细节:

ros2 bag info <bag_file_name>

subset包文件上运行这个命令将返回一个关于该文件的信息列表:

Files:             subset_0.db3
Bag size:          25.2 KiB
Storage id:        sqlite3
Duration:          1.551s
Start:             Jul 14 2021 09:48:54.316 (1626227334.316)
End:               Jul 14 2021 09:48:55.868 (1626227335.868)
Messages:          98
Topic information: Topic: /turtle1/pose | Type: turtlesim/msg/Pose | Count: 98 | Serialization Format: cdr
                   Topic: /turtle1/cmd_vel | Type: geometry_msgs/msg/Twist | Count: 0 | Serialization Format: cdr

要查看各个消息,必须打开数据库(在本例中是sqlite3)来检查它,这超出了ROS2的范围。

5.ros2 bag play

在运行teleop的终端中键入Ctrl+C,重新播放bag文件,确保海龟窗口是可见的:

ros2 bag play rosbag2_2021_07_14-09_39_06

终端返回:

[INFO] [rosbag2_storage]: Opened database 'rosbag2_2021_07_14-09_39_06/rosbag2_2021_07_14-09_39_06_0.db3' for READ_ONLY.

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

6.总结

可以使用ros2 bag命令记录在ROS2系统中传递的话题上的数据。无论是在与他人分享工作,还是在检查自己的实验,这都是一个值得了解的好工具。

如果给您带来帮助,希望能给点个关注,以后还会陆续更新有关机器人的内容,点个关注不迷路~欢迎大家一起交流学习。
都看到这了,点个推荐再走吧~
未经允许,禁止转载。

posted @ 2021-07-14 23:32  Love&Robot  阅读(1531)  评论(0编辑  收藏  举报