ROS 2边学边练(10)-- 过程记录及回放

news2024/11/25 4:33:17

概念

        通过将ROS执行过程中的主题数据持续记录下来(到一个数据库中),后期我们就可以重复该过程,同时也能分享给其他同事和朋友,以帮助分析问题或纯粹分享喜悦(独乐乐不如众乐乐嘛)。我们今天的主角ros2 bag就是能提供记录和回放功能的这么一个命令行工具。

动动手

启动小海龟

        没错,还是它:

$ros2 run turtlesim turtlesim_node
$ros2 run turtlesim turtle_teleop_key

分别启动完成后,找个路径创建一个文件夹(不要root权限创建啊)用来放置记录的结果:

$mkdir bag_record
$cd bag_record

选择目标主题数据

        我们可以同时记录所有主题的数据(除非必要),但是我们当前只记录我们感兴趣的主题(也不怎么占用地方嘛),通过前面的学习,我们再来温故一下如何查看主题以及其对应的数据结构类型:

$ros2 topic list

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

返回了5个主题,我们选哪个呢,公平点我们折中就选/turtle1/cmd_vel,其实这个主题发布的数据就是控制小海龟游动的数据,我们可以通过ros2 echo看看(记得要在teleop_turtle终端控制小海龟游动啊,不然看不到数据的):

$ros2 echo /turtle1/cmd_vel

linear:
  x: 2.0
  y: 0.0
  z: 0.0
angular:
  x: 0.0
  y: 0.0
  z: 0.0
  ---

类似于返回上面的数据内容,我们记录的数据也会按照这样的格式进行记录。

记录数据

记录单个主题

        首先我们得切换到我们刚创建的记录路径下面那个文件夹内,因为我们在执行记录命令后记录文件是会保存到该命令运行的当前路径下的:

$ros2 bag record <topic_name>

对应于我们选择的/turtle1/cmd_vel命令是这样的:

$ros2 bag record /turtle1/cmd_vel

如果出现提示创建包目录失败,

 原因是这个bag_record文件夹是通过sudo mkdir bag_record生成的,如果你说没关系,我们切换到root用户下执行记录不就一样了吗,额,的确,看起来过程都挺正常的,记录包文件什么的也都生成了,但是你会发现记录包的某些信息不对,比如时长为0s(原因是个啥,此处标个记号),如下图所示。

然后我们切换到控制节点那个终端,控制小海龟游动,游出一个不同一般的轨迹,觉得差不多了就可以CTRL+C停止记录,我们再来看看记录的文件夹内有啥东西:

在我们创建的bag_record路径下,ROS 2自动创建了以日期命名的文件夹,并在里面生成了最终的记录数据,metadata.yaml保存了这次记录包的信息,实际的主题数据存在了.mcap文件里。

记录多个主题

        如果你胃口够大(实际需要),我们可以通过类似下面的命令同时记录多个主题发布的数据(如果还需要其他主题数据,可以在后面以空格间隔各个主题名称即可):

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

简单解释一下上面的-o subset的意思,-o是取一个独特的名字替代默认记录文件名称(默认名称是rosbag2_year_month_day-hour_minute_second)。

如果要记录所有主题的数据,那就简单了,如下:

$ros2 bag record -o all_set -a

当需要停止记录时,我们在记录终端CTRL + C。

当记录所有主题时,有提示隐藏的主题不会被记录,如果记录隐藏的主题可以增加--include-hidden-topics命令(隐藏的主题?我暂时还不清楚,后面估计会再次碰见,到时再解释下)。

记录包详情

        当记录文件生成完毕后,我们可以通过如下命令对该文件的相关信息进行查看:

$ros2 bag info <bag_file_name>

我们看看subset的信息:

$ros2 bag info subset

可以看出,返回了包含文件大小、存储ID、时长、起止时间、消息数、主题数据等相关信息,其中有两个Count,第一个是主题/turtle1/cmd_vel的Count=7,它代表我们摁了7次键来控制小海龟(发布消息),第二个是主题/turtle1/pose的Count=2253,相较于第一个Count,此处的值比较大,它代表记录周期内,该主题发布了2253次。

        如果要查看某主题的消息发布频率,我们可以通过ros2 hz命令进行查看:

$ros2 topic hz /turtle1/pose

 

回放数据

        终于到了我们的重头戏啦,开始之前我们得先停止掉控制节点(/teleop_turtle),然后show time:

$ros2 bag play subset

小海龟开始在按照记录的数据画画了,直到记录文件的数据播放完成(此时只要turtlesim节点还活着播放终端就不会自动退出,这是因为/turtlesim节点会周期发布/turtle1/pose主题消息)。

看画出的轨迹,丢帧了(后面的拐弯游动没有记录上,据一些资料解释,可能与DDS有关,这也是官方还未解决的bug)或者是小海龟撞到墙了触发了某些机制影响后续的动作(个人猜测,未作验证)。

        本篇留有好几个问题还需我们在后面去找答案,此刻不必硬刚(非找到原因不可),先往后看,不急于一时。

        那么到此,基于小白的《CLI工具》系列就告一段落了,同时后天就开始我们的清明假期了,大家休息好,我们再继续冲往下个阶段的学习。

本篇完。

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

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

相关文章

Linux安装Tomcat保姆级教程

文章目录 前言一、安装JDK二、Tomcat下载三、Tomcat安装1.创建Tomcat的安装目录2.切换到Tomcat的安装目录3.上传Tomcat安装包4.解压缩5.切换到安装好的tomcat的bin目录6.启动tomcat7.网络请求测试 四、外部电脑访问nginx设置方法一&#xff1a;关闭防火墙方法二&#xff1a;添加…

网络升级固件

资源信息 可知 &#xff1a; install\soc_cv1800b_milkv_duo_sd\boot.sd文件较设备中的同名文件多了128个字节的文件头&#xff1b;install\soc_cv1800b_milkv_duo_sd\rawimages\boot.sd文件与设备中同名文件相同&#xff1b; 环境搭建 服务器 启动TFTP服务 安装TFTP服务器…

UGUI 进阶

UI事件监听接口 目前所有的控件都只提供了常用的事件监听列表 如果想做一些类似长按&#xff0c;双击&#xff0c;拖拽等功能是无法制作的 或者想让Image和Text&#xff0c;RawImage三大基础控件能够响应玩家输入也是无法制作的 而事件接口就是用来处理类似问题 让所有控件都…

RT-Thread(RTT)如何添加静态库.a文件

一、在libraries目录下新建文件夹 二、名字根据要添加的静态库文件而定&#xff0c;我这里叫做AGMAlgo&#xff0c;这是一个算法库 三、在文件里再新建两个文件夹&#xff0c;一个叫做inc用来存放静态库的头文件&#xff0c;另一个叫做libs用来存放静态库的.a文件 四、就像这样…

因子数据预处理-去极值和标准化

一. 去极值 因子数据中过大或过小的值会影响分析结果&#xff0c;特别是在回归时&#xff0c;离群值会严重影响因子和收益率之间的相关性估计结果。 因子去极值的处理方法&#xff1a; 确定上下限将上下限外的数据修改为上下限值 常见的去极值方法有三种&#xff0c;分别是…

QT使用数据库

数据库就是保存数据的文件。可以存储大量数据&#xff0c;包括插入数据、更新数据、截取数据等。用专业术语来说&#xff0c;数据库是“按照数据结构来组织、存储和管理数据的仓库”。 什么时候需要数据库&#xff1f;在嵌入式里&#xff0c;存储大量数据&#xff0c;或者记录数…

【已解决】Out of memory interning an attribute name

问题描述&#xff1a;pycharm运行程序时报错 Out of memory interning an attribute name 原因分析&#xff1a;pycharm预设内存不足 解决办法&#xff1a;打开pycharm文件所在位置&#xff0c;打开pycharm64.exe.vmoptions配置文件&#xff0c;调整Xmx的大小。

关系(二)利用python绘制热图

关系&#xff08;二&#xff09;利用python绘制热图 热图 &#xff08;Heatmap&#xff09;简介 热图适用于显示多个变量之间的差异&#xff0c;通过颜色判断彼此之间是否存在相关性。 快速绘制 基于seaborn import seaborn as sns import pandas as pd import numpy as np i…

【JavaSE】解密 继承和多态(下)

前言 紧接着上篇 解密继承和多态&#xff08;上&#xff09;~ 欢迎关注个人主页&#xff1a;逸狼 创造不易&#xff0c;可以点点赞吗~ 如有错误&#xff0c;欢迎指出~ 目录 前言 protected关键字 在同一包下同一类可以访问 代码理解 在同一包下不同类可以访问 代码理解 …

