探索ROS2的性能(2)
时间:2023-03-01 17:32 来源:网络整理 作者:默认发布 点击:次
图1简要说明了ROS1和ROS2的系统模型。在图1的左侧,ROS1的实现包括通信系统TCPROS / UDPROS。由于ROS1的实现,此通信需要主进程(在分布式系统中是唯一的)。相反,如图1右侧所示,ROS2建立在DDS之上并包含DDS抽象层。由于此抽象层,用户无需了解DDS API。该层允许ROS2具有高级配置并优化DDS的利用率。此外,由于使用DDS,ROS2不需要主过程。这是容错方面的一个重要点。 ROS应用程序由称为节点的独立计算过程组成,这些过程可促进故障隔离,更快的开发,模块化和代码可重用性。节点之间的通信基于发布/订阅模型。在此模型中,节点通过主题传递消息进行通信。消息具有由.msg文件定义的简单数据结构(很像C结构)。节点通过主题名称标识消息的内容。当节点向主题发布消息时,另一个节点订阅该主题并利用该消息。例如,如图2所示,“Camera”节点将消息发送到“Images”主题。主题中的消息由“汽车检测”节点和“行人检测”节点接收。发布/订阅模型设计为精细化的模块化,适用于分布式系统。 在ROS1中,上述通信系统使用TCP和UDP套接字实现为基于TCPROS和UDPROS的中间件。当启动订阅节点和发布节点时,它们与主节点交互,主节点收集信息并管理主题,类似于服务器。在与主节点进行XML /远程过程调用(RPC)事务之后,订阅节点使用商定的连接协议请求与发布节点的连接。实际数据(即消息)直接在节点之间传输。此数据不通过主数据路由。 ROS1实现节点之间的对等数据传输。 可选地,ROS1提供节点,其提供有效的节点组合以用于优化的数据传输而无需TCPROS和UDPROS。 nodelet通过传递指针实现同一进程中节点之间的非序列化数据传输。 ROS2继承此选项作为进程内通信,它解决了nodelet的一些基本问题(例如,安全内存访问)。 ROS2采用DDS作为其通信系统。但是,作为例外,在没有DDS的情况下执行进程内通信。 DDS由许多供应商提供,并具有多种实现类型。开发人员可以从各种DDS供应商中选择适当的DDS实施。 2.2 Data Distribution Service (DDS) DDS规范[21]是由对象管理组(OMG)[1]为发布/订阅数据分发系统定义的。 OMG管理定义和标准化API;然而,OMG隐藏了实施的细节。不同供应商已经开发了几种实现方式(例如,RTI [29]和PRISMTECH [25])。 DDS支持广泛的应用,从小型嵌入式系统到大型系统,如基础设施。请注意,还支持分布式实时嵌入式系统。 DDS的核心是以数据为中心的发布 - 订阅(DCPS)模型,旨在即使在分布式异构平台中也能在进程之间提供高效的数据传输。 DCPS模型创建了一个可由任何独立应用程序访问的“全局数据空间”。 DCPS有助于高效的数据分发。在DDS中,发布或订阅数据的每个进程称为参与者,其对应于ROS中的节点。参与者可以使用类型化界面从/向全局数据空间读取和写入。 如图3所示,DCPS模型由DCPS实体构成:DomainParticipant,Publisher,Subscriber,DataWriter,DataReader和Topic。根据服务质量(QoS)策略执行进程之间的每个数据传输。 DomainParticipant: 用于跟踪其他实体和服务入口点的容器。在DDS中,所有应用程序在域内相互通信,从而促进隔离和通信优化。 Publisher: 发布是负责数据发布的对象。管理一个或多个DataWriters,发布将数据发送到一个或多个主题。 Subscriber: 订阅负责接收已发布的数据并使数据可用。订阅代表一个或多个DataReader行事。根据订阅,DomainParticipant可以接收和发送不同指定类型的数据。 DataWriter: DataWriter是DomainParticipant必须使用的对象,以通过Publisher发布数据。 DataWriter发布给定类型的数据。 DataReader: DataReader是附加到订阅服务器的对象。使用DataReader,DomainParticipant可以接收和访问其类型必须与DataWriter的类型相对应的数据。 Topic: 主题用于标识DataWriter和DataReader之间的每个数据对象。每个主题由名称和数据类型定义。 QoS Policy: 所有DCPS实体都有QoS策略,表示其数据传输行为。每个数据事务都可以通过许多QoS策略选项在不同的粒度级别进行配置。在图4中,我们显示了遵循QoS策略的DDS数据传输示例。目前为止,历史深度和通信可靠性由QoS策略配置。表1显示了ROS2支持的QoS策略的详细信息。在DDS中,还有许多其他QoS策略[21],ROS2应该支持扩展其功能。 |