ROS 2 Iron 教程 第一章 CLI Tools 第十节 记录并回放数据

本文介绍了如何使用ROS2的包管理器ros2bag进行数据记录和回放,包括设置环境、选择话题、记录单个或多话题数据、查看包信息以及回放数据的过程。
摘要由CSDN通过智能技术生成

前言

本系列文章是由笔者翻译自ROS 2 官方教程。笔者水平有限,如有错误,还请读者指正。

本节教程中部分代码为 Liunx下,请使用其他操作系统的读者前往原文查看。

背景

ros2 bag是用于记录系统上话题上发布的数据的命令行工具。它记录任何话题上传递的数据,并将它们保存在数据库中。然后,你可以回放数据以重现测试和实验的结果。记录话题也是分享你的工程并允许他人重构的好方法。

先决条件

你在安装 ROS 2 时应该已经将ros2 bag安装完成了。

如果你需要安装 ROS 2 ,详见安装教程。

本节教程讨论过去教程中已经介绍过的概念,例如:节点和话题。同时,本节教程依旧使用 turtlesim 包。

任务

1 Setup (设置)

你将会记录你在turtlesim系统中的键盘输入,并在随后回放,所以首先启动/turtlesim/teleop_turtle节点。

打开一个新终端并运行:

ros2 run turtlesim turtlesim_node

打开另一个终端并运行:

ros2 run turtlesim turtle_teleop_key

让我们新建一个用于存放我们记录的数据的目录(Linux):

mkdir bag_files
cd bag_files

2 Choose a topic (选择一个话题)

ros2 bag只能记录话题中发布的信息。为了查看系统中的话题列表,打开一个新终端并运行命令:

ros2 topic list

它将会返回:

/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

起初将不会有任何数据出现,这是因为 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 (ROS 2 包记录 )

3.1 Record a singal topic (记录单个话题)

为了记录话题上发布的数据,使用如下命令参数:

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

现在ros2 bag正记录发布在/turtle1/cmd_vel话题上的数据。回到 teleop 终端并再次移动海龟。移动路径不限,但尝试移动一个可辨认的路径以便于后续回放。

在这里插入图片描述

按下Ctrl + C来停止记录。

记录下数据将会被一起保存到命名规律为:rosbag2_year_month_day-hour_minute_second的目录。这个目录将会被包含 bag文件以及一个metedata.yaml文件。

3.2 Record multiple topics (记录多个话题)

你不仅可以记录多个话题,也可以更改ros2 bag储存的文件名。

运行如下命令:

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

-o选项允许你选择一个 bag 文件唯一的名字。后面跟着字符串,在本例子中是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

提示:
还有另一个选项可被添加到命令中,-a可记录系统中所有话题。

4 ros2 bag info (ROS 2 包信息)

你可以查看你记录包的详细信息,运行:

ros2 bag info <bag_file_name>

subset包文件上运行这个命令,它将会返回文件信息的列表:

ros2 bag info subset
Files:             subset.mcap
Bag size:          228.5 KiB
Storage id:        mcap
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

5 ros2 bag play (ROS 2 包回放)

在回放包文件之前,在你运行 teleop 的终端按下Ctrl + C键。然后确保你可以看到海龟窗口,这样你就可以看到包文件回放的效果。

运行如下命令:

ros2 bag play subset

终端将会返回:

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

你的海龟将会重复你记录时的运动路径(尽管不是百分百准确;海龟对于系统时基的小变化十分敏感)。

在这里插入图片描述

因为subset文件记录/turtle1/pose话题,ros2 bag play命令在 turtlesim 运行时不会退出,即使不在移动海龟。

这是因为只要/turtlesim节点处于活跃状态,它在/turtle1/pose话题上以固定间隔发布数据。你可能注意到ros2 bag info例子中/turtle1/cmd_vel话题的Count9 ;这是当记录时我们按下多少次按键。

/turtle1/pose话题的Count的值超过 3000 ;当我们记录时,数据被发布在话题上超过 3000 次。

为了得知位置数据发布的频率,可以运行如下命令:

ros2 topic hz /turtle1/pose

总结

你可以使用ros2 bag命令来记录 ROS 2 系统中话题上传输的数据。不论是将你的工程分享给他人或是检验自己的实验成果,这是一个很好的工具。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值