ROS6—理解话题

ros节点启动和关闭相关 1. ros运行单位: Ros程序运行的单位是ros node。 2. ros 节点的启动: (1)初始化ros节点:通过调用ros::init()接口实现;可以通过参数指定默认节点名字,之所以是默认,是因为在命令行执行程序时,是可以修改节点名字的。 (2)启动ros节点:通过调用ros::NodeHnadle创建NodeHnadle实例nh实现,第一次创建实例时,会调用ros::start(),此时启动本节点。 3. ros节点关闭: (1)通过调用ros::shutdown()接口,关闭ros节点,此接 阅读详情

这篇教程介绍ROS主题与使用rostopic和rqt_plot

设置

在新终端中运行rosrun,在另一个新终端中运行rosrun turtlesim turtlesim_node。
我们需要驱动turtle,由键盘远程操作,在一个新终端中运行:

$ rosrun turtle turtle_teleop_key

会得到类似这样的信息:

[ INFO] 1254264546.878445000: Started node [/teleop_turtle], pid [5528], bound on [aqy], xmlrpc port [43918], tcpros port [55936], logging to [~/ros/ros/log/teleop_turtle_5528.log], using [real] time
Reading from keyboard
---------------------------
Use arrow keys to move the turtle.

现在可以使用箭头键来驱动小龟运动。若不能驱动则在运行turtle_teleop_key的终端内确认你输入的键被记录。
Turtlesim_teleop
下面探究背后的机理。

ROS话题(topics)

上例中turtle_node和turtle_teleop_key通过ROS话题来通信。turtle_teleop_key向一个话题发布关键笔画消息,而turtlesimz则订阅同一个话题的笔画消息。可以使用rqt_graph来现实当前运行的节点和话题。
需注意的是若使用的是electric或更早的,使用rxgraph。
rqt_graph创建一个系统正在运行程序的动态图。rqt_graph是rat包的一部分,安装:

$ sudo apt-get install ros-<distro>-rqt
$ sudo apt-get install ros-<distro>-rqt-common-plugins

在新终端中输入:

$ rosrun rqt_graph rqt_graph

则会得到类似的图:

若将鼠标放在/turtle2/command_velocity则会高亮ROS节点和话题。可以看出turtlesim_node和turtle_teleopkey正在名为/turtle1/command——velocity上通信。

可以使用rostopic工具得到关于ROS话题的信息;使用帮助选项得到rostopic的子命令。

rostopic -h

会得到

Commands:
    rostopic bw display bandwidth used by topic
    rostopic echo   print messages to screen
    rostopic find   find topics by type
    rostopic hz display publishing rate of topic    
    rostopic info   print information about active topic
    rostopic list   list active topics
    rostopic pub    publish data to topic
    rostopic type   print topic type
Type rostopic <command> -h for more detailed usage, e.g. 'rostopic echo -h'

命令rostopics echo 显示向话题发布的消息

rostopic echo [topic]

查看turtle_teleop_key节点发布的command velocity数据。
对ROS版本Hydro和后面的版本,数据发布在/turtle1/cmd_vel话题上。在新终端中运行:

$ rostopic echo /turtleq/vmd_vel

对Groovy以及前面的版本,则在新终端中运行:

$ rostopics echo /turtle1/command_velocity

因为现在没有发送任何消息,所以什么也不会看到。现在通过按箭头键来使turtle_teleop_key发布消息。
对ROS Hydro以及之后的版本,会看到类似:

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

而对于ROS Groovy以及之前的版本,则会看到

---
linear: 2.0
angular: 0.0
---
linear: 2.0
angular: 0.0
---
linear: 2.0
angular: 0.0
---
linear: 2.0
angular: 0.0
---
linear: 2.0
angular: 0.0

现在按下rqt_graph图左上角refresh按钮来现实新的节点。可以看到rostopic echo现在也订阅了/turtle1/cmd_vel。
rsotopic list命令返回所有订阅的或发布的话题。通过帮助选项查看list子命令所需的参数。在新终端中运行:

$ rostopic list -h

会得到:

Usage: rostopic list [/namespace]

Options:
  -h, --help            show this help message and exit
  -b BAGFILE, --bag=BAGFILE
                        list topics in .bag file
  -v, --verbose         list full details about each topic
  -p                    list only publishers
  -s                    list only subscribers
  --host                group by host name

这里使用verbose选项:

$ rostopic list -v

会显示发布和订阅话题的冗长的列表以及它们的类型:

