2021SC@SDUSC
目录
一、写在前面
在之前的博客中,我们首先从RosCore开始分析,学习了ROS线程池的运行逻辑,并从MasterServer的基类XmlRpcServer中的WebServer入手分析了ROS实现不同节点功能协作的基础XML-RPC策略的运行过程.从本次博客开始,我们将开始阅读ROS MasterServer及其相关类的源码,并分析其在ROS运行中承担的功能.
二、MasterServer简介
1、MasterServer
我们曾提到,ROS的功能承担者称为一个node,在运行时的各node构成了一个星状拓扑结构.其中,位于中心的称为为MasterServer,负责协调各node的功能注册与注销并监听功能调用请求;其余节点则运行在称为SlaveServer的主机中,负责提供各种功能,同时也可以向MasterServer请求其它node的功能.
2、Node、Topic、Service
需要指出的是,每个Node作为概念上的功能节点,向MasterServer提供功能调用的句柄,构成了功能上的星型拓扑,而SlaveServer则是负责Node实际运行的守护线程,是SlaveServer而不是Node与MasterServer连接成了相互通信的局域网络.因此,Server与Node是一一对应的,只是职责不同.即一个Node运行在一个SlaveServer中,SlaveServer来向MasterServer注册各种功能并监听调用,Node负责具体的功能执行.另外,一台主机可以具有多个Node,也就是说,一台主机可以开放多个端口来使不同的Slave Server与MasterServer进行连接.
更具体地来说, ROS根据Node所提供不同功能的特点,将其分为了两类:topic与service.其中topic方式类似流式广播,由publisher将采集到的数据源源不断地发送给subscriber,在这个过程中二者是异步的,适合传递数据信息;service方式类似签订合同,在建立serviceServer与serviceClient建立连接后二者以一问一答的同步方式进行交互,适合传递控制信息或易失的重要数据.
(如图所示,这三个Node的功能种类各不相同,且可以运行在同一主机或不同主机上)
三、Service、Topic、Node相关源码分析