FAST-DDS线程模型与发现机制深度解析

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信息建立具体的数据通道。整个过程分为三个关键阶段:

  1. 初始发现阶段:通过dds.udp.7400线程接收PDP消息
  2. 端点匹配阶段:通过dds.udp.741X线程交换EDP信息
  3. 数据传输阶段:根据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()

内容推荐

已经到底了哦
已经到底了哦