Site Overlay

ROS通信原理简述

笔者在本科阶段虽然主修机械设计制造及其自动化专业,但是在导师的课题组中亦对机器人有过一些浅显的研究;今写下此文,希望可以帮到刚入门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查看节点关系图:




总的小乌龟节点模型为:


话题、服务、动作最终的通讯都是建立在以上的连接过程。发布者,订阅者,服务服务器,服务客户端,动作服务器,动作客户端分布节点中的通讯建立过程都是基于节点单位来建立的,在建立好通讯后才执行各自的信息交流

总结

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

本文是在此文的基础上修改而来,特此说明!

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注