使用 ros2 bag 录制/回放数据

目标:记录有关某个主题的发布数据,以便您可以随时重播和测试它。

有的时候我们希望在别人已有的数据集上做开发,或者复现之前已经构建好的场景数据,这时候就可以用 ROS2 中的 ros2 bag 工具啦。

ros2 bag 是一个命令行工具,可以实现对 ROS2 系统中话题数据的录制和回放,选定的数据会被打包放到一个数据库文件中,未来使用该工具即可按照时间轴回放所有话题数据。记录主题也是共享您的作品并允许其他人重新创建作品的一种好方法。

如果您是从 Linux 上的 Debian 安装的,并且系统无法识别该命令,请按照以下方式安装:

$ sudo apt-get install ros-<distro>-ros2bag ros-<distro>-rosbag2*

1 配置

还是以小海龟仿真为例,我们尝试录制控制海龟运动的速度指令,并实现回放。

$ ros2 run turtlesim turtlesim_node
$ ros2 run turtlesim turtle_teleop_key

接下来创建一个新的文件夹,用于保存数据库文件:

$ mkdir bag_files
$ cd bag_files

2 Choose a topic

ros2 bag 只能记录系统中发布的主题数据。要查看系统主题列表,请打开一个新终端并运行以下命令:

$ ros2 topic list

我们已经知道, /turtle1/cmd_vel 主题是用来控制海龟运动的,如果监听该主题,并且通过键盘控制小海龟移动,就可以看到速度指令的消息啦:

$ ros2 topic echo /turtle1/cmd_vel

3 ros2 bag record

ros2 bag录制话题数据的命令是:

$ ros2 bag record <topic_name>

该命令会将数据保存在当前终端所在的路径下,所以最好先 cd 到刚才创建好的目录下,然后运行:

$ ros2 bag record /turtle1/cmd_vel

可以看到开始录制数据的日志提示:

现在 ros2 bag 已经开始在录制 /turtle1/cmd_vel 话题中的消息了,回到键盘控制的窗口,控制小海龟完成一些运动,怎么动没关系,重要的是要把这些移动的指令都录制下来。

完成录制后,在运行 ros2 bag 的终端中 Ctrl+C 即可停止录制,已经录制好的数据会保存在“rosbag2_year_month_day-hour_minute_second”命名的文件中。

以上是录制一个话题数据的方法,如果我们想录制多个话题的消息呢?可以这样:

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

-o 参数是用来设置数据库文件名的,此时文件名叫 subset。多个话题名通过空格隔开就行,输入几个就会录制几个,录制时可以看到:

注意:如果觉得麻烦,可以用-a参数录制所有话题的数据,不过这样容易产生环形依赖,可能造成系统的崩溃。

4 ros2 bag info

我们可以使用这个命令查看数据库文件的信息:

$ ros2 bag info <bag_file_name>

以刚才的 subset 文件为例,可以看到:

可以看到这里使用的是 sqlite3 数据库保存了话题数据。

5 ros2 bag play

关闭之前运行的键盘控制节点,确保目前是没有任何节点发送海龟运行指令的,接下使用如下命令回放录制好的数据:

$ ros2 bag play subset

终端中会提示:

小海龟仿真器中可以看到海龟按照之前控制的指令在运动。您的乌龟将遵循您在录制时输入的相同路径(尽管并非完全是100%;turtlesim 对系统时间的细微变化敏感)。

这就是 ROS2 中录制数据集的神器——ros2 bag,我们可以通过这种方式和别人分享自己的工作成果嘞!

由于 subset 文件记录了 /turtle1/pose 主题,因此即使您未移动 turtlesimros2 bag play 命令也不会退出。这是因为只要 /turtlesim 节点处于活动状态,它就会定期在 /turtle1/pose 主题上发布数据。您可能已经在上面的 ros2 bag info 示例结果中注意到 /turtle1/cmd_vel 主题的 Count 信息仅为 8;那就是我们在录制时按下箭头键的次数。

注意 /turtle1/pose 的 Count 值超过 2000;在录制时,有关该主题的数据已发布 2000 次。

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

$ ros2 topic echo /turtle1/pose
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容