当前位置:网站首页>[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. ︎
边栏推荐
猜你喜欢
随机推荐
世界上最大的开源基金会 Apache 是如何运作的?
你接受不了60%的暴跌,就没有资格获得6000%的涨幅 2021-05-27
EasyExcel 的使用
理解TCP长连接(Keepalive)
Some impressions of the 519 plummet 2021-05-21
rpm包的卸载与安装[通俗易懂]
The bad policy has no long-term impact on the market, and the bull market will continue 2021-05-19
网络安全第四次作业
redis延时队列
线代:已知一个特征向量快速求另外两个与之正交的特征向量
Haystack的介绍和使用
idea社区版下载安装教程_安装天然气管道的流程
MobileNet ShuffleNet & yolov5替换backbone
deal!It's July 30th!
How to solve 1045 cannot log in to mysql server
第三单元 视图层
Flask框架深入一
Sentinel源码(五)FlowSlot以及限流控制器源码分析
binary search && tree
WeChat Mini Program-Recent Dynamic Scrolling Implementation









