• ROS2初级知识(9):bag记录过程数据和重放


    Recording and playing back data — ROS 2 Documentation: Humble documentation

    一、背景知识

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

    二、准备活动

            先安装bag相关组件:作为常规 ROS 2 设置的一部分,您应该安装 ros2 bag。 如果您在 Linux 上从 Debians 安装并且您的系统无法识别该命令,请像这样安装它:

    1. sudo apt-get install ros-humble-ros2bag \
    2. ros-humble-rosbag2-storage-default-plugins

    本教程讨论以前教程中涵盖的概念,例如节点和主题。它还使用了turtlesim 包。

    (不要忘记在您打开的每个新终端中获取 ROS 2)

    三、用海龟包进行测试

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

    打开一个新终端并运行:

    ros2 run turtlesim turtlesim_node

    打开另一个终端并运行:

    ros2  run  turtlesim turtle_teleop_key

    让我们也创建一个新目录来存储我们保存的录音,这是一个很好的做法:

    1. mkdir bag_files
    2. cd bag_files

    四、选择主题

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

    ros2 topic list

    列出全部topic名称:

    1. /parameter_events
    2. /rosout
    3. /turtle1/cmd_vel
    4. /turtle1/color_sensor
    5. /turtle1/pose

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

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

    ros2 topic info /turtle1/cmd_vel

            起初什么都不会出现,因为 Teleop 没有发布任何数据。返回运行远程操作的终端并选择它以使其处于活动状态。使用箭头键移动海龟,您将看到正在运行 ros2 topic echo 的终端上发布数据。

    1. linear:
    2. x: 2.0
    3. y: 0.0
    4. z: 0.0
    5. angular:
    6. x: 0.0
    7. y: 0.0
    8. z: 0.0
    9. ---

    五、ros2 包记录

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

    ros2 bag record <topic_name>

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

    运行命令:

    ros2 bag record /turtle1/cmd_vel

    您将在终端中看到以下消息(日期和时间会有所不同):

    1. [INFO] [rosbag2_storage]: Opened database 'rosbag2_2019_10_11-05_18_45'.
    2. [INFO] [rosbag2_transport]: Listening for topics...
    3. [INFO] [rosbag2_transport]: Subscribed to topic '/turtle1/cmd_vel'
    4. [INFO] [rosbag2_transport]: All requested topics are subscribed. Stopping discovery...

            现在 ros2 bag 正在记录 /turtle1/cmd_vel 主题上发布的数据。返回远程终端并再次移动乌龟。动作无关紧要,但尝试制作可识别的模式,以便稍后重放数据时查看。

    按 Ctrl+C 停止录制。

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

    六、记录多个主题

            您还可以记录多个主题,以及更改 ros2 包保存到的文件的名称。

            运行以下命令:

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

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

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

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

    1. [INFO] [rosbag2_storage]: Opened database 'subset'.
    2. [INFO] [rosbag2_transport]: Listening for topics...
    3. [INFO] [rosbag2_transport]: Subscribed to topic '/turtle1/cmd_vel'
    4. [INFO] [rosbag2_transport]: Subscribed to topic '/turtle1/pose'
    5. [INFO] [rosbag2_transport]: All requested topics are subscribed. Stopping discovery...

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

    七、ros2 包信息

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

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

    ros2  bag info subset
    1. Files: subset.db3
    2. Bag size: 228.5 KiB
    3. Storage id: sqlite3
    4. Duration: 48.47s
    5. Start: Oct 11 2019 06:09:09.12 (1570799349.12)
    6. End Oct 11 2019 06:09:57.60 (1570799397.60)
    7. Messages: 3013
    8. Topic information: Topic: /turtle1/cmd_vel | Type: geometry_msgs/msg/Twist | Count: 9 | Serialization Format: cdr
    9. Topic: /turtle1/pose | Type: turtlesim/msg/Pose | Count: 3004 | Serialization Format: cdr

    要查看单个消息,您必须打开数据库(在本例中为 sqlite3)来检查它。

    八、ros2包重放

            在重播包文件之前,在远程操作正在运行的终端中输入 Ctrl+C。然后确保你的 turtlesim 窗口是可见的,这样你就可以看到运行中的包文件。

    输入命令:

    ros2 bag play subset

    终端将返回消息:

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

            您的海龟将遵循您在录制时输入的相同路径(尽管不是 100% 完全准确;turtlesim 对系统时间的微小变化很敏感)。 

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

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

            注意: /turtle1/pose 的 Count 值超过 3000时;在我们记录的时候,关于该主题的数据被发布了 3000 次,超过部分将不予执行。

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

    ros2 topic hz /turtle1/pose

    九、总结 

            使用 ros2 bag 命令记录在您的 ROS 2 系统中传递的主题数据。无论您是与他人分享您的工作还是自省自己的实验,它都是一个很好的工具。

  • 相关阅读:
    PyTorch搭建图卷积神经网络(GCN)完成对论文分类及预测实战(附源码和数据集)
    大型语言模型:DistilBERT — 更小、更快、更便宜、更轻
    【设计模式】单例模式
    学成在线第一天-项目介绍、项目的搭建、开发流程以及相关面试题
    shel脚本-更新hosts
    (一)Neo4j下载安装以及初次使用
    基于C++实现旅行线路设计
    【JavaScript】-- 工厂模式&构造函数模式&原型模式
    minigui编译移植
    设计模式初版讲解
  • 原文地址:https://blog.csdn.net/gongdiwudu/article/details/126088178