ROS2官方教程:有关于服务质量的设置

这是我对ROS官方ROS2教程的翻译,纯个人理解,对于文中的关键词汇或不确定的语句标注了原文,如有错误或翻译问题还请指出。
文章翻译并未按照逐句逐词的方式进行,而是加入了我的一些主观思考,不过原则上还是会以原文思路为主。
原文:https://index.ros.org/doc/ros2/Concepts/About-Quality-of-Service-Settings/

有关于服务质量的设置

文章目录

  • 有关于服务质量的设置
    • 概述
    • QoS策略
    • 与ROS1的比较
    • QoS配置文件
    • QoS兼容性

概述

ROS2提供了一套非常丰富的**服务质量(Quality of Service, QoS)**策略,可以用于在节点之间调整通信。正确的设置服务质量策略之后,ROS2可以做到像TCP协议一样可靠,或者是像UDP一样高效,也可以选取两者之间的非常多种可能的状态。ROS1仅使用TCP支持通信,不同于ROS1,ROS2受益于在具有有损无线网络中的基础DDS传输的灵活性,高效策略将更加合适,然而当ROS2处于实时计算系统中时,必须依赖正确性服务质量配置(right Quality of Service profile)来确保实时性(meet deadlines)。

一系列的QoS策略组成了一个QoS配置文件(profile)。考虑到为一个特定的场景选择正确QoS策略的复杂性,ROS2为一些通用的使用场景提供了一系列预定义的QoS配置文件,比如传感器数据。同时,用户也可以灵活的控制QoS策略中的特殊配置文件。

QoS配置文件特定于不同的发布者、订阅者、服务器或者客户端。一个QoS配置文件可以独立应用于上述的每一个实例,但是如果使用了不同的配置文件,很有可能导致这些实例无法建立连接。

QoS策略

现在,基础的QoS配置文件包括如下的一些策略设置:

  • 历史记录(History)
    • 保留近期记录:仅仅保存最大N个样本数据,通过配置队列深度选项来指定最大数据限制。
    • 保留所有记录:存储所有的样本数据,但受限于底层中间件的配置资源限制。
  • 深度(Depth)
    • 队列深度:仅仅当历史记录选择为"保留最近记录"时,配合指定最大数据限制。
  • 可靠性(Reliability)
    • 尽力的(Best effort):尝试传输样本,但如果网络不稳定可能会丢失数据。
    • 可靠的(Reliable):保证样本的可靠传输,可能会尝试多次重传。
  • 持续性(Durability)
    • 局部瞬态(Transient local):发布者负责对晚到连接(late-joining)的订阅者保留样本数据。
    • 易变态(Volatile):不尝试保留样本数据。

对于每一个策略,都会有一个对应的系统默认值,可以使用通过DDS供应商工具定义的底层中间件默认值来确定,比如DDS供应商工具的XML配置文件。DDS可以配置大量的策略。由于它们和ROS1的特性很相似,所以基本都已经暴露了这些策略;而且很有可能在将来越来越多的策略会暴露给ROS2。

与ROS1的比较

ROS2中历史记录和深度的策略结合起来类似于ROS1中队列大小的功能。

ROS2中可靠性的策略类似于使用UDPROS(仅roscpp中含有)实现最尽力(best effort)的效果,或者使用TCPROS(ROS1默认)来实现最可靠的效果。然而,ROS2中的可靠性策略是通过UDP来实现的,如果需要的话可以允许多播。

持续性策略与深度为1的深度结合起来的功能类似于latching订阅者。

QoS配置文件

配置文件帮助开发者专注于他们的应用,而不需要担心每一个可能的QoS设置。一个QoS配置文件有一系列的策略组成,可以有效的与特定的用例结合起来使用。

当前的默认配置文件有:

  • 默认的发布者和订阅者QoS配置文件

    为了保证ROS1和ROS2之间的过渡,我们希望能设计一套相似的网络行为。默认情况下,发布者和订阅者依赖于ROS2,具有易变态的持续性(volatile durability)配置以及保留近期记录的历史记录配置。

  • 服务

    与发布者和订阅者一样,服务是可靠的。而且易变态的持续性对于服务来说特别重要,这是因为重新启动提供服务的服务端可能会接收到过期的请求。虽然客户端被保护避免接收多次响应,但服务端并没有被保护,以免于遭受接收到过期请求的副作用。

  • 传感器数据

    传感器数据对大多数用例来说,及时的接收读取值比保证接收所有数据值要更为重要。即使有着丢失数据的风险,开发者仍希望在捕获到数据之后能够最快的更新样本数据。因为这样的原因,传感器数据配置项使用可靠性为尽力的,并且使用最小的队列深度。

  • 参数

    ROS2中的参数依赖于服务,而且和服务的配置文件很相似。不同之处自傲与参数使用一个非常大的队列深度,从而保证请求不会丢失,比如说,客户端参数是不可能大于服务端参数长度的(the parameter client is unable to reach the parameter service server)。

  • 系统默认

    系统默认配置文件可以用于所有的策略。

点击这里可以查看使用上述配置文件的特殊策略。这些配置文件的设置可能会根据社区的反馈意见做进一步的调整。

虽然ROS2提供了一些通用的QoS配置文件,DDS中定义的策略也允许ROS用户利用现有的DDS文档中提供的大量资料来为其特定的用例配置QoS配置文件。

QoS兼容性

**注意:**这一部分涉及到发布者和订阅者,但是内容同样适合于描述服务端和客户端。

QoS配置文件可能会独立的为发布者和订阅者进行配置。只有当发布者和订阅者两端的QoS配置文件是兼容的情况下,一次连接才会成功建立。QoS配置文件的兼容性被基于"请求与提供"(Request vs Offerer)模型来决定。只有在所请求订阅者的策略不如发布者的策略更加严格的情况下,一次连接才会成功建立。两个策略中较为不严格的策略被用于连接策略。

暴露给ROS2的影响兼容性的QoS策略是持续性和可靠性策略。下表展示了不同策略配置的兼容性结果:

持续性配置文件的QoS兼容性:

发布者 订阅者 是否能够连接 结果
易变的 易变的 可以连接 易变的
易变的 局部瞬态的 不可以连接
局部瞬态的 易变的 可以连接 易变的
局部瞬态的 局部瞬态的 可以连接 局部瞬态的

可靠性配置文件的QoS兼容性:

发布者 订阅者 是否能够连接 结果
尽力的 尽力的 可以连接 尽力的
尽力的 可靠的 不可以连接
可靠的 尽力的 可以连接 尽力的
可靠的 可靠的 可以连接 可靠的

为了成功建立连接,影响兼容性的所有的配置文件必须都是兼容的。这意味着即使一个发布者订阅者对已经在可靠性QoS配置文件中具有兼容性,但如果他们在持续性QoS配置文件中不兼容,那么连接依然无法建立,反之同理。

你可能感兴趣的:(翻译文档,ROS)