ROS2入门教程—录制/回放数据


  有的时候我们希望在别人已有的数据集上做开发,或者复现之前已经构建好的场景数据,这时候就可以用ROS2中的 ros2 bag工具了。 ros2 bag是一个命令行工具,可以实现对ROS2系统中话题数据的录制和回放,选定的数据会被打包放到一个数据库文件中,未来使用该工具即可按照时间轴回放所有话题数据。
  在使用rosbag前,需要确认是否安装好了,因为通过桌面版安装ROS2的时候,是没有安装bag包的,需要自己进行安装,运行下面这句话:

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

  博主使用的eloquent版本的,因此需要执行以下命令安装:

sudo apt-get install ros-eloquent-ros2bag ros-eloquent-rosbag2*

1 配置

  还是以小海龟仿真器为例,我们尝试录制控制海龟运动的速度指令,并实现回放。
  打开新终端并运行:

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

  我们已经知道/teleop_turtle节点在/turtle1/cmd_vel话题上发布命令,以使海龟在仿真器中移动。如果监听该话题,并且通过键盘控制小海龟移动,就可以看到速度指令的消息:

ros2 topic echo /turtle1/cmd_vel

  起初不会显示任何内容,因为/teleop_turtle节点没有发布任何数据。返回运行/turtle_teleop_key的终端,选择它,使其处于活动状态。使用箭头键移动海龟,您将看到在运行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录制话题数据

  要记录发布到话题的数据,请使用下列命令:

ros2 bag record <topic_name>

  在对所选话题运行此命令之前,请打开一个新的终端并移动到您先前创建的bag_files目录中,因为rosbag文件将保存在您运行它的目录中。
  运行如下命令:

ros2 bag record /turtle1/cmd_vel

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

[INFO] [rosbag2_storage]: Opened database 'rosbag2_2021_09_22-01_03_32/rosbag2_2021_09_22-01_03_32_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话题中的消息了,回到键盘控制的窗口,控制小海龟完成一些运动,怎么动没关系,重要的是要把这些移动的指令都录制下来。
在这里插入图片描述

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

  您还可以录制多个话题,以及更改ros2 bag保存的文件名。运行如下命令:

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

  -o参数是用来设置数据库文件名的,此时文件名叫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...

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

4 查看数据库文件

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

ros2 bag info <bag_file_name>

  输出如下信息:

[INFO] [rosbag2_storage]: Opened database 'subset_0.db3' for READ_ONLY.

Files:             subset_0.db3
Bag size:          96.0 KiB
Storage id:        sqlite3
Duration:          20.12s
Start:             Sep 22 2021 01:15:30.652 (1632244530.652)
End                Sep 22 2021 01:15:50.664 (1632244550.664)
Messages:          1294
Topic information: Topic: /turtle1/cmd_vel | Type: geometry_msgs/msg/Twist | Count: 41 | Serialization Format: cdr
                   Topic: /turtle1/pose | Type: turtlesim/msg/Pose | Count: 1253 | Serialization Format: cdr

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

5 ros2 bag回放数据

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

ros2 bag play <bag_file_name>

  终端中会提示:

[INFO] [rosbag2_storage]: Opened database 'rosbag2_2021_09_22-01_03_32_0.db3' for READ_ONLY.

  小海龟仿真器中可以看到海龟按照之前控制的指令在运动。(虽然不是100%准确;turtlesim对系统计时的微小变化非常敏感)。
  您可以使用ros2 bag命令在ROS2系统中记录传递给话题的数据。无论你是与他人分享你的工作,还是对自己的实验进行反思,这都是一个很好的工具。

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: "ROS2入门21讲"是一套图文教程,以简单易懂的方式介绍ROS2的基本概念和操作。通过这套教程,读者可以了解Ros2的工作原理,学习如何使用ROS2搭建机器人系统。教程分为21个部分,每个部分讲解一个话题,包括ROS2的体系结构,节点,Topic,服务等。对于初学者来说,这套教程是学习ROS2的良好入门材料。在学习过程中,读者可以循序渐进地学习相关知识,通过实际操作,了解ROS2的核心技术。教程还提供了大量的示例代码和操作指南,帮助读者更好地理解ROS2的操作过程。此外,教程也提供了一些高级内容的介绍,如如何自动部署ROS2应用,如何实现ROS2的多机通信等。总体而言,ROS2入门21讲图文教程是一套非常实用的教程,适合初学ROS2的读者使用。学习这套教程可以让读者了解ROS2在机器人系统中的应用,从而更好地掌握相关技能。 ### 回答2: 如今,ROS成为了机器人领域调试、开发和测试的标准,ROS 2是其最新版本,它主要带来了更快的性能、更好的可靠性和更好的可扩展性等特性。 为了帮助大家更快、更好地学习ROS 2,本着开放、分享、合作的精神,一位名为vxy10的作者为我们制作了《ROS 2入门21讲图文教程》。 该教程分为多个章节,涵盖了ROS 2的基础知识、常用工具的使用以及一些实例案例的讲解等内容。 首先,作者详细阐述了ROS 2的基础概念,例如节点、话题、服务、参数、行为等,为读者提供了一个清晰的整体认识。然后,课程讲解了ROS 2常用的工具和函数,包括Rviz、rostopic、rosnode、rqt等,为新手提供了一个快速入门的方式。接着,课程分别讲解了一些实例案例,例如如何使用 ROS 2进行控制机器人、如何使用ROS 2进行机器人的对话等,为读者提供了一个更加深入的了解。 本教程不仅提供了详尽的代码示例,还有丰富精美的图例,能够帮助读者更好地理解各种概念和示例。此外,每个章节都配有习题和答案,帮助读者巩固所学知识,提高学习效率。 总之,《ROS 2入门21讲图文教程》具有系统性、实用性和互动性等特点,对于想要学习ROS 2的读者来说,是一份非常宝贵的资源。 ### 回答3: ROS2入门21讲图文教程是一篇非常详细的教程,旨在帮助初学者了解ROS2的基本知识和使用方法。这个教程分为21个章节,每个章节都覆盖了ROS2的不同方面和主题。 在第一章中,教程简要介绍了ROS2的概念和优点,让读者了解ROS2的用途和处理能力。第二章讲解了ROS2的安装和设置,包括环境变量的配置和ROS2节点的启动方式。第三章介绍了ROS2的工具,包括rqt图形界面,rviz可视化环境等,这些工具是ROS2开发的关键组成部分。第四章到第十二章讲解了ROS2的核心概念,包括消息传递机制、文件结构、包和节点等,这些都是ROS2开发的重要知识点。第十三章到第十五章讲解了ROS2服务,包括服务器和客户端的创建和使用。第十六章到第十九章讲解了ROS2参数服务器和节点名称,涉及到ROS2开发中的重要概念和工具。最后两章讲解了ROS2的调试方式和使用ROS2与OpenCV进行通信的方法。 整个教程详细、生动、易于理解,其中配图和代码示范也让读者更好地理解和操作ROS2。对于初学者来说,这个教程是入门ROS2的一份非常好的材料,不仅涵盖了大部分基础知识和技能,而且通过大量实例的演示,让读者能够更好地掌握ROS2的使用方法。所以,这个教程是初学ROS2的开发者们不可多得的宝贵资源。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Roar冷颜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值