rosbag2: 重载QoS策略 [待校准@6323]
Goal目标: Override覆盖用于记录和回放的Ros2Bag QoS配置文件设置。 [待校准@6324]
背景
随着ROS 2中DDS的引入,在记录和回放数据时,需要考虑发布者/订户节点的服务质量 (QoS) 兼容性。关于服务质量如何工作的更多细节可以在 here 找到。就本指南而言,只要知道只有可靠性和耐用性政策会影响出版商/订阅者是否兼容以及是否可以从彼此那里接收数据,就足够了。 [待校准@6326]
当记录/播放来自某个话题的数据时,Ros2Bag会调整其请求/提供的QoS配置文件,以防止信息丢失。在回放过程中,Ros2bag也试图保留话题最初提供的政策。某些情况可能需要指定明确的QoS配置文件设置,以便Ros2Bag可以记录/回放话题。这些QoS配置文件覆盖可以通过CLI使用 --qos-profile-overrides-path
标志指定。 [待校准@6327]
使用QoS覆盖
配置文件替代的YAML模式是针对每个QoS策略的具有键/值对的话题名称的字典: [待校准@6329]
topic_name: str
qos_policy_name: str
...
qos_duration: object
sec: int
nsec: int
如果未指定策略值,该值将回退到Ros2Bag使用的默认值。如果指定基于持续时间的策略,例如 deadline
或 lifespan
,则需要同时指定秒和纳秒。策略值由策略的短键决定,可以用 ros2topic
动词如 ros2 topic pub --help
找到。下面复制所有值以供参考。 [待校准@6330]
history: [keep_all, keep_last]
depth: int
reliability: [system_default, reliable, best_effort, unknown]
durability: [system_default, transient_local, volatile, unknown]
deadline:
sec: int
nsec: int
lifespan:
sec: int
nsec: int
liveliness: [system_default, automatic, manual_by_node, manual_by_topic, unknown]
liveliness_lease_duration:
sec: int
nsec: int
avoid_ros_namespace_conventions: [true, false]
示例
考虑话题 /talker
提供 transient_local
耐久性政策。ROS2出版社默认要求 volatile
耐用性。 [待校准@6331]
ros2 topic pub -r 0.1 --qos-durability transient_local /talker std_msgs/String "data: Hello World"
为了使Ros2Bag记录数据,我们希望覆盖该特定话题的记录策略,如下所示: [待校准@6332]
# durability_override.yaml
/talker:
durability: transient_local
history: keep_all
并从CLI调用它: [待校准@6333]
ros2 bag record -a -o my_bag --qos-profile-overrides-path durability_override.yaml
如果我们想回放bag文件,但使用不同的可靠性策略,我们可以这样指定一个; [待校准@6334]
# reliability_override.yaml
/talker:
reliability: best_effort
history: keep_all
并从CLI调用它: [待校准@6333]
ros2 bag play --qos-profile-overrides-path reliability_override.yaml my_bag
我们可以看到 ros2topic
的结果 [待校准@6335]
ros2 topic echo --qos-reliability best_effort /talker std_msgs/String