Published topics:
 * /turtle1/color_sensor [turtlesim/Color] 1 publisher
 * /turtle1/cmd_vel [geometry_msgs/Twist] 1 publisher
 * /rosout [rosgraph_msgs/Log] 4 publishers
 * /rosout_agg [rosgraph_msgs/Log] 1 publisher
 * /turtle1/pose [turtlesim/Pose] 1 publisher

Subscribed topics:
 * /turtle1/cmd_vel [geometry_msgs/Twist] 2 subscribers
 * /rosout [rosgraph_msgs/Log] 1 subscriber
 * /statistics [rosgraph_msgs/TopicStatistics] 1 subscriber
3.ROS消息(Messages)

话题上的节点间通信通过发送消息发生。发布者和订阅者需发送和接受相同类型的消息。这就意味着一个话题的类型由发布的消息的类型定义。在话题上传递的消息可以使用rostopic type来确定。
rostopic type返回正在发布消息的类型。

rostopic type [topic]

对ROS Hydro或者更后的版本,使用:

$ rostopic type /turtle1/cmd_vel

会得到

geometry_msgs/Twist

使用rosmsg来看到更详细的细节:

$ rosmsg show geometry_msgs/Twist

会得到:

geometry_msgs/Vector3 linear
  float64 x
  float64 y
  float64 z
geometry_msgs/Vector3 angular
  float64 x
  float64 y
  float64 z

对ROS Groovy和更早的版本,使用:

$ rostopic type /turtle1/command_velocity

会得到:

turtlesim/Velocity

使用rosmsg:

$ rosmsg show turtlesim/Velocity

得到:

float32 linear
float32 angular

知道turtlesim所期待的数据类型后,可以想turtle发布命令。

4.rostopic 持续运动

rostopic pub发布数据到当前正在广告的主题上:

rostopic pub [topic] [msg_type] [args]

对ROS Hydro及以后版本,例如:

$ rostopic pub -1 /turtle1/cmd_vel geometry_msgs/Twist -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, 1.8]'

对ROS Groovy以及前面的版本,相应的则是:

$ rostopic pub -1 /turtle1/command_velocity turtlesim/Velocity  -- 2.0  1.8

前面的命令会发送一个命令到turtlesim告诉其以线速度2、角速度1.8移动:

再详细来看每个参数的含义。
对ROS Hydro及以后版本,
rostipic pub 会将消息发布到给定的话题;
参数-1会使rostopic仅发布消息然后推出;
/turtle1/cmd_vel 是发向的消息的名称;
geometry_msgs/Twist是发布的消息的类型;
参数- -告诉参数解析器后面的参数不是选项;这在以-开始的参数时必须用,比如负数;
如前面提到的,一个geometry_msgs/Twist msg有两个三维实向量:前者是线速度,后者是角速度。这些参数实际上遵循YAML语法。
ROS Groovy及其之前的版本类似。
注意到小龟停了下来;这是因为小龟需要以稳定的1Hz的命令流类似保持运动。使用rostopic pub -r可以发布稳定的命令流。
ROS Hydro及其以后版本:

$ rostopic pub /turtle1/cmd_vel geometry_msgs/Twist -r 1 -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, -1.8]'

ROS Groovy及其之前版本:

$ rostopic pub /turtle1/command_velocity turtlesim/Velocity -r 1 -- 2.0  -1.8

这会以1Hz频率发布速度命令:

也可以通过rqt_graph查看发生了什么,topic pub节点正在与rostopic echo节点通信:

小龟会一直沿着圆运动。在新终端中,可以使用rostopic echo来查看ruttlesim发布的数据

rostopic echo /turtle1/cmd_vel

rostopic hz会报告数据发布的速度:

rostopic hz [topic]

查看turtlesim_node发布/turtle1/pose的速度:

$ rostopic hz /turtle1/pose

会得到:

subscribed to [/turtle1/pose]
average rate: 62.501
    min: 0.016s max: 0.016s std dev: 0.00000s window: 62
average rate: 62.500
    min: 0.016s max: 0.016s std dev: 0.00000s window: 124
average rate: 62.500
    min: 0.016s max: 0.016s std dev: 0.00001s window: 187
average rate: 62.500
    min: 0.016s max: 0.016s std dev: 0.00001s window: 249
average rate: 62.500
    min: 0.016s max: 0.016s std dev: 0.00001s window: 312
average rate: 62.500
    min: 0.016s max: 0.016s std dev: 0.00001s window: 374
average rate: 62.500
    min: 0.016s max: 0.016s std dev: 0.00001s window: 437
