ROS通信机制
1 话题通信
1.1 模型构成
- ROS Master(管理者);Talker(话题发布者);Listener(话题订阅者)
1.2 通信流程
- Talker作为发布者,制定话题及数据,将XML/RPC交由ROS Master管理;Listner作为订阅者,需要提出自己需要的话题;通过ROS Master这个媒介,实现相同话题的发布方与订阅方的握手,在Listner获取TCP server后,ROS Master退出通信过程,Talker和Listener建立了两者之间的链接,Listener可持续从Talker处获得消息。
1.3 话题通信使用场景
- “话题通信”适用于不断更新、少逻辑处理的数据传输场景。在传感器数据传输中应用广泛。
2 服务通信
一个节点A向另一个节点B发送请求,B接收处理请求并产生响应结果返回给A。
2.1 概念
- 以请求响应的方式实现不同节点之间数据交互的通信模式。
2.2 模型构成
- ROS Master(管理者);Server(服务端);Client(客户端)
2.3 通信流程
- Server 启动后,会通过RPC在 ROS Master 中注册自身信息,其中包含提供的服务的名称。ROS Master 会将节点的注册信息加入到注册表中。
- Client 启动后,也会通过RPC在 ROS Master 中注册自身信息,包含需要请求的服务的名称。ROS Master 会将节点的注册信息加入到注册表中。
- ROS Master 会根据注册表中的信息匹配Server和 Client,并通过 RPC 向 Client 发送 Server 的 TCP 地址信息。
- Client 根据步骤2 响应的信息,使用 TCP 与 Server 建立网络连接,并发送请求数据。
- Server 接收、解析请求的数据,并产生响应结果返回给 Client。
2.4 服务通信使用场景
- 用于偶然的、对时时性有要求、有一定逻辑处理需求的数据传输场景。
注意:
- 与话题订阅方式相比服务通信方式更倾向于服务请求模式,一般需要Client提供请求数据,并在Server中完成相关服务功能,再返回消息;
- 必须保证启动顺序,即Server必须在Client发布请求前启动完毕;
- Client与Server可以同时存在多个。
3 参数服务器
用于实现不同节点之间的数据共享,类似于容器概念,不同的节点可以对该参数服务器中的数据进行访问或存储。
3.1 概念
- 以共享的方式实现不同节点之间的数据交互。
3.2 模型构成
- ROS Master(管理者);Talker(参数设定者);Listener(参数调用者)
3.3 通信流程
- Talker通过RPC向参数服务器发送参数(包括参数名和参数值),ROS Master将参数保存至参数列表中;
- Listener用过RPC向参数服务器发送查找某一参数名对应参数的请求;
- ROS Master根据步骤2请求提供的参数名查找参数值,并将查询结果通过RPC发送给Listener。
3.4 参数服务器使用场景
- 适用于存在数据共享的一些场景中。
注意:
参数服务器不是为高性能需求设计的,一般只用于存储静态的非二进制的简单数据。
常用的存储数据类型:
int32;double;bool;string;iso8601 dates;list;directory;base64-encoded binary data…