ROS 2 index翻译(三)——关于服务质量设置
1、综述
ROS 2提供种类丰富的服务质量(Quality of Service,QoS)策略,允许你调整节点间的通信。通过正确设置服务质量策略,在许多许多可能的状态下,ROS 2可以和TCP一样可靠,或者和UDP一样"尽力而为"。不像ROS 1那样主要仅支持TCP,ROS 2 得益于底层DDS传输的灵活性,在易损耗的无线网络环境下,“尽力而为”策略将更加适合,或者在实时计算系统中,需要正确的服务质量profile(先翻译成配置文件吧)来满足截止时间。
一组QoS“策略”组合成QoS“配置文件”。考虑到为给定方案选择正确的QoS策略的复杂性,ROS 2为常见用例(例如传感器数据)提供了一组预定义的QoS配置文件。同时,用户可以灵活地控制QoS策略的特定配置文件。
可以为发布者,订阅者,服务服务器和客户端指定QoS配置文件。QoS配置文件可以独立地应用于前述实体的每个实例,但是如果使用不同的配置文件,则它们可能将连接不上。
2.QoS策略
基本的QoS配置文件目前包含以下策略设置:
- 历史
- 保持最后:仅存储N个样本,可通过队列深度选项进行配置。
- 全部保留:根据底层中间件的配置资源限制存储所有样本。
- 深度
- 队列大小:如果与“保持最后”一起使用,则仅被尊重(字面意思,不知何意)。
- 可靠性
- 尽力而为:尝试传递样本,但如果网络鲁棒性不高,可能会丢失样本。
- 可靠:保证样品已交付,可能重试多次。
- 持久性
- 暂态本地:发布者负责为“迟到的”订阅者保留样本。
- 易变性:没有试图保留样品。
对于每个策略,它还有“系统默认”选项,使用底层中间件的默认值,而中间件可能通过DDS供应商工具(例如XML配置文件)来定义。DDS本身具有可以配置的更广泛的策略。由于它们与ROS 1中的特征相似,因此这些策略已经曝光了; 有可能在未来更多的策略将在ROS 2中曝光(翻译成“出现”更贴切)。
3.与ROS 1比较
ROS 2中的历史和深度策略结合起来提供功能类似于ROS 1中的队列大小的功能。
ROS 2中的可靠性策略类似于使用UDPROS(仅roscpp)
用于“尽力而为”策略,或者TCPROS(ROS 1默认值)用于"可靠"策略。但请注意,即使ROS 2中的"可靠"策略也是使用UDP实现的,如果合适,它允许进行组播。
持久性策略与深度1相结合提供了类似于“锁定”订阅者的功能。
4.QoS配置文件
配置文件允许开发人员专注于他们的应用程序,而无需担心每个QoS设置。QoS配置文件定义了一组策略,这些策略可以在特定用例中很好地协同工作。
当前定义的QoS配置文件是:
-
发布者和订阅者的默认QoS设置
为了实现从ROS 1到ROS 2的转换,执行类似的网络行为是可取的。默认情况下,发布者和订阅者在ROS 2中是可靠的,具有不稳定的持久性和“保持最后”的历史策略。
-
服务
与发布者和订阅者一样,服务也是可靠的。这对于使用易变的持久性的服务尤其重要,否则重新启动的服务服务器可能会收到过期的请求。虽然能保护客户端不接收多个响应,但是没有保护服务器免受接收过期请求的副作用。
-
传感器数据
对于传感器数据,在大多数情况下,及时接收读数更重要,而不是确保所有读数都送达。也就是说,开发人员一旦捕获到样本数据,他们就希望这是最新的,但这可能会损失一些样本。因此,传感器数据配置文件使用“尽力而为”的可靠性策略和较小的队列深度。
-
参数
ROS 2中的参数基于服务,因此具有类似的配置文件。不同之处在于参数使用更大的队列深度,以使请求不会丢失,例如在参数客户端无法访问参数服务服务器时。
-
系统默认
所有的策略使用系统默认值。
单击此处查看上述配置文件使用的特定策略。根据社区的反馈,这些配置文件中的设置可能会进一步调整。
虽然ROS 2为常见用例提供了一些QoS配置文件,但使用DDS中定义的策略允许ROS用户利用现有DDS文档的庞大知识库来为其特定用例配置QoS配置文件。
5.QoS兼容性
注意:此部分涉及发布者和订阅者,但其内容以相同方式可应用于服务服务器和客户端。
QoS配置文件可以分别为发布者和订阅者独立配置。仅当一对发布者和订阅者具有兼容的QoS配置文件时,他们之间的连接才会建立。QoS配置文件兼容性是基于“请求vs提供”模型确定的,其中仅在订阅者的请求策略不比发布者的策略更严格时才进行连接。两个策略中较不严格的将用于连接的策略。
ROS 2中暴露的影响兼容性的QoS策略是持久性和可靠性策略。下表显示了不同策略设置和结果的兼容性:
QoS持久性配置文件的兼容性:
发布者 | 订阅者 | 连接 | 结果 |
易变的 | 易变的 | YES | 易变的 |
易变的 | 暂态本地 | NO | - |
暂态本地 | 易变的 | YES | 易变的 |
暂态本地 | 暂态本地 | YES | 暂态本地 |
QoS可靠性配置文件的兼容性:
发布者 | 订阅者 | 连接 | 结果 |
尽力而为 | 尽力而为 | YES | 尽力而为 |
尽力而为 | 可靠 | NO | - |
可靠 | 尽力而为 | YES | 尽力而为 |
可靠 | 可靠 | YES | 可靠 |
为了建立连接,所有影响兼容性的策略必须兼容。也就是说,即使发布者 - 订阅者对具有兼容的可靠性QoS配置文件,如果它们具有不兼容的持久性QoS配置文件,则不会建立连接,反之亦然。
英文原文:https://index.ros.org/doc/ros2/Concepts/About-Quality-of-Service-Settings/