当前位置:网站首页>[ROS](06)ROS通信 —— 话题(Topic)通信
[ROS](06)ROS通信 —— 话题(Topic)通信
2022-08-02 14:02:00 【CynalFly】
文章只是个人学习过程中学习笔记,主要参考ROS教程1。
目录
1、概念
话题(Topics):节点可以将消息发布到话题,或者通过订阅话题来接收消息。话题是用于标识消息内容的名称。对某种数据感兴趣的节点会订阅到相应的话题。单个话题可能有多个并行发布者(publishers)和订阅者(subscribers),并且单个节点可以同时发布和订阅多个话题,单个节点也可以发布或订阅(监听)多个话题。通常,发布者和订阅者不知道彼此的存在。它们之间是属于解耦合的关系。从逻辑上讲,可以将话题视为强类型的消息总线。每条总线都有一个名称,只要类型正确,任何人都可以连接到总线以发送或接收消息。
消息(Messages):订阅或发布话题时所使用的ROS数据类型。消息是由类型化字段组成。支持标准原始类型(整数、浮点、布尔值等),以及原始类型数组。消息可以包括任意嵌套的结构和数组(很像C结构)。
为了让事情更清楚,我将使用 FM收音机系统作为类比:广播电台(
node)的发射器(publisher)将以某个固定频率(topic)传输你喜欢的频道(message)。假设你坐在车里,想收听你最喜欢的频道(message)。你将收音机接收器(subscriber)调谐到该频率(topic)。你既不知道广播电台的确切位置,广播电台也不想知道你在哪里。但你仍然可以在你喜爱的频道中欣赏音乐。
2、话题通信机制
话题通信是ROS通信中最常用的一种基于发布和订阅模型的通信方式。用于实时性、周期性、少逻辑处理的数据传输场景。
ROS Node想要通过topic方式来传递消息,首先 publisher 节点和 Subscriber 节点都要到ROS Master(节点管理器)中进行注册节点名称、话题名称、消息类型、URI地址和端口,然后ROS Master向 Subcriber 节点发送 publisher 节点信息, Subscriber 节点根据接收的 publisher 节点信息,向 publisher 节点请求直接连接,它们建立连接后, publisher 节点向 Subscriber 节点发送消息。节点间通信使用一种基于TCP/IP的消息传输,称为TCPROS。

3、话题命令rostopic
rostopic命令工具能让你获取ROS话题的信息。
| 命令 | 功能 |
|---|---|
rostopic bw | 列出消息发布带宽 |
rostopic delay | display delay of topic from timestamp in header |
rostopic echo | 显示某个话题上发布的数据 |
rostopic find | 根据消息类型查找话题 |
rostopic hz | 报告数据发布的速率 |
rostopic info | 获取指定Topic 当前发布的消息 |
rostopic list | 列出当前所有的Topic |
rostopic pub | 把数据发布到当前某个正在广播的话题上 |
rostopic type | 查看所有发布话题的消息类型 |
Tips:使用
rostopic <command> -h帮助选项获取更详细的用法。
4、 话题通信实操 – 键盘控制乌龟(turtlesim)运动
通过ROS内置的turtlesim来进行话题通信的实操,该实操中涉及到两个节点,一个是控制乌龟运动的键盘节点turtle_teleop_key,另外一个是显示乌龟运动的显示节点turtlesim_node,它们之间通过话题通信,turtle_teleop_key(publisher)在话题上发布键盘按下的消息,turtlesim_node(subscriber)则订阅该话题以接收消息,实现乌龟运动。我们可以使用rqt_graph GUI来显示当前运行的节点和话题。
实现的步骤如下:
步骤1:在新终端中启动roscore
roscore
步骤2:在新终端中启动turtlesim_node
rosrun turtlesim turtlesim_node
步骤3:在新终端中启动键盘turtle_teleop_key
rosrun turtlesim turtle_teleop_key
步骤4:在turtle_teleop_key终端中(一定要选中该终端窗口,确保按键输入能够被捕获),按下键盘上的方向键来控制乌龟运动。
5、话题命令实操
使用控制乌龟(turtlesim)运动案例来实操话题命令。
5.1 rostopic list
rostopic list 能够列出当前已被订阅和发布的所有话题。
# (1) 列出当前已被订阅和发布的所有话题。
rostopic list
# (2) 列出所有发布和订阅的主题及其类型的详细信息。
rostopic list -v

