文章目录
-
-
- [1. 概述](#1. 概述)
- [2. EDP 与 PDP 的关系](#2. EDP 与 PDP 的关系)
- [3. 发现流程](#3. 发现流程)
- [4. 内置端点](#4. 内置端点)
- [5. EDP 实现类](#5. EDP 实现类)
- [6. 匹配条件](#6. 匹配条件)
- [7. 总结](#7. 总结)
-
1. 概述
EDP 是 RTPS 协议中用于发现端点(Writer/Reader)的协议,是 DDS 发现机制的核心部分。
2. EDP 与 PDP 的关系
┌─────────────────────────────────────────────────────────────────────┐
│ 发现协议层次 │
├─────────────────────────────────────────────────────────────────────┤
│ │
│ PDP (Participant Discovery Protocol) │
│ • 发现 Participant (参与者) │
│ • 交换 ParticipantProxyData │
│ │
│ EDP (Endpoint Discovery Protocol) │
│ • 发现端点 (Writer/Reader) │
│ • 交换 PublicationData / SubscriptionData │
│ • 依赖 PDP,先有 Participant 才有 Endpoint │
│ │
└─────────────────────────────────────────────────────────────────────┘
3. 发现流程
┌─────────────────────────────────────────────────────────────────────┐
│ EDP 发现流程 │
├─────────────────────────────────────────────────────────────────────┤
│ │
│ 1. PDP 阶段: 参与者发现 │
│ A ◀───▶ B 互相知道对方的存在 │
│ │
│ 2. EDP 阶段: 端点发现 │
│ A ──SUBSCRIPTION_DATA──▶ B 告知自己有哪些 Reader │
│ A ◀───PUBLICATION_DATA── B 告知自己有哪些 Writer │
│ │
│ 3. 匹配阶段: │
│ Writer A 与 Reader B → 匹配成功,开始通信 │
│ Writer B 与 Reader A → 匹配成功,开始通信 │
│ │
└─────────────────────────────────────────────────────────────────────┘
4. 内置端点
EDP 使用内置的 RTPS 端点来发送发现信息:
| 内置端点 | 说明 |
|---|---|
| SEDP Publication Writer | 发送本地 PublicationData |
| SEDP Publication Reader | 接收远程 PublicationData |
| SEDP Subscription Writer | 发送本地 SubscriptionData |
| SEDP Subscription Reader | 接收远程 SubscriptionData |
5. EDP 实现类
EDP.h:
cpp
class EDP
{
// SEDP 内置 Writer/Reader
RTPSWriter* sedp_writer_;
RTPSReader* sedp_reader_;
// 本地端点注册到 SEDP
bool registerLocalEndpoints(const BuiltinEndpointSet& endpoints);
// 配对本地 Writer 与远程 Reader
bool pairing_remote_reader_with_local_writer(
const GUID_t& local_writer,
const ReaderProxyData& remote_reader_data);
// 配对本地 Reader 与远程 Writer
bool pairing_remote_writer_with_local_reader(
const GUID_t& local_reader,
const WriterProxyData& remote_writer_data);
};
6. 匹配条件
两个端点要匹配,必须满足:
| 条件 | 说明 |
|---|---|
| Topic 名称相同 | topic_name 必须一致 |
| 类型名称相同 | type_name 必须一致 |
| QoS 兼容 | durability、reliability 等必须兼容 |
| 类型兼容 | 数据类型的序列化格式必须匹配 |
7. 总结
┌────────────────────────────────────────────────────────────────────┐
│ EDP 总结 │
├────────────────────────────────────────────────────────────────────┤
│ │
│ 职责: 发现同 Participant 内所有的 Writer 和 Reader │
│ │
│ 使用内置主题: │
│ • DCPSPublication - 发布者信息 │
│ • DCPSSubscription - 订阅者信息 │
│ │
│ 依赖: PDP (先发现 Participant) │
│ │
│ 匹配条件: │
│ • Topic 名称相同 │
│ • 类型名称相同 │
│ • QoS 兼容 │
│ • 数据类型兼容 │
│ │
└────────────────────────────────────────────────────────────────────┘