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

news2024/10/6 8:25:22

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

教程级别:初学者

时间: 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 工具”教程!下一步是处理“初学者:客户端库”教程,从创建工作区开始。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Android 性能优化的重要性~

随着移动设备和应用程序市场不断发展&#xff0c;Android应用程序变得越来越多&#xff0c;对于开发者来说&#xff0c;他们必须使自己的应用程序与其他应用程序相比更加高效和快速&#xff0c;以吸引用户和确保业务成功。而Android用户期望应用程序如同其他设备上的应用程序一…

PHP快速入门02-PHP语言基础

文章目录前言一、 数据类型1.1 String&#xff08;字符串&#xff09;1.2 Integer&#xff08;整型&#xff09;1.3 Float&#xff08;浮点型&#xff09;1.4 Boolean&#xff08;布尔型&#xff09;1.5 Array&#xff08;数组&#xff09;1.6 Object&#xff08;对象&#xff…

[ vulnhub靶机通关篇 ] 渗透测试综合靶场 DC-5 通关详解 (附靶机搭建教程)

&#x1f36c; 博主介绍 &#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 _PowerShell &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 &#x1f389;点赞➕评论➕收藏 养成习…

深入了解Hugging Face Transformers库:NLP的转换之力

❤️觉得内容不错的话&#xff0c;欢迎点赞收藏加关注&#x1f60a;&#x1f60a;&#x1f60a;&#xff0c;后续会继续输入更多优质内容❤️&#x1f449;有问题欢迎大家加关注私戳或者评论&#xff08;包括但不限于NLP算法相关&#xff0c;linux学习相关&#xff0c;读研读博…

29岁,普通功能测试,我是如何在一周内拿到5份Offer的?

我有个朋友&#xff0c;29岁&#xff0c;功能测试已经2年有余&#xff0c;关于他的职业发展历程&#xff0c;以后会跟大家分享&#xff0c;今天主要想把他跟我分享的面试经历和经验分享给大家&#xff0c;帮助一些迷茫中的朋友。 最近&#xff0c;大概面试了7&#xff0c;8家公…

Redis -List

Redis List 本章介绍redis 的List的数据结构 Redis列表是字符串值的链表。Redis列表经常用于&#xff1a; 1、实现堆栈和队列 2、为后台工作系统提供队列管理 例如&#xff1a; 第一种情况&#xff0c;将List视为一种先进先出的队列 Treat a list like a queue (first in, fi…

Linux系统安装MySQL

使用wget命令下载安装包&#xff0c;命令&#xff1a; ​ wget http://dev.MySQL.com/get/Downloads/MySQL-5.7/mysql-5.7.37-linux-glibc2.12-x86_64.tar.gz​ 1、查看是否已经安装MySQL&#xff1a; 命令&#xff1a; rpm -qa|grep -i mysql 我的Linux是没有安装过的&…

rk3568点亮LCD(mipi)

rk3568 Android11/12 适配 mipi 屏 MIPI (Mobile Industry Processor Interface) 是2003年由ARM, Nokia, ST ,TI等公司成立的一个联盟&#xff0c;目的是把手机内部的接口如摄像头、显示屏接口、射频/基带接口等标准化&#xff0c;从而减少手机设计的复杂程度和增加设计灵活性…

【Java版oj】day27不用加减乘除做加法、三角形

目录 一、不用加减乘除做加法 &#xff08;1&#xff09;原题再现 &#xff08;2&#xff09;问题分析 &#xff08;3&#xff09;完整代码 二、三角形 &#xff08;1&#xff09;原题再现 &#xff08;2&#xff09;问题分析 &#xff08;3&#xff09;完整代码 一、不用…

Midjourney V5太炸裂:逼真到颤抖!“有图有真相”时代彻底过去 画画创作者 模特一键淘汰

** ** 文章目录1、Midjourney V51.1、许多人纷纷惊呼&#xff1a;人类画师别活了。1.2、通用模型2、midjourney是什么3、midjourney 的使用方式4、Midjourney新手入门描述词5、一些疑难杂症1、Midjourney V5 继GPT-4发布之后&#xff0c;Midjourney V5上线。网友纷纷试玩&…

