DDS(Data Distribution Service)————Publisher(8) DataWriterQos的RTPSEndpointQos与UserDataQosPolicy详解

DDS(Data Distribution Service)————Publisher(8) DataWriterQos的RTPSEndpointQos与UserDataQosPolicy详解

5.3.2.11 RTPSEndpointQos

RTPSEndpointQos 是指在 RTPS (Real-Time Publish-Subscribe) 协议中使用的 QoS (Quality of Service) 策略,控制 RTPS 端点的特性和行为。RTPS 是 DDS (Data Distribution Service) 的底层传输协议,负责数据传输的发现和管理。RTPSEndpointQos 包括一些与传输和通信相关的 QoS 策略,用于定义如何在网络上传输数据。

主要属性

  1. unicast_locator_list
    • 描述: 定义端点的单播地址列表,用于指定发送和接收数据的网络接口。
    • 用法: 用于配置端点的单播通信,通常在单播传输环境下使用。
  2. multicast_locator_list
    • 描述: 定义端点的多播地址列表,用于在多播组中发送和接收数据。
    • 用法: 用于配置端点的多播通信,通常在多播传输环境下使用。
  3. remote_locator_list
    • 描述: 指定远程端点的地址列表,用于定义可以与该端点通信的远程端点。
    • 用法: 用于配置与特定远程端点的通信,通常在需要与特定远程地址通信时使用。
  4. user_defined_id
    • 描述: 用于描述不同的StaticEndpointDiscovery。
    • 用法: 这个ID对于不同的StaticEndpointDiscovery是唯一的。
  5. entity_id
    • 描述:用于标识特定的 RTPS 端点 。
    • 用法: 用于区分端点。
  6. history_memory_policy
    • 描述: 用于定义如何管理和分配内存资源。它主要用于优化内存使用和控制内存分配的行为,从而提高系统的性能和稳定性,包括:
      • PREALLOCATED_MEMORY_MODE : 对于每个数据类型分配最大的内存,所以分配计数是最小的。
      • PREALLOCATED_WITH_REALLOC_MEMORY_MODE:为每个数据分配默认的内存,当一个较大的数据来到时,需要重新分配,因此比第一种方法减少了内存的消耗,但会增加一定的分配计数。
      • DYNAMIC_RESERVE_MEMORY_MODE:当有数据到来时会动态的分配内存,因此这将会使用最小的内存,相反的会拥有最多的分配计数。
      • DYNAMIC_REUSABLE_MEMORY_MODE:分配方法与DYNAMIC_RESERVE_MEMORY_MODE方法类似,有所区别的是对于未来的数据可以重用以前的空间。
    • 用法: 管理数据的内存分配。

C + + 示例 {\color{green}C++示例} C++示例


    RTPSEndpointQos endPointQos;

    endPointQos.entity_id = 3;
    endPointQos.user_defined_id = 4;

    Locator_t uncast_IP ;

    IPLocator::setIPv4(uncast_IP,"127.0.0.1");
    uncast_IP.port = 13400;

    Locator_t mulcast_Ip;
    IPLocator::setIPv4(mulcast_Ip,"123.32.32.12");
    mulcast_Ip.port = 7500;

    endPointQos.unicast_locator_list.push_back(uncast_IP);

    endPointQos.multicast_locator_list.push_back(mulcast_Ip);
    /*
        typedef enum MemoryManagementPolicy{
            PREALLOCATED_MEMORY_MODE, 
            PREALLOCATED_WITH_REALLOC_MEMORY_MODE, 
            DYNAMIC_RESERVE_MEMORY_MODE, 
            DYNAMIC_REUSABLE_MEMORY_MODE 
        }MemoryManagementPolicy_t;


    
    */

    endPointQos.history_memory_policy = RTPS::DYNAMIC_RESERVE_MEMORY_MODE;

    dataWriterQos.endpoint(endPointQos);

X M L 示例 {\color{green}XML示例} XML示例

<data_writer profile_name="writer_xml_conf_unicast_locators_profile">
    <userDefinedID>3</userDefinedID>
    <entityID>2</entityID> <!-- Int16 -->
    <unicastLocatorList>
        <locator>
            <udpv4>
                <port>7800</port>
            </udpv4>
        </locator>
    </unicastLocatorList>
    <multicastLocatorList>
        <locator>
            <udpv4>
                <address>239.255.0.4</address>
                <port>7900</port>
            </udpv4>
        </locator>
    </multicastLocatorList>
    <!-- The history memory policy is changed to DYNAMIC_RESERVE -->
    <historyMemoryPolicy>DYNAMIC</historyMemoryPolicy>
</data_writer>

<data_reader profile_name="reader_xml_conf_unicast_locators_profile">
    <userDefinedID>5</userDefinedID>
    <entityID>4</entityID> <!-- Int16 -->
    <unicastLocatorList>
        <locator>
            <udpv4>
                <port>7800</port>
            </udpv4>
        </locator>
    </unicastLocatorList>
    <multicastLocatorList>
        <locator>
            <udpv4>
                <address>239.255.0.4</address>
                <port>7900</port>
            </udpv4>
        </locator>
    </multicastLocatorList>
    <historyMemoryPolicy>PREALLOCATED_WITH_REALLOC</historyMemoryPolicy>
</data_reader>
5.3.2.12 UserDataQosPolicy

UserDataQosPolicy 是 DDS(Data Distribution Service)中的一种 QoS(Quality of Service)策略,用于为 DomainParticipant、Publisher、Subscriber、DataWriter 或 DataReader 提供用户自定义的数据。这些数据可以用来在 DDS 实体之间传递应用程序特定的信息。

N o t e s : 此策略会影响所有 D D S 实体,并且可以再已经开启的 D D S 上使用 {\color{red}Notes:此策略会影响所有DDS实体,并且可以再已经开启的DDS上使用} Notes:此策略会影响所有DDS实体,并且可以再已经开启的DDS上使用

主要属性

  1. collection

    • 描述:可以将信息附加到实体对象中,collection的数据类型为vector<uint8_t>
    • 作用:用于实体之间的数据传递或者身份认证。

C + + 示例 {\color{green}C++示例} C++示例

   UserDataQosPolicy userDataPolicy;

    std::vector<eprosima::fastrtps::rtps::octet> vec;

    vec = userDataPolicy.data_vec();

    eprosima::fastrtps::rtps::octet val = 10;

    vec.push_back(val);

    val = 20;

    vec.push_back(val);

    userDataPolicy.data_vec(vec);

    dataWriterQos.user_data(userDataPolicy);

X M L 示例 {\color{green}XML示例} XML示例

<participant profile_name="participant_xml_conf_userdata_profile">
    <rtps>
        <userData>
            <value>3.a</value>
        </userData>
    </rtps>
</participant>

<data_writer profile_name="writer_xml_conf_userdata_profile">
    <qos>
        <userData>
            <value>3.a</value>
        </userData>
    </qos>
</data_writer>

<data_reader profile_name="reader_xml_conf_userdata_profile">
    <qos>
        <userData>
            <value>3.a</value>
        </userData>
    </qos>
</data_reader>
  • 29
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值