OpenDDS通讯中rtps_discovery对等发现的基本配置和说明

OpenDDS的对等发现模式中,可以采用组播或单播方式进行发现和基于主题的DataReader和DataWriter的匹配,下面是一个简单的配置样例:

[common]
DCPSGlobalTransportConfig=$file
ORBDebugLevel=0
DCPSDebugLevel=3
DCPSTransportDebugLevel=0
ORBLogFile=publisher.log

[domain/2]
DiscoveryConfig=fast_rtps

[rtps_discovery/fast_rtps]
ResendPeriod=10
InteropMulticastOverride=239.255.0.11

SpdpSendAddrs=192.168.102.1:7910
##PB=30000
##DX=0
##D1=0
SedpMulticast=0
SedpLocalAddress=192.168.102.1:
TTL=20

[transport/the_rtps_transport]
transport_type=rtps_udp
use_multicast=0
local_address=192.168.179.1:
ttl=20

简要说明

  • DCPSDebugLevel 发布方、订阅方通讯握手日志等级,0~10
  • DCPSTransportDebugLevel,数据发送、接收日志等级,0~5
  • ORBLogFile日志文件,可以时相对路径(执行应用的路径)和绝对路径的文件名
  • ResendPeriod,重新握手的间隔周期(秒),运行正常后,建议调整为30秒
  • InteropMulticastOverride是SPDP发现时的组播地址,缺省为239.255.0.1,如果通讯间组播地址不同,SPDP握手不会成功;
  • SpdpSendAddrs,单播握手对方域的地址和端口,多个时以”,”进行连接
  • SedpLocalAddress,单播握手端点本地绑定ip,端口可不配置;如果为单网卡,则无需配置
  • transport_type,传输协议,目前都采用rtps_udp协议
  • local_address,数据传输本地绑定ip,端口可不配置;单网卡,可不配置
  • 0
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
以下是一个简单的使用OpenDDS实现RTPS协议的C++例子: ```cpp #include <dds/DCPS/Service_Participant.h> #include <dds/DCPS/Marked_Default_Qos.h> #include <dds/DCPS/WaitSet.h> #include <dds/DCPS/transport/framework/TheTransportFactory.h> #include <dds/DCPS/transport/rtps_udp/RtpsUdp.h> #include <dds/DCPS/transport/rtps_udp/RtpsUdpInst.h> #include <dds/DCPS/transport/rtps_udp/RtpsUdpInst_rch.h> #include <dds/DCPS/transport/rtps_udp/RtpsUdpDataLink_rch.h> #include <dds/DCPS/RTPS/RtpsDiscovery.h> #include <dds/DCPS/RTPS/RtpsDiscovery_rch.h> #include "MyTypeSupportImpl.h" int main(int argc, char** argv) { DDS::DomainParticipantFactory_var dpf = TheParticipantFactoryWithArgs(argc, argv); DDS::DomainParticipant_var participant = dpf->create_participant( 42, PARTICIPANT_QOS_DEFAULT, DDS::DomainParticipantListener::_nil(), OpenDDS::DCPS::DEFAULT_STATUS_MASK); MyTypeSupportImpl* ts_servant = new MyTypeSupportImpl(); CORBA::String_var type_name = ts_servant->get_type_name(); ts_servant->register_type(participant, type_name); DDS::Topic_var topic = participant->create_topic( "MyTopic", type_name, TOPIC_QOS_DEFAULT, DDS::TopicListener::_nil(), OpenDDS::DCPS::DEFAULT_STATUS_MASK); OpenDDS::RTPS::RtpsDiscovery_rch disc = new OpenDDS::RTPS::RtpsDiscovery(""); OpenDDS::DCPS::TransportInst_rch inst = TheTransportFactory->create_inst("rtps_udp", "my_inst"); OpenDDS::DCPS::RtpsUdpInst_rch rtps_inst = OpenDDS::DCPS::static_rchandle_cast<OpenDDS::DCPS::RtpsUdpInst>(inst); OpenDDS::DCPS::TransportConfig_rch config = TheTransportFactory->create_config("my_config"); config->instances_.push_back(inst); OpenDDS::DCPS::TransportRegistry::instance()->bind_config(config, participant); OpenDDS::DCPS::TransportImpl_rch transport_impl = TheTransportFactory->create_transport_impl(1, OpenDDS::DCPS::AUTO_CONFIG); OpenDDS::DCPS::DataWriterImpl_rch writer_impl = dynamic_cast<OpenDDS::DCPS::DataWriterImpl*>(topic->create_datawriter( publisher, DATAWRITER_QOS_DEFAULT, DDS::DataWriterListener::_nil(), OpenDDS::DCPS::DEFAULT_STATUS_MASK).in()); OpenDDS::DCPS::DataWriterImpl_rch reader_impl = dynamic_cast<OpenDDS::DCPS::DataWriterImpl*>(topic->create_datareader( subscriber, DATAREADER_QOS_DEFAULT, DDS::DataWriterListener::_nil(), OpenDDS::DCPS::DEFAULT_STATUS_MASK).in()); while (true) { writer_impl->write(foo); reader_impl->read(foo_seq, params); } DDS::Duration_t timeout = { 60, 0 }; participant->delete_contained_entities(); dpf->delete_participant(participant); TheServiceParticipant->shutdown(); return 0; } ``` 请注意,此示例仅用于演示如何使用OpenDDS实现RTPS协议。完整的应用程序需要更多的代码和配置

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值