1. FAST-DDS线程模型解析:从PDP到EDP的发现机制
在机器人操作系统ROS2的默认中间件FAST-DDS中,参与者发现协议(PDP)和端点发现协议(EDP)构成了分布式通信的基础框架。通过分析hello_world示例程序的线程模型,我们可以清晰地看到FAST-DDS如何实现高效的节点发现与数据交换。
1.1 核心线程功能划分
当运行两个hello_world实例时(PID 2760和2776),每个进程会创建以下关键线程:
code复制dds.udp.7400 // PDP消息接收线程
dds.udp.7410 // EDP消息接收线程(实例1)
dds.udp.7412 // EDP消息接收线程(实例2)
dds.shm.7411 // 共享内存用户数据接收(实例1)
dds.udp.7411 // UDP用户数据接收(实例1)
dds.shm.7413 // 共享内存用户数据接收(实例2)
dds.udp.7413 // UDP用户数据接收(实例2)
dds.ev.0 // 定时器线程
关键发现:端口号7400是PDP的标准发现端口,而741X系列端口则是动态分配的EDP和用户数据端口。这种设计实现了控制平面与数据平面的分离。
1.2 发现协议工作流程
PDP发现阶段采用UDP广播/组播,通过7400端口进行参与者发现。当两个节点发现彼此后,会交换EDP信息建立具体的数据通道。整个过程分为三个关键阶段:
- 初始发现阶段:通过dds.udp.7400线程接收PDP消息
- 端点匹配阶段:通过dds.udp.741X线程交换EDP信息
- 数据传输阶段:根据QoS策略选择dds.shm.741X或dds.udp.741X传输实际数据
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. PDP发现机制深度剖析
2.1 PDP消息处理流程
PDP消息的处理遵循严格的调用链:
cpp复制UDPChannelResource::perform_listen_operation()
→ ReceiverResource::OnDataReceived()
→ MessageReceiver::processCDRMsg()
