【ROS】ROS工作过程及通信原理

转载:https://www.cnblogs.com/fuzhuoxin/p/12560210.html

PS:这是迄今看到的关于ROS通信原理讲解的最通俗易懂的博客,强烈推荐~

ROS可以形象的描述为一个工厂的运行机制,创建好一个工作空间(workspace)就像一个工厂,工厂里又有好多个生产车间,每个功能包(pkg)看作是一个生产车间,每个生产车间又有好多工人在配合,每个节点(node)看作是一个工人,节点是又是可执行程序的最小单位,工人们之间相互沟通通过消息(mesage)来完成。
在这里插入图片描述

1. 话题(topic)

话题是单向的,一般用于连续发送数据的传感器,建立一次联系后,一个发布者可以向多个订阅者发送信息,同样,一个订阅者也可以订阅多个发布者的消息
在这里插入图片描述

2. 服务(service)

服务是同步双向的通信机制服务器只有在有请求的时候才响应,客户端在发出请求后才接受响应当服务的请求和响应完成时,两个连接点自动断开
在这里插入图片描述

3. 动作(action)

动作的通讯方式与服务有类似的情况,不同的是动作服务器收到请求后直至完成响应所需时间较长,中途需要反馈给客户端目前完成的情况,报告当前的现状
在这里插入图片描述
由以上三种通讯方式完成ROS节点间的信息交流。

但是发布者,订阅者,服务服务器,服务客户端,动作服务器,动作客户端分布在不同的节点中。这些节点需要一个让它们建立联系的主节点构建通信的桥梁

分布在外面的不同节点,向主节点注册自己的信息,以便其它节点访问,同时向主节点获取那些访问自己节点的信息。获取后节点和节点间就可以通讯,不再需要主节点。
在这里插入图片描述

4. 通信步骤
一:运行主节点roscore,声明自己的RPC地址URI:

在这里插入图片描述
在这里插入图片描述

二:订阅者节点通过RPC向主节点注册信息,告诉自己的节点名称、话题名称、消息类型及自己的RPC的URL地址和端口:

运行小乌龟节点,向主节点注册自身信息,rosrun turtlesim turtlesim_node
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

三:发布者节点通过RPC向主节点注册信息,告诉自己的节点名称、话题名称、消息类型及自己RPC的URL地址和端口:

运行键盘控制节点,向主节点注册键盘的信息,rosrun turtlesim turtle_teleop_key
在这里插入图片描述
在这里插入图片描述

四:通知发布者消息,主节点通过RPC向小乌龟节点发送小乌龟希望访问的键盘发布者的节点名称,话题名称,消息类型和键盘的RPC地址和端口:

即主节点将键盘信息告知小乌龟:
在这里插入图片描述

五:小乌龟(订阅者)得知键盘(发布者)要向自己发送信息,通过上面得知的键盘的RPC地址和端口向发布者请求直连,将小乌龟自己的节点名称、话题名称、和消息类型及TCP/IP地址端口告知键盘发布者,并请求获得键盘的TCP/IP地址的端口:

告知的过程仍采用RPC通信
在这里插入图片描述

六:键盘发布者将响应小乌龟索要自己的TCP/IP地址端口的请求,将TCP服务器的URL地址和端口作为连接响应发送给小乌龟订阅者:

但在这次告知小乌龟的过程仍采用RPC通信
在这里插入图片描述

七:当小乌龟和键盘节点都知道了对方的TCP/IP地址及端口后不再走RPC通信,之后将通过TCP/IP通讯接收键盘发送的运动信号:

可以用rqt_graph查看节点关系图:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
总的小乌龟节点模型为:
在这里插入图片描述
话题、服务、动作最终的通讯都是建立在以上的连接过程。发布者,订阅者,服务服务器,服务客户端,动作服务器,动作客户端分布节点中的通讯建立过程都是基于节点单位来建立的,在建立好通讯后才执行各自的信息交流

总结

发送消息:
在这里插入图片描述
服务请求和响应:
在这里插入图片描述
动作的目标、结果、反馈:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值