当前位置: 首页 > news >正文

ROS2默认中间件FASTDDS中的域domain理解

1.DDS中的几个概念:

域Domain:通讯域,或是工作空间。

话题Topic:数据交换的主题。

参与者participant:发布者(publisher)和订阅者(subsciber)的载体。

2.domainID

domainID是域的唯一标识。

只有相同domainID的参与者才能相互发现和通讯。

在同一个域中,主题是唯一的,只有主题相同的参与者才能相互通讯。

在同一域中,参与者的GUID是唯一的。

3.参与者之间的相互发现和通讯

3.1发现:只有处于同一域中,即相同的domainID, 才能相互发现。

3.2通讯(数据交换): 只有相同的主题,才能进行数据交换。

4.端口port。

源码中的端口号计算:

/** * Get a multicast port based on the domain ID. * * @param domainId Domain ID. * @return Multicast port */ inline uint32_t getMulticastPort( uint32_t domainId) const { uint32_t port = portBase + domainIDGain * domainId + offsetd0; return port; } /** * Get a unicast port based on the domain ID and the participant ID. * * @param domainId Domain ID. * @param RTPSParticipantID Participant ID. * @return Unicast port */ inline uint32_t getUnicastPort( uint32_t domainId, uint32_t RTPSParticipantID) const { uint32_t port = portBase + domainIDGain * domainId + offsetd1 + participantIDGain * RTPSParticipantID; return port; } /** * Get a discovery server port based on the domain ID. * * @param domainId Domain ID. * @return Discovery server port */ inline uint16_t get_discovery_server_port( uint32_t domainId) const { uint32_t port = portBase + domainIDGain * domainId + offsetd4; return static_cast<uint16_t>(port); }

5.当端口号冲突时,可以使用这两个函数修改默认端口号:

(1)void RTPSParticipantImpl::setup_user_traffic() :

default_unicast_port_ = metatraffic_unicast_port_ + m_att.port.offsetd3 - m_att.port.offsetd1;
(2)Locator_t& RTPSParticipantImpl::applyLocatorAdaptRule(Locator_t& loc):

uint16_t delta = m_att.port.participantIDGain;

if (metatraffic_unicast_port_ == loc.port)

{

metatraffic_unicast_port_ += delta;

std::cout << "applyLocatorAdaptRule metatraffic_unicast_port_. " <<metatraffic_unicast_port_<< std::endl;

}

else if (default_unicast_port_ == loc.port)

{

default_unicast_port_ += delta;

}

loc.port += delta;

return loc;

6.domainID的比较 、topic 名称的比较

domain ID 通过函数bool PDPListener::check_discovery_conditions(
ParticipantProxyData& participant_data)进行比较。


topic 名称 通过函数bool EDP::valid_matching(
const WriterProxyData* wdata,
const ReaderProxyData* rdata,
MatchingFailureMask& reason,
fastdds::dds::PolicyMask& incompatible_qos)进行比较

http://www.jsqmd.com/news/531567/

相关文章:

  • 从0基础到AI专家:手把手教你搭建智能体,掌握未来生产力革命!
  • Open Computer Use:重构AI自主操作流程,突破人机协作效率瓶颈
  • VisualSVN Server安装避坑指南:从下载到配置的完整流程(含常见错误解决)
  • 数字孪生如何在培训仿真中实现“零风险试错”与“降本增效”?
  • 3大突破!Geoda如何重新定义空间数据分析效率
  • Java 新纪元 — JDK 25 + Spring Boot 4 全栈实战(十五):序列化选型与性能实测——别让JSON拖垮你的微服务
  • 3个极简步骤,打造你的无广告音乐播放中心
  • MySQL的三大核心日志详解(redo log,bin log,undo log)
  • 4G模组SIM卡硬件电路避坑指南:从USIM信号到热插拔设计
  • C语言--C语言的常见概念
  • 2026年口碑好的快干型热升华转印纸/江阴快干型转印纸/离型转印纸/快干型转印纸厂家精选 - 品牌宣传支持者
  • 庞特里亚金极小值原理 vs 动态规划:在最优控制中如何选择?
  • 小样本二分类愁死个人?每次交叉验证结果波动大得离谱?试试LOOCV(留一法交叉验证)搭配SVM,精准拿捏小数据的分类效果,还能一键出全指标+ROC曲线
  • 深度体验通义灵码——从代码生成到智能问答,全方位解析AI编程助手如何重塑开发流程
  • SpringBoot循环依赖避坑指南:为什么@Lazy注解不是万能的?
  • 2026年3月DMC绝缘材料门店口碑榜,好店推荐来袭,DMC绝缘材料直销厂家聚焦优质品牌综合实力分析 - 品牌推荐师
  • 3GPP TR 36.763避坑指南:卫星物联网项目中NB-IoT与eMTC的5大部署陷阱
  • OFA图像描述惊艳效果:COCO蒸馏版生成‘A man riding a bicycle on a city street’级描述
  • Clawdbot部署教程:Qwen3:32B网关与Prometheus+Grafana监控体系集成
  • YOLO系列模型通用搭建流程——YOLOv26为例
  • 阿里云 SSL 证书续签操作指南
  • 解决 Flutter Gradle 下载报错:修改默认 distributionUrl
  • 安全测试新思路:用在线XSS平台(如D00.CC)模拟真实攻击链,理解前端漏洞危害
  • 2026西南柴油空压机维修优质厂家推荐榜:柴油空压机租赁、电动空压机保养、电动空压机租赁、电动空压机维修、空压机销售选择指南 - 优质品牌商家
  • 2026年热门的快干型转印纸/即干型转印纸/离型转印纸/快干型热升华转印纸品牌厂家推荐 - 品牌宣传支持者
  • pi-mono:为什么这个AI开发框架成为2024年开发者必备工具?
  • Pixel Dream Workshop 数据库课程设计应用:可视化生成ER图与系统界面原型
  • 开源项目自定义扩展开发指南:从零构建存储适配器插件
  • Qwen2.5-Coder-1.5B实战体验:一键部署,智能代码助手开箱即用
  • Linux----网络