Reactive Diffusion Policy (RDP) 网络结构
整体架构
RDP 采用慢-快(slow-fast)分层结构:
- Slow Policy (LDP - Latent Diffusion Policy):低频预测高级动作块
- Fast Policy (AT - Asymmetric Tokenizer):高频基于触觉/力反馈进行闭环调整
Slow Policy (LDP) 部分
输入:
- RGB 图像(240×320,2帧 @ 12Hz)
- Tactile/Force embedding(PCA特征或6D wrench)
- Proprioception(机器人TCP位姿等)
- 频率:1-2 Hz(低频观测)
网络结构:
- 视觉编码器:ResNet18(MultiImageObsEncoder)
- Diffusion U-Net:1D U-Net,在潜在空间中预测动作块
- 输入维度:
(B, T, D_latent),其中T是下采样后的horizon
输出:
- Latent action chunk:
(B, horizon, latent_dim) - 例如:
(1, 8, 4)表示8个时间步,每个4维潜在动作
Fast Policy (AT) 部分
结构:
- 编码器(Encoder):1D-CNN 或 MLP,将 action chunk 编码到潜在空间
- 解码器(Decoder):GRU,使用高频触觉/力信号解码动作
训练时输入:
- Action chunk:
(B, 32, action_dim)@ 24Hz - Tactile/Force embedding:
(B, 32, tactile_dim)@ 24Hz
推理时输入:
- Latent action chunk:来自 Slow Policy
- 高频 Tactile/Force:
(B, T, tactile_dim)@ 24-30Hz
输出:
- Action sequence:
(B, T, action_dim),例如(1, 32, 4)表示32步,每步4维动作(x, y, z, gripper)
训练流程图
1┌─────────────────────────────────────────────────────────────┐2│ Stage 1: 训练 AT (Fast Policy) │3└─────────────────────────────────────────────────────────────┘4
5数据集 (24Hz)6 │7 ├─ Action Chunk: (B, 32, 4) [32步动作序列]8 └─ Tactile/Force: (B, 32, d) [对应32步的触觉/力信号]9 │10 ▼11 ┌─────────────────┐12 │ AT Encoder │ ← 只使用 Action Chunk13 │ (1D-CNN/MLP) │14 └────────┬────────┘15 │63 collapsed lines
16 ▼17 Latent Action: (B, 8, 4) [下采样到8步]18 │19 ▼20 ┌─────────────────┐21 │ AT Decoder │ ← 使用 Latent + Tactile/Force22 │ (GRU) │23 └────────┬────────┘24 │25 ▼26 Reconstructed Action: (B, 32, 4)27 │28 ▼29 Loss: L1 Reconstruction + KL Penalty30 │31 ▼32 训练完成,保存 AT 模型33
34
35┌─────────────────────────────────────────────────────────────┐36│ Stage 2: 训练 LDP (Slow Policy) │37└─────────────────────────────────────────────────────────────┘38
39数据集 (12Hz 低频观测)40 │41 ├─ RGB Images: (B, 2, 3, 240, 320)42 ├─ Tactile/Force: (B, 2, d)43 ├─ Proprioception: (B, 2, ...)44 └─ Action Chunk: (B, 12, 4) [12步动作序列]45 │46 ▼47 ┌─────────────────┐48 │ AT Encoder │ ← 使用预训练的 AT Encoder (冻结)49 │ (冻结) │50 └────────┬────────┘51 │52 ▼53 Latent Action: (B, 8, 4)54 │55 ▼56 ┌─────────────────┐57 │ Visual Encoder │ ← ResNet1858 │ (ResNet18) │59 └────────┬────────┘60 │61 ▼62 Visual Features: (B, feature_dim)63 │64 ├─────────────────┐65 │ │66 ▼ ▼67 ┌─────────────────────────────────┐68 │ Diffusion U-Net (1D) │69 │ - 输入: Noisy Latent Action │70 │ - 条件: Visual Features │71 │ - 输出: Predicted Noise │72 └──────────────┬──────────────────┘73 │74 ▼75 Diffusion Loss (MSE)76 │77 ▼78 训练完成,保存 LDP 模型推理流程图
1┌─────────────────────────────────────────────────────────────┐2│ 推理循环 (实时) │3└─────────────────────────────────────────────────────────────┘4
5时间步 t (每 1/6 秒,即 6Hz)6 │7 ├─ 获取低频观测 (1-2Hz)8 │ ├─ RGB Images: (1, 2, 3, 240, 320)9 │ ├─ Tactile/Force: (1, 2, d)10 │ └─ Proprioception: (1, 2, ...)11 │12 ▼13┌─────────────────────────────────┐14│ Slow Policy (LDP) │ ← 每 1-2 秒运行一次15│ - Visual Encoder │38 collapsed lines
16│ - Diffusion U-Net │17│ - 采样潜在动作块 │18└────────────┬────────────────────┘19 │20 ▼21 Latent Action Chunk: (1, 8, 4)22 │23 │ 存储到 Ensemble Buffer24 │25 ▼26┌─────────────────────────────────┐27│ Ensemble Buffer │28│ - 存储 Latent Action Chunk │29│ - 管理动作队列 │30└────────────┬────────────────────┘31 │32 │ 每 1/24 秒 (24Hz)33 │34 ▼35┌─────────────────────────────────┐36│ Fast Policy (AT Decoder) │ ← 高频运行 (24-30Hz)37│ - 获取最新 Latent Action │38│ - 获取最新 Tactile/Force │39│ - GRU Decoder 解码 │40└────────────┬────────────────────┘41 │42 ▼43 Action: (1, 1, 4) [单步动作]44 │45 ▼46 ┌─────────────────┐47 │ 执行到机器人 │48 └─────────────────┘49 │50 │ 循环继续...51 │52 ▼53 下一个时间步 (t+1)关键设计要点
- 非对称结构:编码器只用 action,解码器用 latent + tactile/force,使潜在空间保留高级策略,细节由触觉反馈决定。
- 频率分离:Slow Policy 1-2Hz 建模复杂轨迹,Fast Policy 24-30Hz 实现闭环控制。
- 相对轨迹:使用相对 TCP 位姿,便于学习通用反应策略。
- Latency Matching:丢弃前几步动作以匹配推理和执行延迟,保证动作块间平滑过渡。
输入输出总结
| 组件 | 输入 | 输出 | 频率 |
|---|---|---|---|
| Slow Policy (LDP) | RGB图像 + Tactile/Force + Proprioception | Latent Action Chunk | 1-2 Hz |
| Fast Policy (AT Decoder) | Latent Action + 最新 Tactile/Force | Action (pose array) | 24-30 Hz |
| 最终输出 | - | Action Chunk: (T, action_dim) | 24 Hz |
其中 action_dim 通常是 4(单臂:x, y, z, gripper)或 8(双臂:x_l, y_l, z_l, x_r, y_r, z_r, gripper_l, gripper_r)。