java学习之局部内部类

目录 一、内部类简介 二、内部类的分类 三、局部内部类 第一点 第二点 第三点 第四点 第五点 第六点 第七点 一、内部类简介 类的五大成员&#xff1a;属性、方法、构造器、代码块、内部类 package com.hspedu.innerclass;public class InnerClass01 {public static…

2023 年嵌入式世界的3 大趋势分析

目录 大家好&#xff0c;本文讲解了嵌入式发展的3个大趋势&#xff0c;分享给大家。 趋势#1 – Visual Studio Code Integration 趋势#2 –支持“现代”软件流程 趋势 #3 – 在设计中利用 AI 和 ML 结论 大家好&#xff0c;本文讲解了嵌入式发展的3个大趋势&#xff0c;分享…

1、Git使用不完全指南:GitHub的使用详解

GitHub 是一个以开源为基础的社交化编程平台&#xff0c;开发者可以在上面分享代码、协同开发、交流等。下面我们来讲一下如何使用 GitHub。 1. 注册 GitHub 账号 首先&#xff0c;我们需要在 GitHub 上注册一个账号&#xff0c;访问GitHub官网&#xff1a;GitHub: Let’s bui…

IDEA win11安装flutter环境

1.环境说明 操作系统&#xff1a;win11编辑器&#xff1a;Idea 2022.2.1Flutter&#xff1a;3.7.7JDK&#xff1a;17 2.安装 Flutter SDK 2.1安装flutter sdk flutter中文网 2.2配置环境变量 1&#xff09;在环境变量path中加入flutter的安装路径&#xff1a;D:\DevelopT…

结合PCA降维的DBSCAN聚类方法(附Python代码)

目录 前言介绍&#xff1a; 1、PCA降维&#xff1a; &#xff08;1&#xff09;概念解释&#xff1a; &#xff08;2&#xff09;实现步骤&#xff1a; &#xff08;3&#xff09;优劣相关&#xff1a; 2、DBSCAN聚类&#xff1a; &#xff08;1&#xff09;概念解释&a…

关于镜头畸变问题的总结

1、问题背景最近在做的项目有畸变校正的需求&#xff0c;但测试镜头畸变时&#xff0c;发现畸变的形态不太正常。如下图所示中间向内凹、四周向外凸&#xff0c;感觉像是曲线型的。但常见的畸变就两种&#xff0c;一种是向内收的枕形畸变&#xff0c;另一种是向外凸的桶形畸变&…

SpringCloud:ElasticSearch之DSL查询文档

elasticsearch的查询依然是基于JSON风格的DSL来实现的。 1.1.DSL查询分类 Elasticsearch提供了基于JSON的DSL&#xff08;Domain Specific Language&#xff09;来定义查询。常见的查询类型包括&#xff1a; 查询所有&#xff1a;查询出所有数据&#xff0c;一般测试用。例如…

第04章_IDEA的安装与使用(上)

第04章_IDEA的安装与使用&#xff08;上&#xff09; 讲师&#xff1a;尚硅谷-宋红康&#xff08;江湖人称&#xff1a;康师傅&#xff09; 官网&#xff1a;http://www.atguigu.com 本章专题与脉络 【Why IDEA ?】 【注】JetBrains官方说明&#xff1a; 尽管我们采取了多种…

从二叉树角度看归并排序

归并排序本质上可以看作二叉树的后序遍历 里面用到的核心思想 > 分治 分&#xff1a;二叉树算法思想中的分解问题思想 治&#xff1a;链表中双指针技巧&#xff08;将两条链表合并成一条有序链表&#xff09; sort首先将数组分成左半边和右半边 > 然后分别对左右两…

Log库和配置系统结构

Log库&#xff1a; 类关系 首先有3个大类&#xff1a;LogEvent、LogAppender、Logger、LogFormat&#xff1b; 关系如下&#xff1a; Logger&#xff1a;具体log的实现 LogAppender&#xff1a;将Log信息传输到不同的目的地&#xff0c;根据不同的需求派生出不同的类 LogF…