初探ros(十二)---主题数据的记录与播放

1. 记录数据

本教程的这一部分将指导您如何从正在运行的ROS系统中记录主题数据。主题数据将累积在bag文件中。

  1. 运行下面三条指令:
roscore
rosrun turtlesim turtlesim_node
rosrun turtlesim turtle_teleop_key

这将启动两个节点-turtlesim可视化器和一个允许使用键盘上的箭头键对turtlesim进行键盘控制的节点。

按下键盘上的箭头键应使乌龟在屏幕上移动。

  1. 首先,让我们检查正在运行的系统中当前发布的主题的完整列表。为此,请打开一个新终端并执行以下命令:
rostopic list -v

输出:
Published topics:
 * /turtle1/color_sensor [turtlesim/Color] 1 publisher
 * /turtle1/cmd_vel [geometry_msgs/Twist] 1 publisher
 * /rosout [rosgraph_msgs/Log] 2 publishers
 * /rosout_agg [rosgraph_msgs/Log] 1 publisher
 * /turtle1/pose [turtlesim/Pose] 1 publisher

Subscribed topics:
 * /turtle1/cmd_vel [geometry_msgs/Twist] 1 subscriber
 * /rosout [rosgraph_msgs/Log] 1 subscriber

由于仅记录了已发布的消息,因此已发布主题的列表是唯一有可能记录在数据日志文件中的消息类型。主题/ turtle1 / cmd_vel是teleop_turtle发布的命令消息,被turtlesim进程用作输入。消息/ turtle1 / color_sensor和/ turtle1 / pose是turtlesim发布的输出消息。

  • 现在,我们将记录已发布的数据。打开一个新的终端窗口。在此窗口中运行以下命令:
mkdir ~/bagfiles
cd ~/bagfiles
rosbag record -a

在这里,我们只是建立一个临时目录来记录数据,然后使用-a选项运行rosbag记录,表明所有已发布的主题都应存储在bag文件中。

使用turtle_teleop返回到终端窗口,然后将乌龟移动10秒钟左右。 在运行rosbag的窗口中,使用Ctrl-C退出。现在检查目录〜/ bagfiles的内容。您应该看到一个文件,该文件的名称以年,日期,时间和后缀.bag开头。这是bag文件,其中包含rosbag记录运行时任何节点发布的所有主题。

2.播放记录

  1. 现在,我们已经使用rosbag record记录了一个bag文件,我们可以对其进行检查并使用rosbag info和rosbag play命令对其进行播放。首先,我们要查看bag文件中记录的内容。我们可以执行info命令-该命令检查bag文件的内容而不进行回放。从bagfiles目录执行以下命令:
rosbag info 2020-04-03-14-34-28.bag

输出:
path:        2020-04-03-14-34-28.bag
version:     2.0
duration:    1:25s (85s)
start:       Apr 03 2020 14:34:28.52 (1585895668.52)
end:         Apr 03 2020 14:35:54.17 (1585895754.17)
size:        739.6 KB
messages:    10694
compression: none [1/1 chunks]
types:       geometry_msgs/Twist [9f195f881246fdfa2798d1d3eebca84a]
             rosgraph_msgs/Log   [acffd30cd6b6de30f120938c17c593fb]
             turtlesim/Color     [353891e354491c51aabe32df673fb446]
             turtlesim/Pose      [863b248d5016ca62ea2e895ae5265cf9]
topics:      /rosout                    4 msgs    : rosgraph_msgs/Log   (2 connections)
             /turtle1/cmd_vel          19 msgs    : geometry_msgs/Twist
             /turtle1/color_sensor   5335 msgs    : turtlesim/Color
             /turtle1/pose           5336 msgs    : turtlesim/Pose

这将告诉我们主题名称和类型以及bag文件中包含的每个消息主题的数量(计数)。我们可以看到在rostopic输出中看到的广告主题中,五个主题中的四个实际上是在记录间隔内发布的。当我们使用-a标志运行rosbag记录时,它记录了所有节点发布的所有消息。

  1. 本教程的下一步是重播bag文件,以重现正在运行的系统中的行为。首先杀死上一部分中可能仍在运行的Teleop程序-在启动turtle_teleop_key的终端中按Ctrl-C。让turtlesim运行。在终端窗口中,在保存原始包文件的目录中运行以下命令:
rosbag play 2020-04-03-14-34-28.bag

在其默认模式下,rosbag播放将在播发每条消息后等待一段时间(.2秒),然后才开始实际发布bag文件的内容。等待一段时间可以使消息的任何订户收到该消息已被通告并且可能随后出现消息的警报。如果rosbag play在广告发布后立即发布消息,则订阅者可能不会收到前几个发布的消息。可以使用-d选项指定等待时间。最终,主题/ turtle1 / cmd_vel将被发布,并且乌龟应该以与您从Teleop程序执行的模式类似的模式开始在turtlesim中移动。进行rosbag演奏和乌龟移动之间的持续时间应大约等于原始rosbag记录执行与教程开始部分中的从键盘发出命令之间的时间。可以使rosbag播放不是从bag文件的开头开始,而是使用-s参数在开头之后的某个持续时间开始播放。可能感兴趣的最后一个选项是-r选项,它使您可以按指定的因素更改发布率。如果执行:

rosbag play -r 2 2020-04-03-14-34-28.bag

您应该看到乌龟执行的轨迹略有不同-如果您以两倍的速度发出键盘命令,这将是一条轨迹。

3.记录自定义主题

当运行诸如pr2软件套件之类的复杂系统时,可能会发布数百个主题,而某些主题(例如相机图像流)可能会发布大量数据。在这样的系统中,将包含所有主题的日志文件写到磁盘中的单个bag文件通常是不切实际的。 rosbag record命令仅支持将特定主题记录到bag文件中,从而允许用户仅记录他们感兴趣的主题。

  • 在bagfiles目录中,运行以下命令:
rosbag record -O subset /turtle1/cmd_vel /turtle1/pose

-O参数告诉rosbag record登录到名为subset.bag的文件,而主题参数使rosbag record只订阅这两个主题。使用键盘箭头命令将乌龟移动几秒钟,然后按Ctrl-C rosbag记录。

rosbag info  subset.bag

输出:
path:        subset.bag
version:     2.0
duration:    12.6s
start:       Dec 10 2014 20:20:49.45 (1418271649.45)
end:         Dec 10 2014 20:21:02.07 (1418271662.07)
size:        68.3 KB
messages:    813
compression: none [1/1 chunks]
types:       geometry_msgs/Twist [9f195f881246fdfa2798d1d3eebca84a]
             turtlesim/Pose      [863b248d5016ca62ea2e895ae5265cf9]
topics:      /turtle1/cmd_vel    23 msgs    : geometry_msgs/Twist
             /turtle1/pose      790 msgs    : turtlesim/Pose

您可能已经注意到乌龟的路径可能未完全映射到原始键盘输入-粗略形状应该是相同的,但乌龟可能未完全跟踪相同的路径。这样做的原因是,turtlesim跟踪的路径对系统时序中的细微变化非常敏感,并且在rosrecord记录和处理消息的时间方面,rosbag准确复制正在运行的系统行为的能力受到限制。 ,以及使用rosplay生成和处理消息时。对于turtlesim之类的节点,在处理命令消息时,时间上的微小变化会微妙地改变行为,因此用户不应期望模仿行为完美。

你可能感兴趣的:(初探ros(十二)---主题数据的记录与播放)