机器人操作系统ROS Indigo 入门学习(16)——记录和重放数据

本文主要是介绍机器人操作系统ROS Indigo 入门学习(16)——记录和重放数据,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

这个教程教会告诉怎样将运行的ROS系统上的数据记录到一个.bag文件,然后再重放数据再产生相同的效果.

 

1.1记录数据(创建一个bag文件)

这部分将会指导你怎样从一个运行的ROS系统中记录topic的数据.这个topic数据会在一个bag文件中积累.

首先,执行下面的命令:

roscore

rosrun turtlesim turtlesim_node 

rosrun turtlesim turtle_teleop_key

这会创建两个节点-可观则的tuetlesim和一个用方向键键盘控制tuetlesim中的小乌龟的node.如果你选择你启动turtle_keyboard的终端窗口,你会看到:

Reading from keyboard

---------------------------

Use arrow keys to move the turtle.

按下键盘上的方向键就可以控制屏幕上的小乌龟了.注意:必须让你的光标处在运行turtle_teleop_key node的终端窗口内.

 

1.1.1记录所有发布的topics

首先检查一下现在在系统上运行 的所有topics的列表.在新的终端中运行:

rostopic lsit -v

应该输出:

Published topics:

 * /turtle1/color_sensor [turtlesim/Color] 1 publisher

 * /turtle1/cmd_vel [geometry_msgs/Twist] 1 publisher

 * /rosout [rosgraph_msgs/Log] 2 publishers

 * /rosout_agg [rosgraph_msgs/Log] 1 publisher

 * /turtle1/pose [turtlesim/Pose] 1 publisher

 

Subscribed topics:

 * /turtle1/cmd_vel [geometry_msgs/Twist] 1 subscriber

 * /rosout [rosgraph_msgs/Log] 1 subscriber

这些发布的topic只是可能被记录在数据记录文件上的message文件类型,因为只有发布的messages才能被记录.topic /turtle1/cmd_vel是由teleop_turtle发布的命令message,它被作为turtlesim进程的输入./turtle1/color_sensor /turtle1/poseturtlesim发布的messages.

 

我们现在会记录发布的数据.打开新的终端,输入:

mkdir ~/bagfiles

cd ~/bagfiles

rosbag record -a

这里我们创建了一个临时目录记录数据,运行rosbag record命令时带着选项-a暗示所有发布的topics会在一个bag文件中聚集.

 

回到有turtle_teleop的那个窗口使小乌龟运动10秒钟左右.

 

在运行rosbag record的窗口摁Ctrl+c退出.现在检验一下目录~/bagfiles中的内容.你会看到一个以年,数据,和时间为名,后缀是.bag的文件.这个bag文件记录了在rosbag record运行时任何node发布的topics

 

1.2检验和回放bag文件

既然我们已经用rosbag record在一个bag文件中记录了许多数据,我们可以通过命令rosbag inforosbag play来回放以检验数据。首先,我们看看bag文件中记录了些什么。我们可以用info命令检查bag的内容而不用回放它。在bag文件的目录下执行:

rosbag info <your bagfile>

你应该看到:

path:        2014-12-10-20-08-34.bag

version:     2.0

duration:    1:38s (98s)

start:       Dec 10 2014 20:08:35.83 (1418270915.83)

end:         Dec 10 2014 20:10:14.38 (1418271014.38)

size:        865.0 KB

messages:    12471

compression: none [1/1 chunks]

types:       geometry_msgs/Twist [9f195f881246fdfa2798d1d3eebca84a]

             rosgraph_msgs/Log   [acffd30cd6b6de30f120938c17c593fb]

             turtlesim/Color     [353891e354491c51aabe32df673fb446]

             turtlesim/Pose      [863b248d5016ca62ea2e895ae5265cf9]

topics:      /rosout                    4 msgs    : rosgraph_msgs/Log   (2 connections)

             /turtle1/cmd_vel         169 msgs    : geometry_msgs/Twist

             /turtle1/color_sensor   6149 msgs    : turtlesim/Color    

             /turtle1/pose           6149 msgs    : turtlesim/Pose

这里显示了topic的名字和类型还有每个topicbag文件中包含的messages数量。我们可以看到我们在topic输出中看到的被广播的topic,五个中的四个实际上是经过我们的记录间隔发布的。当我们运行带选项-arosbag record命令时它会记录所有nodes发布的所有messages

 

下一步是重放bag文件,以在运行系统上产生相同的效果。首先在你运行turtle_teleop_key的终端用Ctrl+c杀死上个部分还在运行的teleop程序。让turtle继续运行。在产生原始bag文件的目录中运行以下命令:

rosbag play <your bagfile>

你会看到:

[ INFO] [1418271315.162885976]: Opening 2014-12-10-20-08-34.bag

 

Waiting 0.2 seconds after advertising topics... done.

 

Hit space to toggle paused, or 's' to step.

在广播每个message之后,在它实际开始发布内容到bag文件按之前,默认rosbag会等待一个特定的时间段(0.2秒)。等待一段时间可以允许messages的订阅者注意到已经被广播了的message和将要被广播的messages。如果rosbag play广播完messages马上就发布messages,订阅者可能会接受不到前面几个发布的messages。等待可以用-d来特别指定。

