当前位置:网站首页>[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对比ZAB协议
- Differences and concepts between software testing and hardware testing
- 第六单元 初识ORM
- logback源码阅读(二)日志打印,自定义appender,encoder,pattern,converter
- 数据机构---第六章图---图的遍历---选择题
- uview 2.x版本 tabbar在uniapp小程序里头点击两次才能选中图标
- 专访|带着问题去学习,Apache DolphinScheduler 王福政
- Break the limit of file locks and use storage power to help enterprises grow new momentum
- 【ONE·Data || Getting Started with Sorting】
- Mysql's case the when you how to use
猜你喜欢

You can't accept 60% slump, there is no eligible for gain of 6000% in 2021-05-27

How to solve mysql service cannot start 1069

Shell脚本完成pxe装机配置

Mysql's case the when you how to use

Interview | with questions to learn, Apache DolphinScheduler Wang Fuzheng

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

浅浅写一下PPOCRLabel的使用及体验

The future of financial services will never stop, and the bull market will continue 2021-05-28
随机推荐
LayoutParams的详解
MobileNet ShuffleNet & yolov5替换backbone
瑞吉外卖笔记——第10讲Swagger
如何解决1045无法登录mysql服务器
hsql是什么_MQL语言
机器学习——交叉验证法
网络安全第六次作业
Flask框架深入一
第三单元 视图层
理解TCP长连接(Keepalive)
Flask项目的完整创建 七牛云与容联云
【Tensorflow】AttributeError: module ‘keras.backend‘ has no attribute ‘tf‘
第十三单元 混入视图基类
第四单元 路由层
Why does a four-byte float represent a wider range than an eight-byte long
监管再次重拳出击,后市如何?2021-05-22
drf源码分析与全局捕获异常
不精确微分/不完全微分(Inexact differential/Imperfect differential)
第十一单元 序列化器
Flask-SQLAlchemy