average rate: 62.500
    min: 0.016s max: 0.016s std dev: 0.00001s window: 500
average rate: 62.500
    min: 0.016s max: 0.016s std dev: 0.00000s window: 562
                        ......

可以看出turtlesim正以60Hz的速率发布数据。也可以将rostopic type和rosmsg show结合起来使用来更深入地得到关于话题的信息。
ROS Hydro及以后版本:

$ rostopic type /turtle1/cmd_vel | rosmsg show

ROS Groovy及之前:

$ rostopic type /turtle1/command_velocity | rosmsg show

现在已经使用rostopic测试了话题,接下来用另一种工具查看turtle产生的数据。

5.使用rqt_plot

若使用electric及更早的版本,使用rxplot。
rqt_plot显示话题发布的数据的一段滚动间的绘图。这里使用rqt_plot来绘制关于话题/turtle1/pose发布的数据。先启动rqt_plot:

rosrun rqt_plot rqt_plot

弹出一个新窗口。在左上角的文本框可以让你添加任何话题来绘制。输入/turtle1/pose/x会使加号按钮高亮,按下它;对/turtle1/pose/y重复同样的过程,就能看到小龟的x-y地址在图中绘制出来。

按下负号键会显示一个选择隐藏特定话题的菜单。
对这个会话,使用Ctrl-C来杀死rostopic终端但使turtlesim继续运行。
了解了ROS话题工作原理之后,再看服务和参数工作。

ROS总结——ROS话题 理解ROS话题本博客是对http://wiki.ros.org/上ROS教程的学习总结,欢迎大家交流学习。本节介绍ROS话题(topics)以及如何使用rostopic 和 rxplot 命令行工具。1.运行turtlesim 首先确保roscore已经运行, 打开一个新的终端:$ roscore在一个新的终端中运行:$ rosrun turtlesim turtlesim_node需要通过键 阅读详情

相关推荐

ROS节点,消息,话题,服务的介绍

整理结合机器人操作系统(ros)浅析和网址http://wiki.ros.org/cnNODEnode几乎是无处不在,这个东西相当于可执行文件,目前我更愿意把它当做cpp文件,通过catkin_make之后生成可执行文件。Message不用说了,没有message就是哑巴了。还是这是血液吧,不然传递机制是无法建立起来的TOPIC就像是QQ群一样,当有人发了一条消息后,QQ群告诉任何一个加群的人,有没

Shirlim 1万+

ROS基础 | API函数

ROS wiki:http://docs.ros.org/kinetic/api/roscpp/html/index.html 【1】: ros::NodeHandle::param() template<typename T > /* *@brief:从参数服务器获取参数,获取失败使用默认值 *@param: param_name 索取参数的关键词 *@param: param_val 参数的赋值对象 *@param:default_val 默认值 */ bool ros::N

W776655的博客 833

ROS2—理解话题(Topic)

大道至简,ROS2将复杂的机器人系统拆解成许多模块节点,而这些节点之间则是通过一个至关重要的通道完成数据交换的,这个通道就是“话题”。 一个节点可以通过多个话题向外发布数据,也可以同时订阅多个其他节点发布的话题,相当于话题是一个多对多的订阅/发布模型。 可见,话题是节点之间实现数据传输的重要途径,也是机器人各个子系统之间交换数据的重要方式。 1.启动小海龟仿真器 还是先来启动小海龟仿真器吧,相信你已经很熟练了: ros2 run turtlesim turtlesim_node ..

hx1113的博客 5088

ROS start

这几天,开始研究ROS系统。先前阅读了Bobsweetie的ROS系列的翻译文章,基本与官网无异,有兴趣的同学可以阅读: http://blog.youkuaiyun.com/Bobsweetie/article/category/2883021/2然后阅读了部分 古月同学的ROS文章 http://blog.youkuaiyun.com/hcx25909最后接下来,会把自己遇到的ROS基础,遇到的问题分类发布下来,作

none 1190

ROS学习--(六)理解ROS节点和话题

