ROS架构简介
ROS是一个分布式框架,分为三个层次:OS层、中间层、应用层。
1、基于Linux系统的OS层;
2、实现ROS核心通信机制以及众多机器人开发库的中间层;
3、在ROS Master的管理下保证功能节点的正常运行的应用层。
ROS 的架构是基于一种称为"发布/订阅"(publish/subscribe)模型的通信机制。以下是 ROS 架构中的主要组件:
节点(Nodes): 节点是 ROS 架构的基本单位,通常是一个执行特定运算任务的独立进程。每个节点可以执行感知、控制、规划等不同功能。节点之间通过消息进行通信。
主题(Topics): 主题是节点之间进行消息传递的通道。一个节点可以发布(publish)消息到一个主题,而其他节点可以订阅(subscribe)这个主题来接收该消息。主题是一种异步通信机制,多个节点可以同时发布和订阅同一个主题。
消息(Messages): 消息是在节点之间传递的数据单元。节点可以根据定义的消息类型创建消息实例,并通过主题发布或接收这些消息。消息可以是包含任意数据的结构化数据类型,如图像、点云、传感器数据等,每一个消息都是一种严格的数据结构,支持标准数据类型(整型、浮点型、布尔型等),也支持嵌套结构和数组(类似于C语言的结构体struct),还可以根据需求由开发者自主定义。
服务(Services): 服务提供了节点之间的一对一通信机制,类似于传统的客户端-服务器模型。一个节点可以提供一个服务,而其他节点可以请求该服务并等待响应。与主题不同,服务是一种同步通信机制,请求节点会等待直到收到响应。
参数服务器(Parameter Server): 参数服务器也称节点管理器是一个全局的、分布式的键值存储系统,用于存储节点的配置参数。节点可以读取和写入参数服务器中的值,以便在运行时调整系统的行为。
通过这种发布/订阅的通信模型和节点之间的消息传递,ROS 架构实现了高度的灵活性和可扩展性。开发人员可以将不同的节点组合在一起,构建复杂的机器人系统,并实现各种功能和算法的集成和协同工作。
ROS通信机制
ROS有三种通信机制:
1、基于发布/订阅的话题通信;
2、基于客户端/服务器的服务通信;
3、基于RPC的参数服务器。
ROS在中间层做了大量工作,其中最为重要的就是基于 TCPROS/UDPROS 的通信系统。ROS的通信系统基于TCP/UDP网络,在此之上进行了再次封装,也就是TCPROS/UDPROS。通信系统使用发布/订阅、客户端/服务器等模型,实现多种通信机制的数据传输。
在应用层,ROS需要运行一个管理者——Master,负责管理整个系统的正常运行。ROS社区内共享了大量的机器人应用功能包,这些功能包内的模块以节点为单位运行,以ROS标准的输入输出作为接口,开发者不需要关注模块的内部实现机制,只需要了解接口规则即可实现复用,极大地提高了开发效率。
话题通信机制
话题在ROS中使用最为频繁,其通信模型也较为复杂。如下图所示,在ROS中有两个节点:一个是发布者Talker,另一个是订阅者Listener。两个节点分别发布、订阅同一个话题,启动顺序没有强制要求,此处假设Talker首先启动,可分成图中所示的七步来分析建立通信的详细过程。
服务通信机制
服务是一种带有应答的通信机制,通信原理如下图所示,与话题的通信相比,其减少了Listener与Talker之间的RPC通信。
参数管理机制
参数类似于ROS中的全局变量,由ROS Master进行管理,其通信机制较为简单,不涉及TCP/UDP的通信。