最后topic /turtle1/cmd_vel会被发布,并且小乌龟会像你之前用键盘遥控的一样去移动。小乌龟移动的时间应该和你用rosbag record命令记录的时间相同。你也可以不在bag文件的开头开始返回,而是使用-s参数在不是bag文件开始的其他部分开始回放。最后一个有意思的选项是-r,它允许你通过一个特定的因子改变发布数据的速度。如果你执行:

rosbag play -r 2 <your bagfile>

你会看到小乌龟在有点不同的轨道上运动-这个轨道是你以两倍于之前的速度来发出键盘命令时会出现的轨迹。

 

1.3记录数据子集

当运行一个复杂的系统时,比如pr2的软件套装,可能会有上百的topics被发布。有些topics,比如摄像头图像流,可能会发布巨大量的数据,在这样的系统中写一个包含所有topics在单一的一个bag文件的日志文件是不实际的。rosbag record命令值支持在bag文件中记录一些特定的topics,允许用户值记录它们感兴趣的topics

如果turtle nodes退出了,重启keyboard teleop启动文件:

rosrun turtlesim turtlesim_node 

rosrun turtlesim turtle_teleop_key

在你的bag文件目录中运行:

rosbag record -O subset /turtle1/cmd_vel /turtle1/pose

 

-O参数告诉rosbag record在一个叫做subsetbag的文件中记录,并且topic参数导致rosbag record值记录这里两个topics。用键盘方向键控制小乌龟运动几秒钟,然后在ctrl+c结束rosbag record

 

现在检查bag文件的内容(rosbag info subset.bag)。你会看到只有两个只有两个指定的topics

path:        subset.bag

version:     2.0

duration:    12.6s

start:       Dec 10 2014 20:20:49.45 (1418271649.45)

end:         Dec 10 2014 20:21:02.07 (1418271662.07)

size:        68.3 KB

messages:    813

compression: none [1/1 chunks]

types:       geometry_msgs/Twist [9f195f881246fdfa2798d1d3eebca84a]

             turtlesim/Pose      [863b248d5016ca62ea2e895ae5265cf9]

topics:      /turtle1/cmd_vel    23 msgs    : geometry_msgs/Twist

             /turtle1/pose      790 msgs    : turtlesim/Pose

1.4rosbag record/play的局限

在之前的部分你也许注意到小乌龟的路径跟你用键盘控制的路径不是非常准确的吻合,即使大概的形状是一样的,但是小乌龟没有非常完全跟踪那个路径。原因是小乌龟跟踪的路径对系统中时间变化非常敏感。在系统中,在messagesroscore记录和处理时以及使用rosplay 产生和处理messages时,rosbag复制运行系统的行为的能力是有限的。对于像turtlesim这样的nodes,在命令messages被处理时,微小的时间改变,都导致敏锐的行为改变。用户不要期望完美的模仿行为。

这篇关于机器人操作系统ROS Indigo 入门学习(16)——记录和重放数据的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1001513

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

大模型研发全揭秘:客服工单数据标注的完整攻略

在人工智能(AI)领域,数据标注是模型训练过程中至关重要的一步。无论你是新手还是有经验的从业者,掌握数据标注的技术细节和常见问题的解决方案都能为你的AI项目增添不少价值。在电信运营商的客服系统中,工单数据是客户问题和解决方案的重要记录。通过对这些工单数据进行有效标注,不仅能够帮助提升客服自动化系统的智能化水平,还能优化客户服务流程,提高客户满意度。本文将详细介绍如何在电信运营商客服工单的背景下进行

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M

关于数据埋点,你需要了解这些基本知识

产品汪每天都在和数据打交道,你知道数据来自哪里吗? 移动app端内的用户行为数据大多来自埋点,了解一些埋点知识,能和数据分析师、技术侃大山,参与到前期的数据采集,更重要是让最终的埋点数据能为我所用,否则可怜巴巴等上几个月是常有的事。   埋点类型 根据埋点方式,可以区分为: 手动埋点半自动埋点全自动埋点 秉承“任何事物都有两面性”的道理:自动程度高的,能解决通用统计,便于统一化管理,但个性化定

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

异构存储(冷热数据分离)

异构存储主要解决不同的数据,存储在不同类型的硬盘中,达到最佳性能的问题。 异构存储Shell操作 (1)查看当前有哪些存储策略可以用 [lytfly@hadoop102 hadoop-3.1.4]$ hdfs storagepolicies -listPolicies (2)为指定路径(数据存储目录)设置指定的存储策略 hdfs storagepolicies -setStoragePo

Hadoop集群数据均衡之磁盘间数据均衡

生产环境,由于硬盘空间不足,往往需要增加一块硬盘。刚加载的硬盘没有数据时,可以执行磁盘数据均衡命令。(Hadoop3.x新特性) plan后面带的节点的名字必须是已经存在的,并且是需要均衡的节点。 如果节点不存在,会报如下错误: 如果节点只有一个硬盘的话,不会创建均衡计划: (1)生成均衡计划 hdfs diskbalancer -plan hadoop102 (2)执行均衡计划 hd

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06