机器人编程趣味实践数据保存和播放(bag)腾讯云开发者社区

命令交互工具基本介绍完成,这些调试过程都可以记录下来,用作后续分析。

记录发布在某个主题上的数据,以便可以随时回放和查看。

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

安装命令:

功能包:

将在turtlesim系统中记录键盘输入以供稍后保存和重播,因此首先启动/turtlesim和/teleop_turtle节点。

打开一个新终端并运行:

打开另一个终端并运行:

创建一个新目录来存储保存的文件,这也是一种很好的做法:

如果不创建文件夹,就保存在当前路径下。

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

显示如下:

/parameter_events/rosout/turtle1/cmd_vel/turtle1/color_sensor/turtle1/pose

在主题教程中,了解到 /turtle_teleop 节点在 /turtle1/cmd_vel 主题上发布命令以使机器人在turtlesim 中移动。

要查看 /turtle1/cmd_vel 正在发布的数据,请运行以下命令:

一开始什么都不会显示,因为teleop 没有发布任何数据。 返回运行 Teleop 的终端并选择它以使其处于活动状态。 使用箭头键移动机器人,将看到正在运行 ros2 topic echo 的终端上发布数据。

使用键盘遥控后:

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

在选择的主题上运行此命令之前,打开一个新终端并进入之前创建的 bag_files 目录,因为 rosbag 文件将保存在运行它的目录中。

运行命令:

现在 ros2 bag 正在记录 /turtle1/cmd_vel 主题上发布的数据。 返回到teleop 终端并再次移动机器人。 如何移动无关紧要,但请尝试制作可识别的模式,以便稍后重播数据时查看。

按 Ctrl+C 停止录制。

数据将累积在一个名称为 rosbag2_year_month_day-hour_minute_second 模式的包文件中。

记录多组数据主题

还可以记录多个主题,以及更改 ros2 bag 保存到指定名称的文件夹。

运行以下命令:

-o 选项允许包文件选择唯一的名称。 以下字符串(在本例中为子集)是文件名。

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

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

完成后,可以移动机器人并按 Ctrl+C。

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

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

在子集包文件上运行此命令将返回有关该文件的信息列表:

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

在重放包文件之前,在运行teleop 的终端中输入Ctrl+C。 然后确保turtlesim窗口可见,以便可以看到正在运行的包文件。

输入命令:

终端将返回消息:

机器人将遵循之前录制时输入的相同路径(尽管不是 100% 准确;turtlesim 对系统时序的微小变化很敏感)。

如果使用subset

因为文件记录了 /turtle1/pose 主题,所以只要运行着turtlesim,ros2 bag play命令就不会退出,即使没有移动。

这是因为只要 /turtlesim 节点处于活动状态,它就会定期发布关于 /turtle1/pose 主题的数据。 可能已经注意到,在上面的 ros2 bag info 示例结果中,/turtle1/cmd_vel 主题的 Count 信息仅为 0; 这就是我们在录音时按下箭头键的次数。

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

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

已完成“初学者:CLI 工具”教程!

下面教程会通过三维环境机器人再巩固一下这些CLI工具,然后进行更深入的学习。

THE END
0.Scratch中文教程AppStore中国区排名第一的少儿Scratch编程教学应用。现在已经推出了四部广受好评的教程:(1)初级篇 (2)中级篇 (3)高级篇 (4)机器人丁丁学画画。 教程官方网站:https://scratchlesson.com 请关注微信公众号:蔡老师科技早教 自从我们推出了这个教程的三部曲后,受到了广大家长和学生的好评。有很多家长和学生写邮件给jvzquC41crvt0jurng4dqv4pn1gqr8xetczdj.J6'D>&CM*G8'?7'A<'G8+:7.>;'G=&CA*:D/+F8.>E'DG&G>*;;'G9'N9'DC+CC.J6'D>&::*G6'H9'A6'G7+BF.F8'G=&;=*DD'K8'B9'DD5jf:8;5:889;5