本篇博客用于分享学习小皎皎ros源码的一些心得感悟,如有错误敬请谅解。
源博客:https://zhuanlan.zhihu.com/p/688106457
ROS作为一款使用了SOA(Service-Oriented Architecture)思想的软件框架,至今已有16个年头。无数工程证明了其可靠性。在SOA思想中,不同模块之间通过服务进行交互,不同模块通过服务中心进行发布和查询以建立连接。ROS的服务中心是master节点。不同模块(称为节点),通过master节点进行注册和查找,来实现发布-订阅(publish-subscribe)模型的数据交互。这些节点可以发布消息(topics),订阅消息,或者提供和调用服务(services),master节点负责管理这些节点的注册信息,从而实现模块间的高效通信。
而Master节点使用XML-RPC协议进行建立连接和传输数据。具体来说:
- 节点注册和查询:当ROS节点启动时,它通过XML-RPC向Master节点发送请求,进行节点的注册。这包括提供节点的名称和URI,以便其他节点能够找到并与其通信。
- 话题和服务的管理:ROS节点通过XML-RPC向Master节点注册它们发布的话题和提供的服务。其他节点可以通过XML-RPC请求Master节点,查询话题和服务的信息,从而建立通信。
- 参数服务器:ROS的全局参数服务器也是通过XML-RPC接口实现的。ROS节点可以使用XML-RPC方法在参数服务器上存储和检索参数。
这里需要说明的是,和SOMEIP类似,XMLRPC作为服务中心,并不直接支持模块之间的数据流交互而是仅仅支持注册订阅与发布。模块之间的数据流交互通过TCPROS和UDPROS进行传输。且在ROS中,通信主要通过发布者/订阅者模式和服务调用实现。发布者/订阅者模式允许节点发布消息以供其他节点订阅,实现了异步通信。而服务调用则允许节点请求特定服务,另一个节点提供该服务并返回结果,实现了同步通信。同时,参数服务器用来存储节点参数,供节点读取和设置参数,但不属于通信方式之一。
使用XMLRPC的优势:
1.轻量化设计
2.可读性优越
3.跨平台性能强
劣势:XMLRPC作为一种文本协议其编码能力较弱,浪费带宽,最重要的是实时性不如Protobuf.protobuf 同样具备跨平台可读性等优势。