概述
ROS 2提供丰富的服务质量(QoS)策略,允许您调整节点之间的通信。通过正确的服务质量策略集,ROS 2可以像TCP一样可靠优先,也可以像UDP一样效率优先,中间有许多可能的状态。与主要仅支持TCP的ROS 1不同,ROS 2受益于具有损耗的无线网络的环境中的基础DDS传输的灵活性,其中“效率优先”策略将更适合,或者在具有正确质量的实时计算系统中需要服务配置文件来满足最后期限。
一组QoS“策略”组合以形成QoS“配置文件”。考虑到为给定方案选择正确的QoS策略的复杂性,ROS 2为常见用例(例如传感器数据)提供了一组预定义的QoS配置文件。同时,用户可以灵活地控制QoS策略的特定配置文件。
可以为发布者,订阅者,服务服务器和客户端指定QoS配置文件。QoS配置文件可以独立地应用于前述实体的每个实例,但是如果使用不同的配置文件,则它们可能不会连接。
QoS策略
基本QoS配置文件当前包括以下策略的设置:
- 历史
- 保持最后:仅存储N个样本,可通过队列深度选项进行配置。
- 全部保留:根据底层中间件的配置资源限制存储所有样本。
- 深度
- 队列的大小:与“保持最后”一起使用时有效。
- 可靠性
- 效率优先:尝试传输样本,但如果网络不好,可能会丢失样本。
- 可靠性优先:保证样本已交付,可多次重试。
- 持久性
- 瞬态本地:发布者负责为“迟到的”订阅者保留样本。
- 易变:不试图保持样品。
对于每个策略,还有“system default”选项,它使用可以通过DDS供应商工具(例如XML配置文件)定义的底层中间件的默认值。DDS本身具有可以配置的更广泛的策略。由于它们与ROS 1中的特征相似,因此展现了这些策略; 有可能在未来更多的政策将在ROS 2中展现。
与ROS 1的比较
ROS 2中的历史和深度策略结合起来提供类似于ROS 1中的队列大小的功能。
ROS 2中的可靠性策略类似于使用UDPROS(仅roscpp
用于“效率优先”)或TCPROS(ROS 1默认值)用于可靠性优先。但请注意,即使ROS 2中的可靠策略也是使用UDP实现的,如果合适,它允许进行多播。
持久性策略与深度相结合提供了类似于"latching" 订阅者的功能。
QoS配置文件
配置文件允许开发人员专注于他们的应用程序,而无需担心每个QoS设置。QoS配置文件定义了一组策略,这些策略可以在特定使用情况下很好地协同工作。
当前定义的QoS配置文件是:
-
发布者和订阅者的默认QoS设置
为了实现从ROS 1到ROS 2的转换,期望执行类似的网络行为。默认情况下,发布者和订阅者在ROS 2中是可靠的,具有不稳定的持久性,并且“保持最后”的历史记录。
-
服务
与发布者和订阅者一样,服务也是可靠的。对于使用volatile持久性的服务尤其重要,否则重新启动的服务服务器可能会收到过时的请求。虽然保护客户端不接收多个响应,但服务没有受保护以避免接收过期请求的副作用。
-
传感器数据
对于传感器数据,在大多数情况下,及时接收读数更重要,而不是确保所有读数都到达。也就是说,开发人员一旦捕获就会想要最新的样本,但可能会损失一些样本。因此,传感器数据配置文件使用效率优先的可靠性和较小的队列深度。
-
参数
ROS 2中的参数基于服务,因此具有类似的配置文件。不同之处在于参数使用更大的队列深度,以便在例如参数客户端无法访问参数服务服务器时请求不会丢失。
-
系统默认
这将使用所有策略的系统默认值。
单击此处查看上述配置文件使用的特定策略。根据社区的反馈,这些配置文件中的设置可能会进一步调整。
虽然ROS 2为常见用例提供了一些QoS配置文件,但使用DDS中定义的策略允许ROS用户利用现有DDS文档的丰富知识库来为其特定用例配置QoS配置文件。
QoS兼容性
注意:此部分涉及发布者和订阅者,但内容以相同方式应用于服务服务器和客户端。
可以独立地为发布者和订阅者配置QoS配置文件,只有当发布者与订阅者具有兼容的QoS配置文件时,才会建立连接。QoS配置文件兼容性是基于“请求与提供者”模型确定的,其中仅在所请求的订阅者策略不比发布者的策略更严格时才进行连接。两个策略中更严格策略将用于连接。
ROS 2中展示的影响兼容性的QoS策略是持久性和可靠性策略。下表显示了不同策略设置和结果的兼容性:
QoS持久性配置文件的兼容性
Publisher | Subscriber | Connection | Result |
---|---|---|---|
Volatile | Volatile | Yes | Volatile |
Volatile | Transient local | No | - |
Transient local | Volatile | Yes | Volatile |
Transient local | Transient local | Yes | Transient local |
QoS可靠性配置文件的兼容性
Publisher | Subscriber | Connection | Result |
---|---|---|---|
Best effort | Best effort | Yes | Best effort |
Best effort | Reliable | No | - |
Reliable | Best effort | Yes | Best effort |
Reliable | Reliable | Yes | Reliable |
为了建立连接,所有影响兼容性的策略必须兼容。也就是说,即使发布者 - 订户对具有兼容的可靠性QoS配置文件,如果它们具有不兼容的持久性QoS配置文件,则不会建立连接,反之亦然。