【ROS2指南-9】Bag的record和play操作

目标:记录在某个话题上发布的数据,以便您可以随时回放和检查它。

教程级别:初学者

时间: 10分钟

内容

  • 背景

  • 先决条件

  • 任务

    • 1 设置

    • 2 选择一个主题

    • 3 ros2包记录

    • 4 ros2 包信息

    • 5 ros2包玩

  • 概括

  • 下一步

  • 相关内容

背景

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

先决条件

您应该作为常规 ROS 2 安装程序的一部分进行安装。ros2 bag

如果您是从 Linux 上的 Debians 安装的,但您的系统无法识别该命令,请像这样安装它:

sudo apt-get install ros-dashing-ros2bag \
ros-dashing-rosbag2-converter-default-plugins \
ros-dashing-rosbag2-storage-default-plugins

本教程讨论了以前教程中涵盖的概念,例如nodes和topics。仍然使用turtlesim 包。

任务

1 设置

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

打开一个新的终端并运行:

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

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

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

ros2 topic echo /turtle1/cmd_vel

一开始什么都不会出现,因为 teleop 没有发布任何数据。返回到您运行 teleop 的终端并选择它以使其处于活动状态。使用方向键移动海龟,您将看到正在运行的终端上正在发布数据。

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包记录

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

ros2 bag record <topic_name>

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

运行命令:

ros2 bag record /turtle1/cmd_vel

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

