探索ROS2的性能(3)
时间:2023-03-01 17:32 来源:网络整理 作者:默认发布 点击:次
在DCPS模型中,给定类型的数据从一个或多个DataWriters发布到主题(其名称在域中是唯一的)。一个或多个DataReader按主题名称标识数据对象,以便订阅该主题。在此事务之后,DataWriter使用分布式系统中的实时发布/订阅(RTPS)协议[20]连接到DataReader。 RTPS协议(DDS标准协议)允许来自多个供应商的DDS实现通过抽象和优化传输(例如TCP / UDP / IP)来互操作。 RTPS协议是灵活的,并且被定义为利用QoS策略。一些供应商使用UDP和共享内存传输进行通信。但是,在某些情况下,发现和数据交换可能需要TCP协议。 DataWriter和DataReader之间的数据传输根据QoS策略在RTPS协议中执行。每个DCPS实体根据唯一的用户指定的QoS策略管理数据样本。 DCPS中间件负责基于QoS策略的分布式系统中的数据传输。在不考虑详细的传输实现的情况下,DDS用户将代码生成为DomainParticipant,包括使用DDS API的QoS策略。因此,用户可以仅关注其目的并确定轻松满足实时约束的方法。 3. EVALUATIONS 本节阐明了ROS1和ROS2的功能和潜伏期特征。 目前,ROS2已作为alpha版本发布,其主要功能是C++客户端库,构建系统以及来自多个供应商的部分DDS中间件的抽象。 请注意,ROS2是一个非常粗略的草案,目前正在大力发展。 因此,该评估试图阐明ROS2当前可实现的能力和延迟特性。 进行以下实验以评估发布/订阅消息传递的端到端延迟。延迟的测量是从单个节点上的调用发布函数开始到另一个节点接到数据进入回调函数为止,使用硬件和软件环境如表2所示。传输数据大小的范围是256 B到4 MB,因为大图像数据(例如, 2 MB)和点云数据(.pcd)经常用于ROS应用,例如自动驾驶系统[18]。字符串类型消息用于此评估。在下面的实验中,我们使用两个QoS设置,即可靠策略(reliable policy)和效果最优策略(best-effort),如表3所示。在可靠策略中,TRANSIENT_LOCAL允许节点为延迟加入的订阅节点保留所有消息,RELIABLE便于可靠通讯。在best-effort策略中,节点不会保留消息并且也不会考虑通信是否可达。虽然每个节点以10 Hz执行,但实验重复最多4 MB。给出了每个数据大小的100次测量获得的箱线图和中位数。对于精确的评估方法,我们在[5]和[6]中开源代码。我们比较了三种DDS实现,即Connext [29],OpenSplice [25]和FastRTPS [14]。 Connext和OpenSplice是众所周知的商业许可证DDS实现。请注意,Connext还拥有研究许可证。已经在LGPL许可下发布了OpenSplice和FastRTPS的几种实现。默认情况下,Connext使用UDPv4和共享内存来交换数据。请注意,OpenSplice3和FastRTPS不支持共享内存数据传输。对于精确的评估和实时要求,节点遵循SCHED FIFO [15]和mlockall系统调用。 SCHED FIFO进程优先于任何非SCHED FIFO进程,即使用默认Linux调度的进程。使用mlockall,进程的虚拟地址空间在物理RAM中得到修复,从而防止将内存分页到交换区域。 3.1 Experimental Situations and Methods 如图5所示,在以下实验中评估ROS1和/或ROS2中的节点之间的各种通信情况。而ROS1用于(1-a)、(1- b)和(1-c)中,ROS2用于(2-a)、(2-b)和(2-c)。在(3-a)和(3-b)中,ROS1和ROS2节点共存。注意,由于进程内通信,即共享存储器传输,(2-c)的情况不需要DDS。共享内存传输用于(1-c)nodelet和(2-c)进程内情况。在实验中,Machine1仅用于(1-b)、(1-c)、(2-b)、(2-c)和(3-b)。通过在节点之间发送消息,在同一台机器上测量端到端延迟。消息在本地情况下通过本地环回,即(1-b),(2-b)和(3-b)。否则,对于通过网络的通信,Machine1和Machine2用于远程情况,即(1-a)、(2-a)和(3-a)。它们通过本地IP网络连接,无需任何其他网络。 ROS1和ROS2节点之间的通信需要一个ros_bridge [33],这是一个转换DDS主题的桥接节点。 ros_bridge计划已由开源机器人基金会(OSRF)发布[2]。 ros_bridge动态地为ROS2中的节点编组几个主题。因此,在(3-a)和(3-b)中,启动ros_bridge,ROS2节点在其上运行。图6显示了用于评估从ROS1到ROS2的通信的节点图。请注意,在使用ros_bridge时,唯一使用的是besteffort策略,因为ros_bridge不支持QoS策略中的RELIABLE策略。 3.2 Capabilities of ROS1 and ROS2 表4显示了是否可以测量每个数据大小的端到端延迟,并评论实验结果的因果因素。表4总结了ROS2的功能,并且可以进行一些有趣的观察。在“初始丢失”列中,ROS1无法在节点首次发送消息时获取初始消息,即使ROS1使用具有256 B等小数据的TCPROS并且在发布节点开始发送之前启动了订阅节点消息。虽然TCPROS对于传递中间消息是可靠的,但它不支持初始消息的可靠传输。当使用ros_bridge时,这会影响ROS2。相比之下,即使使用4 MB等大数据,ROS2也不会丢失初始消息。这证明了DDS的可靠性。在best-effort策略中,必须在发布节点开始发送没有“初始丢失”的消息之前启动订阅节点。另一方面,使用ROS2可靠策略,在发布节点开始发送消息之前不必启动订阅节点。这归因于QoS策略的耐久性中的TRANSIENT_LOCAL。可靠的策略被调整为为后期加入的订户节点提供弹性。在ROS1中,已发布的消息丢失并且从未恢复。此QoS策略可加速容错。 |