5.2 rostopic type
rostopic type [topic] 命令用来查看所发布话题的消息类型。
# (1) 查看所发布话题[/turtle1/cmd_vel]的消息类型。
rostopic type /turtle1/cmd_vel
# (2) 使用rosmsg查看消息的详细信息
rosmsg show geometry_msgs/Twist

5.3 rostopic echo
rostopic echo [topic] 可以显示在某个话题上发布的数据。
rostopic echo /turtle1/cmd_vel
当输入命令后,你可能会看到什么都没发生,因为现在还没有数据被发布到该话题上。可以通过按下键盘方向键让turtle_teleop_key节点发布数据。记得如果不能控制乌龟,请选中turtle_teleop_key的终端窗口以确保按键输入能够被捕获。当按下向右和向上键时,应该看到以下内容:
现在让我们再看一下rqt_graph。先按下左上角的刷新按钮以显示新节点。正如你所看到的,rostopic echo(这里以红色显示)现在也订阅了turtle1/cmd_vel话题。
5.4 rostopic pub
rostopic pub [topic] [msg_type] [args] 命令可以把数据发布到当前某个正在广播的话题上。
# 命令会发送一条消息给turtlesim,告诉它以2.0大小的线速度和1.8大小的角速度移动。
rostopic pub -1 /turtle1/cmd_vel geometry_msgs/Twist -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, 1.8]'
-1:这一选项会让rostopic只发布一条消息,然后退出。/turtle1/cmd_vel:这是要发布到的话题的名称geometry_msgs/Twist:这是发布到话题时要使用的消息的类型。--:这一选项(两个破折号)用来告诉选项解析器,表明之后的参数都不是选项。如果参数前有破折号(-)比如负数,那么这是必需的。
还有一种快速输入的方法:先输入以下命令,然后双击Tab键,最后使用<-和->键修改
linear和angular。rostopic pub -1 /turtle1/cmd_vel geometry_msgs/Twist

下面我们用 rostopic pub -r 命令来发布源源不断的命令:
# 命令以1Hz的频率发送消息给turtlesim,保证乌龟持续做圆周运动
rostopic pub /turtle1/cmd_vel geometry_msgs/Twist -r 1 -- '[2.0, 0.0, 0.0]' '[0.0, 0.0, -1.8]'

5.5 rostopic hz
rostopic hz [topic] 命令用来报告数据发布的速率。
rostopic hz /turtle1/cmd_vel

5.6 rostopic bw
rostopic bw [topic] 显示指定话题的消息数据带宽(bandwidth)。
rostopic bw /turtle1/cmd_vel

5.7 rostopic info
rostopic info [topic] 获取指定Topic 当前发布的消息 。
5.8 rostopic find
rostopic find [msg_type] 根据消息类型查找话题。
rostopic find geometry_msgs/Twist

ROS.otg. ROS教程[EB/OL]. 2020-12-22[2022-7-5].
http://wiki.ros.org/cn/ROS/Tutorials. ︎
边栏推荐
猜你喜欢

第十三单元 混入视图基类

海明校验码纠错设计原理

Raft协议图解,缺陷以及优化

A number of embassies and consulates abroad have issued reminders about travel to China, personal and property safety

What are the file encryption software?Keep your files safe

The future of financial services will never stop, and the bull market will continue 2021-05-28

How to solve mysql service cannot start 1069

How to solve 1045 cannot log in to mysql server

Awesome!Alibaba interview reference guide (Songshan version) open source sharing, programmer interview must brush

微信小程序-最近动态滚动实现
随机推荐
xshell连接虚拟机步骤_建立主机与vm虚拟机的网络连接
LayoutParams的详解
跑yolov5又出啥问题了(1)p,r,map全部为0
云片网案例
About the development forecast of the market outlook?2021-05-23
Data Organization---Chapter 6 Diagram---Graph Traversal---Multiple Choice Questions
Why does a four-byte float represent a wider range than an eight-byte long
Flask请求应用上下文源码分析
第七单元 ORM表关系及操作
微信小程序-最近动态滚动实现
window10下半自动标注
如何自定义feign方法级别的超时时间
第五单元 保持状态
Sentinel源码(六)ParamFlowSlot热点参数限流
【ONE·Data || Getting Started with Sorting】
OpenMMLab简介
MySQL数据库语法格式
Linux:CentOS 7 安装MySQL5.7
不精确微分/不完全微分(Inexact differential/Imperfect differential)
Sentinel源码(三)slot解析