[INFO] [rosbag2_storage]: Opened database 'rosbag2_2019_10_11-05_18_45'.
[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...

现在正在记录该主题上发布的数据。返回 teleop 终端并再次移动乌龟。移动并不重要,但尝试制作一个可识别的模式,以便稍后重放数据时查看。

ros2 bag/turtle1/cmd_vel

Ctrl+C停止录音。

数据将累积在一个包文件中,其名称为:

rosbag2_year_month_day-hour_minute_second

3.1 记录多个主题

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

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...

您可以四处移动乌龟并Ctrl+C在完成后按下。

PS:您可以将另一个选项添加到命令中,-a它会记录您系统上的所有主题。但是,这可能会导致循环依赖并导致系统崩溃。最好选择您需要的主题的子集。

4 ros2 包信息

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

ros2 bag info <bag_file_name>

在 bag 文件上运行此命令subset将返回文件信息列表:

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

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

5 ros2包玩

在重放 bag 文件之前,进入Ctrl+C运行 teleop 的终端。然后确保你的 turtlesim 窗口是可见的,这样你就可以看到正在运行的包文件。

输入命令:

ros2 bag play subset

终端将返回消息:

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

你的乌龟将遵循你在记录时输入的相同路径(虽然不是 100% 准确;turtlesim 对系统时间的微小变化很敏感)。

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

ros2 bag play

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

ros2 bag info/turtle1/cmd_velCount

注意 的/turtle1/poseCount超过 3000;在我们录制期间,关于该主题的数据被发布了 3000 次。

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

ros2 topic hz /turtle1/pose

概括

您可以使用命令记录 ROS 2 系统中主题传递的数据。无论您是与他人分享您的工作成果还是反思您自己的实验,它都是一个值得了解的好工具。ros2 bag

下一步

您已经完成了“初学者:CLI 工具”教程!下一步是处理“初学者:客户端库”教程,从创建工作区开始。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/225225.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java 简易版 TCP UDP聊天

客户端 import java.io.*; import java.net.Socket; import java.util.Date; import javax.swing.*;public class MyClient {private JFrame jf;private JButton jBsend;private JTextArea jTAcontent;private JTextField jText;private JLabel JLcontent;private Date data;pr…

自定义类加载器

通过继承ClassLoader类&#xff0c;重写findClass方法&#xff0c;实现自定义类加载器。 一、自定义类加载器 package com.molange.JavaSE.myclassloader;import java.io.BufferedInputStream; import java.io.ByteArrayOutputStream; import java.io.FileInputStream; impor…

MATLAB - 绘制立体图(平面+水深)

目录 代码结果 代码 % 在 X-Y 平面上绘图 % 正常绘制平面图 [X,Y,Z] peaks; contour(X,Y,Z,20); hold on% ****重点******************************************** % 改为三维视图&#xff0c;具体可以help % view(3); %此时的平面图对应z0 &#xff1b;默认az-37.5&#x…

大模型在企业知识库场景的落地思考

一、引言 在这个信息爆炸的时代&#xff0c;企业的知识库已不再是简单的数据堆砌&#xff0c;而是需要智能化、高效率的知识管理和利用。大模型作为AI领域的一个重要突破&#xff0c;正逐步成为企业知识库管理的强大助力。通过前面一段时间对于大模型在企业落地的深入调研和实…

Linux---逻辑卷管理

本章主要介绍逻辑卷的管理。 了解什么是逻辑卷创建和删除逻辑卷扩展逻辑卷缩小逻辑卷逻辑卷快照的使用 前面介绍了分区的使用&#xff0c;如果某个分区空间不够&#xff0c;想增加空间是非常困难的。所以&#xff0c;建议尽可能使用逻辑卷而非普通的分区&#xff0c;因为逻辑卷…

【C语言】数据在内存中的存储

目录 练笔 整型数据的存储&#xff1a; char 型数据——最简单的整型 整型提升&#xff1a; 推广到其他整形&#xff1a; 大小端&#xff1a; 浮点型数据的存储&#xff1a; 存储格式&#xff1a; 本篇详细介绍 整型数据&#xff0c;浮点型数据 在计算机中是如何储存的。…

Redis和MySQL双写一致性实用解析

1、背景 先阐明一下Mysql和Redis的关系&#xff1a;Mysql是数据库&#xff0c;用来持久化数据&#xff0c;一定程度上保证数据的可靠性&#xff1b;Redis是用来当缓存&#xff0c;用来提升数据访问的性能。 关于如何保证Mysql和Redis中的数据一致&#xff08;即缓存一致性问题…

RT-DETR手把手教程:NEU-DET钢材表面缺陷检测任务 | 不同网络位置加入EMA注意力进行魔改

&#x1f4a1;&#x1f4a1;&#x1f4a1;本文独家改进&#xff1a;本文首先复现了将EMA引入到RT-DETR中&#xff0c;并跟不同模块进行结合创新&#xff1b;1&#xff09;多种Rep C3结合&#xff1b;2&#xff09;直接作为注意力机制放在网络不同位置&#xff1b; NEU-DET钢材…

C#excel导入dategridview并保存到数据库/dategridview增加一行或几行一键保存数据库

excel导入到dategridview显示并保存到数据库 dategridview增加一行或几行一键保存数据库 ExcelHelper类(这个要导入NPOI包) using NPOI.HSSF.UserModel; using NPOI.SS.UserModel; using NPOI.XSSF.UserModel; using System; using System.Collections.Generic; using Syste…

java多人聊天

服务端 package 多人聊天;import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.io.PrintStream; import java.net.ServerSocket; import java.net.Socket; import java.util.ArrayList;…

用 Bytebase 做数据库 schema 迁移

数据库 schema 迁移指修改管理数据库结构的变更&#xff0c;包括为数据库添加视图或表、更改字段类型或定义新约束。Bytebase 提供了可视化 GUI 方便迁移数据库 schema&#xff0c;本教程将展示如何使用 Bytebase 为 schema 迁移配上 SQL 审核&#xff0c;自定义审批流&#xf…

解决Could not establish connection to : XHR failed

解决Could not establish connection to : XHR failed 问题描述 用vscode用远程连接服务器时总报上面的错误&#xff0c;用xshell和Xftp和vscode终端都可以连上&#xff0c;但是用vscode的ssh连接缺总报错&#xff0c;导致无法连接服务器进行代码调试 一、原因 原因可能是在…

Python tkinter 之文件对话框(filedialog)

文章目录 1 文件1.1 获取单个文件名称&#xff1a;askopenfilename()1.2 获取多个文件名称&#xff1a;askopenfilenames()1.3 获取单个文件属性&#xff1a;askopenfile()1.4 获取多个文件属性&#xff1a;askopenfiles()1.5 获取保存文件的路径&#xff1a;asksaveasfilename…

树莓派4B iio子系统 mpu6050

编写基于iio的mpu6050 遇到的问题&#xff0c;在读取数据时&#xff0c;读出来的数据不能直接拼接成int类型 需要先将其转换成short int&#xff0c;再转换成int 效果如图所示 注&#xff1a;驱动是使用的modprobe加载的 简单画的思维导图 设备树修改部分&#xff1a; …

大模型发展对教育领域的巨大影响

摘要&#xff1a; 教育是一个复杂而微妙的领域;有效的教学涉及对学生认知的推理&#xff0c;并应反映学生的学习目标。基础模型的性质在这里提出了在人工智能教育领域尚未实现的承诺&#xff1a;虽然教育中的某些许多数据流单独地过于有限&#xff0c;无法训练基础模型&#xf…

【linux系统编程】编辑器gcc/g++

目录 Linux下的编辑器 介绍&#xff1a; 1&#xff0c;编辑器gcc/g 1-1&#xff0c;系统的编译过程 1-2&#xff0c;预处理过程 1-3&#xff0c;编译过程 1-4&#xff0c;汇编过程 1-5&#xff0c;链接过程 Linux下的编辑器 介绍&#xff1a; Linux系统下可支持很多高…

祝大雪节气安康,大雪动态表情包图片带字祝福大全,大雪快乐暖心问候祝福语

1、大雪节气&#xff0c;送你防寒秘笈&#xff1a;1、天寒地冻防路滑;2、寒风呼啸防感冒;3、寒气袭人防哮喘;4、戴上耳套防冻耳;5、戴上手套防冻手;6、穿上棉鞋防冻脚;7、多喝开水防上火。8、加强锻炼防疾患。祝健康快乐。 2、奉天承运&#xff0c;皇帝诏曰&#xff1a;大雪节气…

STM32CubeMx+MATLAB Simulink串口输出实验

STM32CubeMxMATLAB Simulink串口输出实验 &#x1f4cc;《STM32CubeMxMATLAB Simulink点灯程序》&#x1f4cd;相关篇《MATLAB Simulink STM32硬件在环 &#xff08;HIL&#xff09;实现例程测试》&#x1f516;需要的软件支持包&#xff1a;Embedded Coder Support Package fo…

Spingboot 之spring-boot-starter-parent与spring-boot-dependencies区分

在创建spring boot工程时&#xff0c;spring-boot-starter-parent 和 spring-boot-dependencies是二选一的关系&#xff0c;在pom中引入其中一个就可以了。 那么什么时候用spring-boot-starter-parent 和 spring-boot-dependencies呢&#xff1f;从字面名称上看&#xff0c;如…

「Verilog学习笔记」根据状态转移写状态机-二段式

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点&#xff0c;刷题网站用的是牛客网 和三段式相比&#xff0c;就是将输出块和次态切换块合并。 timescale 1ns/1nsmodule fsm2(input wire clk ,input wire rst ,input wire data ,output reg flag );//****…