ROS系统包括多个独立的节点,每个节点通过一个发布/订阅的消息范式与其他节点联系 !如下图中,publisher和subscriber都可以是节点(node) (http://img.blog.youkuaiyun.com/20150726220005225) 举个具体例子: ROS starts with the ROS Master. Let’s say we have a camera on o

BenjaminYoung29的博客 4570

4、理解ros话题

一、准备工作1.roscore首先启动ros:rosrun已经启动过则无需此步。2.turtlesim启动一个小海龟rosrun turtlesim turtlesim_node3.远程操控小海龟再一个新终端里运行:rosrun turtlesim turtle_teleop_key得到:Reading from keyboard --------------------------- Use ar

_明灭的专栏 1172

ROS学习记录(二)-- 节点

ROS 节点相关 ROS运行单位: ros程序的运行单位是ros节点 node 节点初始化 ros节点初始化通过调用ros::init() 接口实现,例如: ros::init(argc, argv, “TUM”); 其中,TUM为ros节点的名字。但是这个名字是可以修改的,比如在launch文件中修改 节点的启动 通过目前看到的博客,了解到有两种启动方法: 通过调用ros::NodeHandle创建NodeHandle实例nh来实现 ...

干饭人 436

南京邮电大学电工电子实验(二)复习一

本文给电工电子实验(二)的复习进行一些知识点的提醒

YOUXISUN的博客 2958

ROS基础——Qt例程源码解读

一、qnode qnode继承QThread类(Qt线程类),节点运行独立于GUI,另开线程运行。 qnode.hpp #ifndef qt_gui_QNODE_HPP_ #define qt_gui_QNODE_HPP_ #ifndef Q_MOC_RUN #include <ros/ros.h> #endif #include <string> #inclu...

偷得浮生半日闲 2313

TSMaster实战:如何用LIN总线唤醒你的汽车电子系统(附波形分析)

本文通过TSMaster工具实战解析LIN总线唤醒机制。详细介绍了LIN网络唤醒的协议要求、时序参数计算,并演示了如何在TSMaster中配置唤醒信号、捕获分析波形,以及验证休眠流程。文章结合常见问题排查,为汽车电子工程师提供了从理论到实践的完整调试指南。

weixin_28308325的博客 460

Nmap的介绍、安装 并进行网络扫描

Nmap概述 Nmap(Network Mapper(网络映射器))是一个网络连接端扫描软件,用来扫描网上电脑开放的网络连接端。确定哪些服务运行在哪些连接端,并且推断计算机运行哪个操作系统(这是亦称 fingerprinting)。它是网络管理员必用的软件之一,以及用以评估网络系统安全。 正如大多数被用于网络安全的工具,nmap 也是不少黑客及骇客(又称脚本小子)爱用的工具 。系统管理员可以利用nmap来探测工作环境中未经批准使用的服务器,但是黑客会利用nmap来搜集目标电脑的网络设定,从而计划攻击的方法。

Cheney ' blog 2万+

理解ros话题–6

理解ros话题–6 理解ROS话题(原创博文,转载请标明出处–周学伟http://www.cnblogs.com/zxouxuewei/) Description: 本教程介绍ROS话题(topics)以及如何使用rostopic 和 rxplot 命令行工具。目录如下: 1.开始   1.1.首先确保roscore已经运行, 打开一个新的终端: root@zxwubuntu-Aspire-V3-...

nuanvv的博客 382

设计数据库 ER 图太麻烦?不妨试试这两款工具,自动生成数据库 ER 图!!!

告别手动画图,提高效率~

楼下小黑哥 2万+

6.理解ROS话题

6.1预备工作 先在一个终端开启roscore(一台电脑只能开启一个,多开报错) roscore 新终端开启turtlesim,把小乌龟的窗口显示出来 rosrun turtlesim turtlesim_node 另一新终端开启键盘远程控制turtle rosrun turtl...

chenglanxiang6356的博客 216

基于Jeecgboot3.9.0的vue3版本前后端分离的flowable流程管理平台

基于Jeecgboot3.9.0的vue3版本前后端分离的flowable流程管理平台

宁波阿成的博客 901

提升YOLOv8性能:用Swin Transformer替换Backbone的详细实现与分析【YOLOv8】

YOLOv8作为目标检测领域的最新版本,在速度和精度之间取得了良好的平衡。然而,随着计算机视觉任务的复杂性不断增加,YOLOv8的标准主干网络(Backbone)在处理高分辨率图像或多尺度目标时,可能存在一定的局限性。为了进一步提升YOLOv8的性能,我们可以引入Swin Transformer替换其主干网络,以增强模型的全局感知能力和多尺度特征提取能力。本文将详细介绍如何在YOLOv8中用Swin Transformer替换原有的Backbone,提供代码示例,并深入探讨其中的原理和效果。

博客 1717

ROS教程6: 理解ROS话题

ROS话题的操作可以详见ROS教程:www.ros.org。 教程详细介绍了ROS node之间是如何通信的,ros通过topic的订阅和发布进行通信,通信的主要形式是msg。msg有对应的数据格式,发布和订阅之间必须发送和接受相同类型的消息。这意味这话题的类型是由发布在它上面的消息类型决定的。 与rostopic相关的一些ros命令如下: 启动turtlesim节点 $ rosrun tur...

吉大秦少游 409

DeepSeek Harness“一切皆插件”核心机制详解

DeepSeek Harness 的“一切皆插件”核心 = Cordis 微内核 + 服务化能力接口 + 声明式依赖注入 + 类型化事件 + 可逆副作用 + 配置层 Profile/Bundle/Patch 组合。它的工程收益是:把模型、工具、循环、存储、UI 等所有 Agent 能力都变成“可从配置替换、可干净装卸”的单元,而不是写死在框架里。

软件行业技术文化交流。 597

ROS学习笔记6(理解ROS话题)

文章目录1 启动1.1 roscore1.2 turtlesim1.3 turtel_teleop_key2 ROS 话题2.1 使用rqt_graph2.2 使用rostopic2.3 使用rostopic echo2.4 使用rostopic list3 ROS消息3.1 使用rostopic type3.2 使用rosmsg show4 使用rostop4.1 使用rostopic pub4...

凯哥大数据——刘凯的博客 667

OpenClaw 报错 npm install failed; cleaning up and retrying...:原生模块编译失败

本文针对OpenClaw项目在部署时出现的"npm install failed"报错问题进行分析,指出该问题源于Node.js原生模块编译链缺失。文章详细列举了常见触发原因,包括缺少gcc/make、Python版本不符、Node版本过新等,并提供了五种解决方案:安装完整编译环境、配置node-gyp Python、重新编译原生模块、切换Node版本以及单独重建失败模块。最后强调在国产服务器环境下部署AI工程时,补齐编译环境和使用稳定Node版本是解决问题的关键,该方案可复用解决

博客 1798

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

ros学习6--Understanding Topics (ROS话题理解)

系统配置ubuntu20.04+ros1,是初学者按照ros官网初级教程学习记录,仅作个人学习记录,如有问题可联系本文作者。

m0_60030502的博客 305

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

理解ros话题--6

理解ROS话题(原创博文,转载请标明出处--周学伟http://www.cnblogs.com/zxouxuewei/) Description: 本教程介绍ROS话题(topics)以及如何使用rostopic 和 rxplot 命令行工具。目录如下:   1.开始   1.1.首先确保roscore已经运行, 打开一个新的终端: root@zxwubuntu-Aspire-V3...

weixin_34194551的博客 359

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

ROS学习(基于Ubuntu 15.04 和ROS Jade)第三章 ROS核心教程 之 6 理解ROS话题

前言这个教程介绍ROS的主题,包括使用rostopic和rqt_plot命令行工具。1.启动ROS1.1 roscore在一个新的终端中通过roecore来启动ROS:$ roscore任何时候只能有一个roscore在运行。1.2 启动turtlesim这个教程我们任然使用turtlesim来做演示。在一个新终端中:$ rosrun turtlesim turtlesim_node1.3 使用键盘

rongchun ji 734

ROS Learning-008 beginner_Tutorials ROS话题

ROS Indigo beginner_Tutorials-07 ROS话题我使用的虚拟机软件:VMware Workstation 11 使用的Ubuntu系统:Ubuntu 14.04.4 LTS ROS 版本:ROS Indigo1. 理解 ROS 话题:我们来通过运行一个 ROS 的例子程序来 感受一下什么是 ROS 话题: 运行下面的命令: (Ctrl+Alt+T 打开一个新终端)

AoboSir.com 1万+

ROS入门知识介绍二 ROS话题、消息,ROS launch等

在本例中,'[2.0, 0.0, 0.0]'表示linear的值为x=2.0, y=0.0, z=0.0,而'[0.0, 0.0, 1.8]'是说angular的值为x=0.0, y=0.0, z=1.8。在本例中,2.0是linear的值,而1.8则是angular的值。这一选项(两个破折号)用来告诉选项解析器,表明之后的参数都不是选项。这会弹出一个新窗口,可以在左上角的文本框里面添加任何想要绘制的话题。然而,这种推荐的标准做法被认为是。这是一个十分复杂的例子,因此让我们来详细分析一下其中的每一个参数。

weixin_42259447的博客 1318
上一篇: ROS5—理解ROS节点
下一篇: ROS7—理解ROS服务和参数
InfinityForever
博客等级 码龄15年 4粉丝 1原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值