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