中间件交接文档

1.L3 QOS 设计逻辑

L3需要做跨板隔离,当前版本在服务发现的两个阶段都实现了基于分区的隔离机制,分别为PDP分区隔离,EDP分区隔离

Partition QoS Policy

该 QoS 策略允许在由 Domain ID 引入的物理分区内部,再引入一个逻辑分区。 为了让 DataReader 能够看到 DataWriter 所做的变更,不仅 Topic 必须匹配,而且它们至少需要共享一个逻辑分区(参见 PartitionQosPolicy)。

在同一个 Domain ID(物理网络)内,DataWriter(发布者)和 DataReader(订阅者)要想成功匹配并通信,除了常规条件(Topic 名称相同、消息类型兼容、其他 QoS 兼容)外,还必须至少共享一个相同的 Partition 名称。这种隔离手段,性能开销极小(只是字符串比较),却能提供非常强的逻辑隔离保障。

  1. PDP 阶段(Participant 发现)已经过滤: 如果 Participant 级别的 Partition 不匹配,很多实现甚至不会完成 Participant 的相互发现(因为 PDP 报文已携带 Partition 信息)。 → 这时根本不会进入 EDP 阶段。
  2. 即使 PDP 阶段通过了,EDP 阶段也会二次拦截 : 在 EDP(端点宣告)阶段,当 DataWriter 宣告自己的 Publication 或 DataReader 宣告 Subscription 时,报文中会携带完整的 Partition 列表。 接收方在处理 EDP 报文时,会先检查 Partition 是否有交集:
    • 有交集 → 继续后续 QoS、Topic 等匹配逻辑,可能发送匹配的 EDP 响应报文。
    • 无交集直接丢弃该 EDP 报文,不进行后续匹配,也不发送任何响应报文

结论 : Partition 不匹配时,EDP 报文要么根本不发,要么发了也会被对方立即丢弃,不会建立任何通信关系,也不会浪费网络带宽继续后续匹配流程。

PDP: 进程级别的分区隔离,两个进程间必须有同名的Partition Name,PDP报文才会在两个进程间发送接收匹配,没有同名的分区名,直接不发PDP报文

EDP: DR/DW级别的匹配,需要校验DR与DW之间的分区名是否一致,DW与DR直接必须有同名的Partition Name,DR与DW直接才能完成匹配,进行通信,否则不发EDP报文

代码说明:

代码修改主要在cpp:

修改点:读取逻辑,存储逻辑

2.配置使用方式

以A板进程与B板进程跨板通信为例,B板发A板收,需要按照以下配置

3.最近合入记录

|----|------|------|------|
| MR | 合入内容 | 影响范围 | 注意事项 |
| | | | |
| | | | |
| | | | |
| | | | |
| | | | |

4.注意点

AB板间的通信不能走组播地址,直接抓包已经看过

5.常见问题 & 排查指南

1.为了手动测试,Python命令和程序,在QOS文件中没有配置隔离,直接可以跨板通信

2.如果在两个进程间通信需要配置,需要查看发送接收进程日志,不能只echo

3.配置QOS后,需要检查程序是不是全都正常启动,通信是否正常

4.需要满足AB完全隔离,则A板程序在A分区通信,B板程序在B分区通信,需要跨板通信的进程在C分区上通信

5.若某个程序,比如AB板都有zdi_ehr这个程序,这两个程序只想各自接收两个程序数据,其他进程的数据不接收,则需要另外开启一个分区通信

6.配置完分区隔离的topic,需要查看topic hz是否翻倍

7.可查看DDS日志分区名是否配置成功

  1. rviz 通信交接

1.通信排查

板子跟rviz docker需要网络盒子连接,,且互相可以ping通

板子内需要先执行replace.sh脚本

检查rviz笔记本ip,子网掩码是否配置成功

检查rviz docker qos 是否包含板子ip

检查docker内是否有topic ,topic是否有输出

检查板子上程序是否启动成功

检查板子上qos文件是否包含rviz笔记本IP

  1. rviz界面

rviz界面时间戳是否打印正常

rviz界面是否显示车道线,没有车道线需要先标定

相关推荐
互成4 分钟前
电脑文件如何加密?2026年6款高安全性文件加密软件评测
运维
木子啊4 分钟前
ThinkCMF命令行实战:自动化后台任务
运维·自动化
骂我的人都死了5 分钟前
DevOps架构部署
运维·ubuntu·docker·k8s·github·devops·python3.11
Madison-No78 分钟前
【Linux】一切皆文件的理解 && 缓冲区 && 简易设计libc库
linux·运维·服务器
AL31710 分钟前
模拟实现NetDevOps全生命周期自动化网络运维
运维·docker·centos·ensp·netmiko
乾元10 分钟前
实战案例:解析某次真实的“AI vs. AI”攻防演练
运维·人工智能·安全·web安全·机器学习·架构
懂营养的程序员11 分钟前
DevOps 是如何诞生的?从“左右互搏”到“左右开弓”的故事
运维·devops
不念霉运12 分钟前
中国DevOps平台选型指南:云原生时代的技术决策方法论
运维·云原生·devops
测试人社区—039212 分钟前
UI测试在DevOps流水线中的卡点设计:质量保障的智能防线
运维·驱动开发·测试工具·ui·ar·vr·devops
Alaaaaaaan12 分钟前
[DevOps]使用github-action工具部署docker容器(实现提交代码一键推送部署到服务器)
服务器·前端·docker·容器·github