[ROS](06)ROS通信 —— 话题(Topic)通信
文章只是个人学习过程中学习笔记,主要参考ROS教程1。
目录
- 1、概念
- 2、话题通信机制
- 3、话题命令rostopic
- 4、 话题通信实操 -- 键盘控制乌龟(turtlesim)运动
- 5、话题命令实操
- 5.1 rostopic list
- 5.2 rostopic type
- 5.3 rostopic echo
- 5.4 rostopic pub
- 5.5 rostopic hz
- 5.6 rostopic bw
- 5.7 rostopic info
- 5.8 rostopic find
1、概念
话题(Topics
):节点可以将消息发布到话题,或者通过订阅话题来接收消息。话题是用于标识消息内容的名称。对某种数据感兴趣的节点会订阅到相应的话题。单个话题可能有多个并行发布者(publishers)和订阅者(subscribers),并且单个节点可以同时发布和订阅多个话题,单个节点也可以发布或订阅(监听)多个话题。通常,发布者和订阅者不知道彼此的存在。它们之间是属于解耦合的关系。从逻辑上讲,可以将话题视为强类型的消息总线。每条总线都有一个名称,只要类型正确,任何人都可以连接到总线以发送或接收消息。
消息(Messages
):订阅或发布话题时所使用的ROS数据类型。消息是由类型化字段组成。支持标准原始类型(整数、浮点、布尔值等),以及原始类型数组。消息可以包括任意嵌套的结构和数组(很像C结构)。
图1-1 话题(Topics)、发布者(Publisher)和订阅者(Subscriber)的概念图
为了让事情更清楚,我将使用 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
。
图2-1 话题(Topics)通信模型
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来显示当前运行的节点和话题。
图4-1 使用rqt_graph显示当前运行的节点和话题
实现的步骤如下:
步骤1:在新终端中启动roscore
roscore
步骤2:在新终端中启动turtlesim_node
rosrun turtlesim turtlesim_node
步骤3:在新终端中启动键盘turtle_teleop_key
rosrun turtlesim turtle_teleop_key
步骤4:在turtle_teleop_key
终端中(一定要选中该终端窗口,确保按键输入能够被捕获),按下键盘上的方向键来控制乌龟运动。
图4-2 键盘控制乌龟(turtlesim)运动
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. ↩︎
[ROS](06)ROS通信 —— 话题(Topic)通信相关推荐
- ROS学习小笔记(Topic通信 ,service通信,参数服务器)
(菜鸡整理的学习笔记,原文链接已经挂上,不小心过来的朋友建议去博主那边学习,谢谢) 原文链接:https://blog.csdn.net/LoongEmbedded/article/details/1 ...
- ROS基本概念 文件系统 创建ROS软件包 ROS中的一些命令
ROS基本概念 文件系统 创建ROS软件包 ROS中的一些命令 ROS是什么 ROS文件系统 文件系统工具:rospack.roscd.rosls 创建ROS 软件包 catkin是什么 创建和构建一 ...
- ROS通信机制(一) —— 话题(topic)与msg文件
文章目录 简述 特点 相关常用命令 通信模型 核心元素 通信过程 代码示例(发布者和订阅者) 发布者(talker.cpp) 订阅者(listener.cpp) 配置 CMakeLists.txt 编 ...
- 五、ROS使用serial包进行串口通信
五.ROS使用serial包进行串口通信 1.下载串口调试助手CuteCom 2.下载虚拟串口模拟器socat 3.下载串口调试助手minicom 4.安装serial串口功能包 5.创建工作空间 6 ...
- ROS笔记(8) 服务通信
ROS笔记(8) 服务通信 1. 自定义服务请求与应答 2. 服务端 Service 3. 客户端 Client 4. 服务通信 1. 自定义服务请求与应答 在 hh_ros 功能包 srv 文件夹中 ...
- 【一学就会的ROS基础入门教程 】03-1 ROS基础编程:ROS工作空间的创建、话题topic的发布与接收、以及话题消息的自定义使用
[一学就会的ROS基础入门教程 ]03-1 ROS基础编程:ROS工作空间的创建.话题topic的发布与接收.以及话题消息的自定义使用 文前白话 1.创建工作空间与功能包 关于工作空间的介绍 创建开发 ...
- ROS 之话题topic中 命令小总结
1.查看ROS正在发布的话题 rostopic list 我的正在发布如下话题. 2.具体查看某个话题,比如查看改话题的发布者(Publishers)和订阅者(Subscribers)以及话题的类型( ...
- ROS 搞懂多话题回调机制以及消息队列
ROS 消息队列的运行机制 下面只是自己的理解,如果有误望大家指正! 大部分内容参考于 https://blog.csdn.net/qq_42700518/article/details/104453 ...
- 13.ROS编程学习:话题发布控制乌龟
目录 准备工作 c++控制乌龟运动 python控制乌龟运动 参考学习资料:赵虚左的课程+古月的ROS机器人开发实践P56的例程. 准备工作 打开ROS乌龟仿真器 roscore rosrun tur ...
最新文章
- Javascript操作DOM常用API总结
- 笔记-项目沟通管理-高效的会议方案
- Linux入门笔记——echo
- 运行mapreduce程序yarn的web端显示进度
- IWorkbook 引入_如果引入国内,你会买单吗?日产全新小型SUV亮相|小型suv|日产|轩逸|新车|本田|丰田...
- Gitlab Java API 使用示例
- srgan要训练多久_有氧运动要多久才开始消耗脂肪?
- Lync Server 2013 实战系列之二:标准版-前期准备
- 大数据行业包含的岗位有哪些
- Angular------使用IDEA开发Angular
- Effective Modern C++笔记汇总
- Nodejs之NestJS之pkg打包
- 北京CMMB信号ESG的Schedule据文件--8月份数据
- DeepLearning论文阅读笔记(一):Cyclical Learning Rates for Training Neural Networks(CLR)
- 前端 day02 CSS
- 1024程序员节CSDN活动征文:数据结构之顺序表
- 女神节礼品:大学男神创作“专属情诗app”
- ROC:Receiver operating characteristic Curve接受者操作特征的理解
- python能在业余时间赚钱吗?分享自己的接私活经验及学习经验
- 2014智联卓聘积分获取新攻略