这段文字讨论了 eProsima Fast DDS 中的非合并 QoS(服务质量)设置,特别是关于数据写入者(DataWriter)的操作模式。以下是主要内容的详细解释:
12.1 非合并 QoS
PropertyPolicyQos 选项:
- 用于开发新的 eProsima 扩展 QoS。在合并新 QoS 策略之前,通常会使用这种通用的 QoS 策略进行设置。
- 由于这一部分会频繁更新,用户在升级到不同版本后建议检查最新的更改。
12.1.1 数据写入者操作模式 QoS 策略
默认推送模式:
- 默认情况下,Fast DDS 的 DataWriters 使用推送模式。这意味着它们将新的样本添加到队列中,并立即将其发送给匹配的读取者(DataReaders)。
- 对于产生不定期数据突发的写入者,这可能导致网络流量过大,从而增加在不可靠传输(如 UDP)上丢包的可能性。
拉取模式替代方案:
- 配置 DataWriters 为拉取模式允许每个读取者自行调节其数据流。
- 在这种模式下,写入者通知读取者可用的数据,并等待读取者请求能够处理的数据量。虽然延迟增大,但这种模型能提供更高的可靠性,同时使用更少的数据包。
心跳机制:
- DataWriters 定期通过心跳信号公告其队列状态。当 DataReaders 接收到心跳后,会请求 DataWriter 发送它们希望处理的样本。因此,可以通过调整心跳周期来调节发布速率。
配置示例
PropertyPolicyQos 设置
- 属性名称:
"fastdds.push_mode"
- 值选择:
"true"
或"false"
(默认值为"true"
)
C++ 示例代码
DataWriterQos wqos;
// 启用拉取模式
wqos.properties().properties().emplace_back(
"fastdds.push_mode",
"false");
XML 配置示例
<?xml version="1.0" encoding="UTF-8" ?>
<profiles xmlns="http://www.eprosima.com">
<data_writer profile_name="pull_mode_datawriter_xml_profile">
<propertiesPolicy>
<properties>
<!-- 启用拉取模式 -->
<property>
<name>fastdds.push_mode</name>
<value>false</value>
</property>
</properties>
</propertiesPolicy>
</data_writer>
</profiles>
注意事项
同一进程中的通信 (Intra-process delivery):
- 始终使用推送模式。
BEST_EFFORT_RELIABILITY_QOS 读者通信:
- 始终使用推送模式。
不一致性警告:
- 如果启用了拉取模式且将
ReliabilityQosPolicyKind
设置为BEST_EFFORT_RELIABILITY_QOS
是不一致的。 - 如果启用了拉取模式且将
heartbeat_period
设置为c_TimeInfinite
是不一致的。
- 如果启用了拉取模式且将
总结来说,这部分内容主要介绍了如何配置 Fast DDS 中 DataWriter 的工作模式,以及相关的一些注意事项和潜在的不一致问题,以确保数据传输效率和可靠性。
内容由零声教学AI助手提供,问题来源于学员提问