您正在阅读的是旧版本但仍受支持的 ROS 2 文档。 Jazzy.
服务质量设置
概述
ROS 2 提供了丰富多样的服务质量(QoS)策略,让你可以调整节点之间的通信。有了一套正确的服务质量策略,ROS 2 可以像 TCP 一样可靠,也可以像 UDP 一样尽力而为,而且在两者之间还有许多可能的状态。与主要只支持 TCP 协议的 ROS 1 不同,ROS 2 可受益于底层 DDS 传输的灵活性,在有损无线网络环境中使用 "尽力而为 "策略更为合适,或在实时计算系统中使用正确的服务质量配置文件以满足最后期限的要求。
一组 QoS "策略 "组合成一个 QoS "配置文件"。鉴于为特定场景选择正确 QoS 策略的复杂性,ROS 2 为常见用例(如传感器数据)提供了一套预定义的 QoS 配置文件。同时,开发人员还可以灵活控制 QoS 配置文件的特定策略。
可以为发布者、订阅、服务服务器和客户端指定 QoS 配置文件。一个 QoS 配置文件可独立应用于上述实体的每个实例,但如果使用不同的配置文件,它们有可能不兼容,从而导致信息无法传送。
服务质量政策
基本 QoS 配置文件目前包括以下策略的设置:
历史
保持最后队列深度:最多只能存储 N 个样本,可通过队列深度选项进行配置。
保留所有:根据底层中间件的配置资源限制,存储所有样本。
深度
队列大小历史记录:只有在 "历史记录 "策略设置为 "保留最后一次 "时才有效。
可靠性
最大努力:尝试运送样本,但如果网络不稳定,可能会丢失样本。
可靠保证样品送达,可多次重试。
耐用性
瞬态本地:发布者负责为 "晚加入 "的订阅持续提供样本。
挥发性样品的持久性:不试图持久保存样品。
截止日期
持续时间:向主题发布后续信息之间的预期最长间隔时间
寿命
持续时间过期:从发布信息到接收信息之间,信息不被视为过时或过期的最长时间(过期信息会被静默丢弃,实际上永远不会被接收)。
活力
自动租期:当节点的任何一个发布者发布了一条信息时,系统将认为该节点的所有发布者在另一个 "租期 "内都是存活的。
按主题分列的手册租期:如果系统手动断言(通过调用发布者 API)发布者仍然存活,则系统会认为发布者在另一个 "租期 "内仍然存活。
租赁期限
持续时间:在系统认为发布者已失去活力(失去活力可能是故障的征兆)之前,发布者表示自己还活着的最长时间。
对于每种非持续时间的策略,也有 "系统默认 "选项,即使用底层中间件的默认值。对于每种有持续时间的策略,也有一个 "默认 "选项,表示持续时间未指定,底层中间件通常会将其理解为无限长的持续时间。
与 ROS 1 的比较
ROS 2 中的 "历史 "和 "深度 "策略相结合,提供了类似于 ROS 1 中队列大小的功能。
ROS 2 中的 "可靠性 "策略类似于使用 UDPROS(仅在 ROS 2 中)。 roscpp
)表示 "尽力而为",TCPROS(ROS 1 默认值)表示 "可靠"。但请注意,即使是 ROS 2 中的可靠策略也是使用 UDP 实现的,它允许在适当情况下进行多播。
持久性 "策略 "瞬时本地 "与任何深度相结合,可提供与 "锁定 "发布者类似的功能。ROS 2 中的其余策略与 ROS 1 中的任何策略都不相似,这意味着 ROS 2 在这方面比 ROS 1 功能更丰富。未来,ROS 2 可能会提供更多的 QoS 策略。
服务质量配置文件
预案允许开发人员专注于自己的应用,而不必担心每一个可能的 QoS 设置。一个 QoS 配置文件定义了一组策略,这些策略有望在特定用例中完美配合。
目前定义的 QoS 配置文件有
发布者和订阅的默认 QoS 设置
为了使从 ROS 1 到 ROS 2 的过渡更加容易,我们希望采用类似的网络行为。默认情况下,ROS 2 中的发布者和订阅的历史记录为 "保留最后一次",队列大小为 10,可靠性为 "可靠",持久性为 "易变",活跃度为 "系统默认"。截止日期、生命周期和租期也都设置为 "默认"。
服务
与发布者和订阅一样,服务也是可靠的。服务使用易失性耐久性尤为重要,否则重新启动的服务服务器可能会收到过时的请求。虽然客户端不会收到多个响应,但服务器却无法避免收到过时请求的副作用。
传感器数据
对于传感器数据而言,在大多数情况下,及时接收读数比确保所有读数都到达更为重要。也就是说,开发人员希望在捕获到最新样本后立即获得,而不惜可能丢失一些样本。因此,传感器数据配置文件使用了最佳可靠性和较小的队列大小。
参数
ROS 2 中的参数基于服务,因此具有类似的特征。不同之处在于,参数使用了更大的队列深度,这样当参数客户端无法到达参数服务服务器时,请求就不会丢失。
系统默认
这将对所有策略使用 RMW 实现的默认值。不同的 RMW 实现可能有不同的默认值。
点击此处 了解上述配置文件使用的具体政策。这些配置文件中的设置会根据社区的反馈意见作进一步调整。
服务质量兼容性
请注意: 本节涉及发布者和订阅,但内容同样适用于服务服务器和客户端。
QoS 配置文件可单独为发布者和订阅配置。只有当发布者和订阅之间具有兼容的 QoS 配置文件时,才能建立连接。
QoS 配置文件兼容性根据 "请求与提供 "模式确定。订阅 要求 它愿意接受的 "最低质量 "的 QoS 配置文件,以及发布商 优惠 的 "最高质量 "的 QoS 配置文件。只有当请求的 QoS 配置文件的每项策略都不比提供的 QoS 配置文件更严格时,才会进行连接。多个订阅可以同时连接到一个发布者,即使它们请求的 QoS 配置文件不同。发布者和订阅之间的兼容性不受其他发布者和订阅的影响。
下表显示了不同策略设置的兼容性和结果:
可靠性 QoS 策略的兼容性:
出版商 |
订阅 |
兼容 |
---|---|---|
最大努力 |
最大努力 |
是 |
最大努力 |
可靠 |
没有 |
可靠 |
最大努力 |
是 |
可靠 |
可靠 |
是 |
耐用性 QoS 政策的兼容性:
出版商 |
订阅 |
兼容 |
结果 |
---|---|---|---|
挥发性 |
挥发性 |
是 |
仅限新信息 |
挥发性 |
瞬态本地 |
没有 |
无交流 |
瞬态本地 |
挥发性 |
是 |
仅限新信息 |
瞬态本地 |
瞬态本地 |
是 |
新旧信息 |
要实现晚订阅者也能看到的 "锁定 "主题,发布者和订阅者都必须同意使用 "暂存本地"。
限期服务质量政策的兼容性
假设 x 和 y 是任意有效的持续时间值。
出版商 |
订阅 |
兼容 |
---|---|---|
默认值 |
默认值 |
是 |
默认值 |
x |
没有 |
x |
默认值 |
是 |
x |
x |
是 |
x |
y (其中 y >; x) |
是 |
x |
y (其中 y <; x) |
没有 |
活度 QoS 政策的兼容性:
出版商 |
订阅 |
兼容 |
---|---|---|
自动 |
自动 |
是 |
自动 |
按主题分列的手册 |
没有 |
按主题分列的手册 |
自动 |
是 |
按主题分列的手册 |
按主题分列的手册 |
是 |
租期 QoS 政策的兼容性:
假设 x 和 y 是任意有效的持续时间值。
出版商 |
订阅 |
兼容 |
---|---|---|
默认值 |
默认值 |
是 |
默认值 |
x |
没有 |
x |
默认值 |
是 |
x |
x |
是 |
x |
y (其中 y >; x) |
是 |
x |
y (其中 y <; x) |
没有 |
要建立连接,所有影响兼容性的策略都必须兼容。例如,即使请求的和提供的 QoS 配置文件对具有兼容的可靠性 QoS 策略,但它们具有不兼容的耐用性 QoS 策略,仍无法建立连接。
如果没有建立连接,发布者和订阅者之间就不会传递信息。有一些机制可以检测到这种情况,这将在后面的章节中介绍。
与 ROS 1 的比较
在 ROS 1 中,具有相同主题上相同消息类型的任何发布者和订阅者都会被连接。在使用 ROS 2 时,需要注意请求的和提供的 QoS 配置文件不兼容的可能性。
服务质量事件
有些 QoS 策略可能会有与之相关的事件。开发人员可以为每个发布者和订阅提供由这些 QoS 事件触发的回调函数,并以他们认为合适的方式处理这些事件,类似于处理在主题上收到的消息的方式。
开发人员可以订阅与发布者相关的以下 QoS 事件:
错过提供截止日期
发布者未在截止时间 QoS 策略规定的预期时间内发布信息。
失去活力
出版商未能在租期内表明其活力。
提供不兼容的服务质量
发布者遇到了同一主题的订阅,该订阅请求的 QoS 配置文件无法满足所提供的 QoS 配置文件,导致发布者与该订阅之间没有连接。
开发人员可订阅以下与订阅相关的 QoS 事件:
错过要求的最后期限
订阅在截止时间 QoS 策略规定的预期时间内未收到信息。
活力改变
订阅方发现订阅主题上的一个或多个出版商未能在租期内显示其活跃度。
请求的服务质量不兼容
订阅遇到了同一主题的发布者,该发布者提供的 QoS 配置文件不符合所请求的 QoS 配置文件,导致订阅与该发布者之间没有连接。