rosbag2:覆盖 QoS 策略

目标 覆盖 Ros2Bag QoS 配置文件的录制和重放设置。

背景介绍

随着 ROS 2 中 DDS 的引入,在记录和回放数据时需要考虑发布者/订阅者节点的服务质量(QoS)兼容性。有关 QoS 工作原理的更多详情,请查阅 这里.在本指南中,只需知道可靠性和持久性策略会影响发布者/订阅者是否兼容并能相互接收数据。

Ros2Bag 会在记录/播放来自主题的数据时调整其请求/提供的 QoS 配置文件,以防止信息丢失。在播放过程中,Ros2bag 还会尝试保留话题最初提供的策略。某些情况下,Ros2Bag 可能需要指定明确的 QoS 配置文件设置,以便录制/播放主题。这些 QoS 配置文件重写可以通过 CLI 使用 --qos-profile-overrides-path(qos 配置文件覆盖路径 旗子

使用服务质量重写

配置文件重写的 YAML 模式是一个主题名称字典,其中包含每个 QoS 策略的键/值对:

topic_name: 字符串
  qos_policy_name: 字符串
  ...
  qos_duration: 反对
    秒钟: int
    nsec: int

如果未指定策略值,该值将回退到 Ros2Bag 使用的默认值。如果指定了基于持续时间的策略,例如 期限寿命因此,您需要指定秒和纳秒。策略值由策略的短键决定,可以使用 ros2topic 动词,如 玫瑰2 主题 酒吧 --帮助.所有数值复制如下,以供参考。

历史: [keep_all, keep_last]
深度: int
可靠性: [系统默认, 可靠, 尽力, 未知]
耐久性: [系统默认, 瞬态本地, 易变, 未知]
期限:
  秒钟: int
  nsec: int
寿命:
  秒钟: int
  nsec: int
生气: [系统默认, 自动, 按主题手册, 未知]
释放持续时间:
  秒钟: int
  nsec: int
避免罗斯命名空间公约: [, 错误]

示例

考虑一个主题 /对话者 提供 瞬态本地 耐用性政策。ROS 2 默认请求发布者 易变 耐用性。

ros2 topic pub -r 0.1 --qos-durability transient_local /talker std_msgs/String "data:Hello World";

为了让 Ros2Bag 记录数据,我们需要像这样覆盖特定主题的记录策略:

# durability_override.yaml
/对话者:
  耐久性: 瞬态本地
  历史: keep_all

然后通过 CLI 调用它:

ros2 bag record -a -o my_bag --qos-profile-overrides-path durability_override.yaml

如果我们想使用不同的可靠性策略重放文件袋,可以指定这样的策略;

# reliability_override.yaml
/对话者:
  可靠性: 尽力
  历史: keep_all

然后通过 CLI 调用它:

ros2 bag play --qos-profile-overrides-path reliability_override.yaml my_bag

我们可以看到以下结果 玫瑰2 主题

ros2 topic echo --qos-reliability best_effort /talker std_msgs/String