【性能测试】接口测试各知识第1篇:接口测试,学习目标【附代码文档】

接口测试完整教程&#xff08;附代码资料&#xff09;主要内容讲述&#xff1a;接口测试&#xff0c;学习目标学习目标,2. 接口测试课程大纲,3. 接口学完样品,4. 学完课程,学到什么,5. 参考:,1. 理解接口的概念。学习目标&#xff0c;RESTFUL1. 理解接口的概念,2.什么是接口测试…

ZYNQ学习之Ubuntu下Linux文件系统、用户权限与磁盘管理

基本都是摘抄正点原子的文章&#xff1a;<领航者 ZYNQ 之嵌入式Linux 开发指南 V3.2.pdf&#xff0c;因初次学习&#xff0c;仅作学习摘录之用&#xff0c;有不懂之处后续会继续更新~ 一、Linux 文件系统 1.1 Linux 文件系统简介以及类型 操作系统的基本功能之一就是文件管…

JS详解-fetch核心语法

document.querySelector(.btn).addEventListener(click,async () > {const p new URLSearchParams({pname:浙江省,cname:杭州市})//1、如何请求&#xff1f;默认为get&#xff0c;参数1 url地址&#xff0c;返回promiseconst res await fetch(http://hmajax.itheima.net/…

AI提速 OpenAI 新模型GPT-5今年上线?

这两天&#xff0c;有关OpenAI新模型 GPT-5的消息又多了起来。有知情人士称&#xff0c;OpenAI将在今年年中的某个时候发布GPT-5&#xff0c;很可能是在今年夏天期间。OpenAI CEO 萨姆奥特曼在一次播客采访中透露“GPT-5的智能水平得到提升”。 有趣的是&#xff0c;播客的主理…

JavaScript库,编写$()和getElementsByClassName()方法

背景: JavaScript库是一组预先编写好的JavaScript代码集合&#xff0c;旨在简化常见的网页开发任务。这些库通常包含了许多函数和方法&#xff0c;可以帮助开发人员处理各种任务&#xff0c;比如DOM操作、事件处理、动画效果、AJAX请求等等。使用JavaScript库可以节省开发时间…

如何借助AI工具轻松绘制思维导图

前言 思维导图是一种将思维可视化的工具&#xff0c;它可以帮助我们理清思路、提高效率、促进记忆。传统的思维导图绘制方法需要一定的时间和技巧&#xff0c;而借助AI工具&#xff0c;我们可以轻松绘制思维导图&#xff0c;并将更多时间和精力集中在内容本身。 借助AI工具把…

网络以太网之(2)VLAN协议

网络以太网之(1)VLAN协议 Author: Once Day Date: 2024年4月1日 一位热衷于Linux学习和开发的菜鸟&#xff0c;试图谱写一场冒险之旅&#xff0c;也许终点只是一场白日梦… 漫漫长路&#xff0c;有人对你微笑过嘛… 全系列文档可参考专栏&#xff1a;通信网络技术_Once-Day…

输出100~200之间的素数(C语言)

一、运行结果&#xff1b; 二、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h>//实现素数判断函数&#xff1b; int Prime(int number) {//初始化变量值&#xff1b;int divided 2;int JudgementCondition 0;//循环判断素数&#xff1b;wh…

基于SpringBoot+微信小程序的外卖跑腿点餐(订餐)系统设计与实现+毕业论文(12000字)

介绍 Spring Boot是由Pivotal团队提供的全新框架&#xff0c;其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置&#xff0c;从而使开发人员不再需要定义样板化的配置。通过这种方式&#xff0c;Spring Boot致力于在蓬勃发展的快速应…

美联储,非必要,不降息

美联储“没必要、没空间、没动力”降息&#xff0c;也会尽量避免货币政策干扰大选&#xff0c;用“口头降息”代替实际调整是现实选择&#xff0c;市场降息预期将继续推迟和下调。 前言&#xff1a; 当前美国经济从各个方面看均并未表现出疲态——新增就业持续修复&#xff0c;…

俄罗斯Yandex广告推广如何开户及费用?

作为俄罗斯首屈一指的搜索引擎&#xff0c;Yandex凭借其超过60%的市场份额&#xff0c;成为企业进入俄罗斯、触及俄语消费者的关键入口。然而&#xff0c;对于不熟悉当地市场环境与网络营销规则的企业而言&#xff0c;成功开户并高效运营Yandex广告并非易事。云衔科技凭借专业的…