3.1.2.2.4. RTPSReliableWriterQos
RTPS(Real-Time Publish-Subscribe)可靠写入者的QoS(Quality of Service)策略允许配置多个可靠写入者的属性。以下是RTPSReliableWriterQos的数据成员列表及其详细说明。
QoS Policy 数据成员
数据成员名称 | 类型 |
---|---|
times | WriterTimes |
disable_positive_acks | DisablePositiveACKsQosPolicy |
disable_heartbeat_piggyback | DisableHeartbeatPiggyback |
- times: 定义了RTPSWriter事件的持续时间。有关更多详细信息,请参阅 WriterTimes。
- disable_positive_acks: 配置禁用正确认知(positive acknowledgments)的设置。有关更多详细信息,请参见 DisablePositiveACKsQosPolicy。
- disable_heartbeat_piggyback: 配置禁用心跳附加机制的设置。有关更多详细信息,请参见 DisableHeartbeatPiggyback。
注意:此QoS策略适用于DataWriter实体。仅可在启用的实体上修改DisablePositiveACKsQosPolicy的持续时间数据成员和times数据成员。
WriterTimes
这个结构定义了与可靠写入者事件相关的时间参数。
结构成员列表
成员名称 | 类型 | 默认值 |
---|---|---|
initial_heartbeat_delay | Duration_t | 12ms |
heartbeat_period | Duration_t | 3s |
nack_response_delay | Duration_t | 5ms |
nack_supression_duration | Duration_t | 0s |
- initial_heartbeat_delay: 定义初始心跳延迟的持续时间。
- heartbeat_period: 指定定期发送心跳之间的间隔。
- nack_response_delay: 确立ACKNACK消息响应所应用的延迟持续时间。
- nack_supression_duration: RTPSWriter在发送数据后会忽略收到的nack消息,直到经过该持续时间。
DisableHeartbeatPiggyback
除了使用heartbeat_period定期发送心跳外,可靠DataWriters还会利用一种机制,在向DataReaders传递数据时将心跳子消息附加到同一消息中。这种机制在某些特定情况下有效,例如:
- 当DataWriter将字节数发送到套接字等于套接字缓冲区长度时,最后一条数据后会附加一个心跳子消息。
- 当DataWriter历史记录满时,DataWriter开始在每个数据后附加心跳子消息。
可以通过此政策来禁用此机制。
示例代码
// 此示例仅适用于 DataWriter 实体
DataWriterQos writer_qos;
// 初始化时, RTPSReliableWriterQos 默认构造初始心跳延迟为 12 ms
// 将初始心跳延迟更改为 20 纳秒
writer_qos.reliable_writer_qos().times.initial_heartbeat_delay = {0, 20};
// RTPSReliableWriterQos 默认构造周期性心跳间隔为 3 s
// 将心跳周期更改为 5 秒
writer_qos.reliable_writer_qos().times.heartbeat_period = {5, 0};
// RTPSReliableWriterQos 默认构造 ACKNACK 响应延迟为 5 ms
// 将 ACKNACK 响应延迟更改为 10 纳秒
writer_qos.reliable_writer_qos().times.nack_response_delay = {0, 10};
// RTPSReliableWriterQos 默认构造 nacks 抑制持续时间为 0 s
// 将 nacks 抑制持续时间更改为 20 纳秒
writer_qos.reliable_writer_qos().times.nack_supression_duration = {0, 20};
// 您还可以更改 DisablePositiveACKsQosPolicy。有关详细信息,请参见 DisablePositiveACKsQosPolicy 部分。
writer_qos.reliable_writer_qos().disable_positive_acks.enabled = true;
// RTPSReliableWriterQos 默认构造时禁用了 心跳 piggyback机制
// 禁用心跳 piggyback机制。
writer_qos.reliable_writer_qo.s.disable_heartbeat_piggyback = true;
// 使用修改后的QoS创建 DataWriter 实体
writer_ = publisher_->create_datawriter(topic_, writer_qos);
总结
以上内容介绍了RTPSReliableWriterQoS策略及其相关参数,可以帮助开发人员根据具体需求优化RTPS Writer性能。在进行配置时,需要理解各个参数对通信效率、稳定性及实时性的影响,以确保系统能以最佳状态运行。
内容由零声教学AI助手提供,问题来源于学员提问