docs(训练方案 v2.1): 3090 24G 训练配置;near_column 验收改 30/30,新增超时成因与子目标头/价值头/短前瞻/卡死换向;新增控制周期业界调研与评估
This commit is contained in:
+73
-11
@@ -4,6 +4,7 @@
|
||||
> - v1.1(20:25,`c51f8f9`):加入后训练挖错循环。
|
||||
> - **v2(本稿)**:按用户决定改为 **无老师部署 + 每个控制周期重算(闭环)**,删除全部"回落原规划器"设计;
|
||||
> 加入具身智能领域主流做法的调研与对比(§1–§2),并据此调整模型输出、后训练方法和验收标准。
|
||||
> - v2.1(2026-10-17 20:58):训练机定为 RTX 3090 24 GB;near_column 验收改为 **30/30**,新增 §8.5「为什么会超时、无老师怎样做到 30/30」;新增 §8.6 控制周期业界调研与评估。
|
||||
> - 基于 `main@3c7c814`(贴立柱修复后的规划器)。本文只是方案,代码尚未编写。
|
||||
> - 审查重点:§0 定位、§2 差异与优化、§5 输出表示、§7 后训练(APG)、§8 闭环部署与安全层、§9 验收。
|
||||
|
||||
@@ -93,7 +94,7 @@
|
||||
| 阶段 | 在哪里跑 | 说明 |
|
||||
|---|---|---|
|
||||
| 预训练数据生成 | Hark 沙箱(2 vCPU / 7 GB,Node)或用户机器 | 纯 JS,无需 GPU |
|
||||
| 预训练 + APG 微调 | **用户的 GPU 机器** | 沙箱无 GPU、无 PyTorch。建议 ≥ 8 GB 显存(RTX 3060 级别) |
|
||||
| 预训练 + APG 微调 | **用户的 GPU 机器** | 沙箱无 GPU、无 PyTorch。**已定:RTX 3090 24 GB**(显存对 3–4 M 参数模型绰绰有余,可用 batch 1024–2048) |
|
||||
| 部署推理 | 浏览器(onnxruntime-web,WebGPU 优先,wasm 兜底);后续真机控制器 | 与现有查看器同页 |
|
||||
|
||||
```bash
|
||||
@@ -217,7 +218,8 @@ K×16 个可学习动作 token ──▶ 4 层 Transformer decoder(非自回
|
||||
│
|
||||
├─ 动作头:每 token 输出 6 维 Δq
|
||||
├─ 模式分类头:K=4
|
||||
└─ 剩余时间头:1
|
||||
├─ 价值头(剩余时间/代价):1 ← v2.1,§8.5
|
||||
└─ 子目标头:2 个关节空间途经点 + 是否需要(仅冷启动用)← v2.1,§8.5
|
||||
```
|
||||
|
||||
| 超参 | 值 |
|
||||
@@ -243,15 +245,15 @@ L = WTA-L1(动作块, 最近模式) 权重 1.0
|
||||
|---|---|
|
||||
| 优化器 | AdamW,β=(0.9, 0.95),wd 0.01 |
|
||||
| 学习率 | 1e-3,预热 1000 步,余弦退火(同 DRP 量级) |
|
||||
| batch | 512 |
|
||||
| batch | 1024(3090 24 GB) |
|
||||
| 精度 | bf16 混合精度 |
|
||||
| 步数 | 约 20 万步(300 万样本约 30 epoch),验证集闭环成功率不再上升即停 |
|
||||
| 预计耗时 | RTX 3060 约 3–5 小时(估算,跑完首轮校正) |
|
||||
| 预计耗时 | RTX 3090 约 1.5–3 小时(估算;DRP 4.67 M 参数在 4090 上预训练 100 万步用 3 天,我们的样本少、无点云编码,步数约其 1/5,跑完首轮再校正) |
|
||||
|
||||
### 6.4 对拍与验证(每 epoch)
|
||||
|
||||
- `ml/eval/collide_torch.py`:胶囊距离的 PyTorch 批量版(**可微**,§7 要用),先与 JS `collideFree` 对拍 10 万个位形,判定 0 误差。
|
||||
- 验证用**闭环仿真**而不是单步误差:从 1000 个验证任务的 q0 出发,每 20 ms 推理一次、执行前 3 步、直到到达或 6 s 超时,统计到达率、碰撞步数(安全层关闭时)、行程比。
|
||||
- 验证用**闭环仿真**而不是单步误差:从 1000 个验证任务的 q0 出发,每 20 ms 推理一次、提交前 3 步,直到到达或超时(超时 = 老师同任务路径动画时长 × 2,最少 3 s),统计到达率、碰撞步数(安全层关闭时)、行程比。
|
||||
|
||||
---
|
||||
|
||||
@@ -309,7 +311,9 @@ for 每个 batch(随机采样 q0 和目标,82 ms 级别的便宜采样,不
|
||||
2. 推理一次:得到 K=4 条 16 步动作块 + 模式概率 ≈ 2–5 ms(估算)
|
||||
3. 按"模式概率 − 切换代价"排序(§8.2)
|
||||
4. 安全层依次检查候选的前 n=3 步(60 ms 的运动)+ 刹停段(§8.3)
|
||||
第一个通过的 → 送插补器执行这 3 步;记下 k_prev
|
||||
第一个通过的 → 把这 3 步"提交"给插补器;记下 k_prev
|
||||
(实际上 20 ms 后只走完第 1 步,第 2、3 步是已验证的"缓冲":
|
||||
下一周期的新结果会覆盖它们;若下一周期推理超时或全部不安全,就沿缓冲 + 刹停段安全停下)
|
||||
5. 全部不通过 → 进入刹停:按已验证的刹停轨迹减速停下,保持;下一周期继续推理
|
||||
6. 到达判据:TCP 误差 < 1 mm(pose 另需 < 0.5°)且速度≈0 → 结束;
|
||||
接近目标(< 5 mm)时可选做 1–3 次局部牛顿精修(solveTo 单步,不是全量 IK)
|
||||
@@ -342,6 +346,62 @@ for 每个 batch(随机采样 q0 和目标,82 ms 级别的便宜采样,不
|
||||
|
||||
`collide.json` 指纹写进模型;不一致时前端**拒绝运行并提示重训**(不再回落旧规划器)。
|
||||
|
||||
### 8.5 为什么会"超时",以及无老师怎样做到 30/30
|
||||
|
||||
**超时不是算得慢。** 模型每周期只要几毫秒,比原规划器快得多;"超时"指的是**机械臂在规定时间内没走到目标**,是决策错了,不是计算慢了。无老师闭环下有三种典型情形:
|
||||
|
||||
| 失效形态 | 现象 | 为什么更快的推理救不了 |
|
||||
|---|---|---|
|
||||
| 局部极小 / 活锁 | 目标在立柱背后,策略每周期都想"直着过去",安全层每周期都刹停,原地抖动 | 每周期都做同样的错误决定,算得再快也只是更快地重复 |
|
||||
| 模式摇摆 | 这一周期选左绕、下一周期选右绕,来回切换,进度为零 | 同上 |
|
||||
| 绕远 | 选了一条可行但很长的路,在时限内走不完 | 方向对了但路线差 |
|
||||
|
||||
原规划器不会这样,是因为它做**全局搜索**(PRM + A*)。去掉老师后,全局"想清楚往哪绕"这件事必须由模型自己承担。v2.1 用五个手段(全部在运行时不需要老师)把 near_column 要求提到 **30/30**:
|
||||
|
||||
1. **全局子目标头(分层)**:模型在冷启动(新目标到达的第一个周期)额外输出 1–2 个途经点(关节空间),作为"绕柱方向"的锚点;之后每周期的动作块以"当前子目标"为条件,到达子目标后切到下一个。训练标签直接取自老师路径的拐点(离线已有)。这相当于把老师的全局搜索结果蒸馏成一次前向。
|
||||
2. **价值头(剩余代价估计)**:模型额外预测"从这个状态到目标还要多少时间"。APG 展开时有真实值可监督,不需要老师。部署时用它给 K 个模式打分,并作为"有没有进展"的判据。
|
||||
3. **短前瞻选模式**:每周期对 K=4 个模式各自再往前推一块(共 2 次批量前向 ≈ 2 × 2–5 ms),用 胶囊碰撞 + 价值头 给 32 步后的终态打分,选最好的。比只看第一块的概率更能避开"走两步就撞墙"的分支。
|
||||
4. **卡死检测 + 强制换向**:0.3 s 内价值头没有下降、或连续 2 个周期刹停 → 判定卡死,强制切到另一个绕行方向(另一个子目标/模式)并锁定 1 s(防止又切回来)。规则很简单、确定性、可测试。
|
||||
5. **训练侧针对性加强**:贴柱类任务在 APG 采样里占 40%;APG 展开长度覆盖整段绕行(约 3 s = 150 个周期,分段截断反传);对贴柱任务做拒绝采样自蒸馏(§7.3),模型自己成功的路线成为新标签。
|
||||
|
||||
验收相应改为(§9.2):near pos / near rt 都必须 **30/30**,且到达用时 ≤ 老师路径动画时长 × 1.3。
|
||||
|
||||
### 8.6 控制周期:业界案例与评估
|
||||
|
||||
**工业臂 / 研究臂的外部实时接口(伺服层)**
|
||||
|
||||
| 产品 / 接口 | 周期 | 说明 |
|
||||
|---|---|---|
|
||||
| Franka FCI(libfranka) | **1 ms(1 kHz)** | 关节位置/速度/力矩、笛卡尔位姿;每周期往返 + 计算必须 < 1 ms |
|
||||
| Universal Robots e-Series RTDE | **2 ms(500 Hz)** | `servoj` 默认 t = 0.002 |
|
||||
| Universal Robots CB3 RTDE | **8 ms(125 Hz)** | `servoj` 默认 t = 0.008 |
|
||||
| ABB EGM | **4 ms(250 Hz)**,可设为 4 ms 的整数倍 | 控制滞后 10–20 ms(随机型) |
|
||||
| KUKA RSI | **4 ms**(Fast)或 **12 ms**(Normal) | |
|
||||
| FANUC DPM | 约 **8 ms** | R-30iB 无 1–2 ms 通道 |
|
||||
| MoveIt Servo(ROS 2) | 默认 **10 ms**(新版);旧版示例 34 ms | 常设为 ros2_control 更新频率的倒数(如 50 Hz → 20 ms) |
|
||||
| 舵机(RC PWM) | **20 ms(50 Hz)** 帧周期 | 数字舵机可到更高帧率 |
|
||||
|
||||
**学习型策略的推理周期(策略层)**
|
||||
|
||||
| 方法 | 策略频率 | 动作块 | 执行方式 |
|
||||
|---|---|---|---|
|
||||
| MπNets | 9 Hz | 单步 | 线性插值,1 kHz PD 跟踪 |
|
||||
| Diffusion Policy | 10 Hz | 16 步 | 线性插值到 125 Hz 交给 UR5 |
|
||||
| ELMP | 30 Hz(真机) | 单步 Δq | 每步 3 个航点线性插值给 Franka 位置控制器 |
|
||||
| π0 | 50 Hz 动作,约每 0.5 s 推理一次 | 50 步(1 s) | 执行 25 步后重算 |
|
||||
| ACT | 50 Hz | 100 步 | 时间集成 |
|
||||
| DRP / IMPACT | 可跑 300 Hz(4090) | 10 步 | 闭环 |
|
||||
|
||||
**结论:业界一律是"两层"结构**——策略层 10–50 Hz(少数到 300 Hz)给出关节目标,伺服/插补层 125 Hz–1 kHz 负责平滑跟踪。没有人让神经网络直接跑 1 kHz 伺服环。
|
||||
|
||||
**对本方案的评估:**
|
||||
|
||||
1. **策略层 50 Hz(20 ms)合适**:与 π0、ACT 同档,高于 ELMP 的 30 Hz 和 MπNets 的 9 Hz;我们模型小(3–4 M)、无点云,单次前向 + 安全检查预计 < 10 ms,留有一倍余量。浏览器里 `requestAnimationFrame` 是 60 Hz,50 Hz 也能稳定跑。
|
||||
2. **"提交 3 步(60 ms)"合适,且应按刹停距离定**:它的作用是给推理抖动和通信滞后留缓冲。ABB EGM 自身就有 10–20 ms 滞后;60 ms 足以覆盖一次推理超时 + 一次滞后。真机上应改成规则:提交步数 n ≥ ⌈(通信滞后 + 1 次推理最坏耗时) / 20 ms⌉ + 1,且刹停段另行验证。
|
||||
3. **伺服层不归本方案管,但要匹配**:策略输出 50 Hz 关节目标,由插补器升采样到电机控制器的频率(舵机 50 Hz 直接用;总线舵机/步进/FOC 驱动通常 ≥ 250 Hz–1 kHz,做三次样条插值)。
|
||||
4. **做成可配置**:`dt`(默认 20 ms)、提交步数 n(默认 3)、动作块长度 S(默认 16 = 320 ms)。训练数据按 dt = 20 ms 生成;若真机必须改到 10 ms(100 Hz),只需把动作块重采样,或用 dt = 10 ms 重造数据(约 5 小时)。
|
||||
5. 你的电机/驱动型号确定后,按第 2、3 条把 n 和插补频率定下来。
|
||||
|
||||
---
|
||||
|
||||
## 9. 第六步:评估与验收
|
||||
@@ -362,7 +422,8 @@ for 每个 batch(随机采样 q0 和目标,82 ms 级别的便宜采样,不
|
||||
| 指标 | 要求 | 现状参考 |
|
||||
|---|---|---|
|
||||
| 实际执行的碰撞帧 | **= 0** | rt_drag_bench 0 |
|
||||
| 到达率(6 s 内) | route ≥ 60/60,near pos ≥ 29/30,near rt ≥ 29/30,held-out ≥ 97% | 60/60、30/30、30/30 |
|
||||
| 到达率 | route **60/60**,near pos **30/30**,near rt **30/30**,held-out ≥ 98% | 60/60、30/30、30/30 |
|
||||
| 到达用时 | ≤ 老师同任务路径动画时长 × 1.3 | — |
|
||||
| 关节行程 | ≤ 现有规划器 × 1.10 | route 平均 467° |
|
||||
| 冷启动(新目标→第一个动作) | < 10 ms | 首次全量 IK 最差约 2 s |
|
||||
| 每周期耗时(推理+安全层)P99 | < 15 ms | 拖拽重规划 P99 约 321 ms |
|
||||
@@ -370,7 +431,7 @@ for 每个 batch(随机采样 q0 和目标,82 ms 级别的便宜采样,不
|
||||
| 模式摇摆(≥3 次切换)| < 1% 的任务 | — |
|
||||
| 策略单独(关安全层)碰撞率 | < 3%(参考:ELMP-APG 8.9%,DRP 10.16%) | — |
|
||||
|
||||
说明:允许 near_column 少 1 例,因为无老师时最难的贴柱案例可能要靠多次刹停-重算才能到达,6 s 超时内可能失败;这一条请审查时确认能否接受。
|
||||
说明:v2 曾提议 near_column 允许 29/30,用户否决(2026-10-17)。为保证 30/30,部署侧加入子目标头、价值头、短前瞻和卡死换向(§8.5)。
|
||||
|
||||
---
|
||||
|
||||
@@ -423,10 +484,11 @@ tests/policy_bench.cjs
|
||||
- Yang, Liu et al., *Deep Reactive Policy: Learning Reactive Manipulator Motion Planning for Dynamic Environments*, CoRL 2025. https://arxiv.org/abs/2509.06953
|
||||
- Fishman et al., *Avoid Everything: Model-Free Collision Avoidance with Expert-Guided Fine-Tuning*, CoRL 2024 Workshop(DRP 文中引用为 MπFormer)
|
||||
- Li et al., *ELMP: Efficient Learning for Motion Planning via Analytical Policy Gradients*, arXiv 2607.00215, 2026. https://arxiv.org/abs/2607.00215
|
||||
- 控制周期:Franka FCI https://frankarobotics.github.io/docs/overview.html ;UR RTDE https://www.universal-robots.com/articles/ur/interface-communication/remote-control-via-tcpip ;ABB EGM 应用手册 3HAC073318;KUKA RSI https://docs.quanser.com/quarc/documentation/kuka_rsi_block.html ;MoveIt Servo servo_parameters.yaml;Diffusion Policy https://arxiv.org/abs/2303.04137 ;π0 https://arxiv.org/abs/2410.24164 ;实时动作块执行 https://arxiv.org/abs/2506.07339
|
||||
- Ross, Gordon, Bagnell, *A Reduction of Imitation Learning and Structured Prediction to No-Regret Online Learning*(DAgger),AISTATS 2011
|
||||
|
||||
## 14. 需要用户确认
|
||||
|
||||
1. 训练机显卡型号与显存。
|
||||
2. §9.2 中 near_column 允许 29/30(无老师下最难案例可能超时)是否接受。
|
||||
3. 控制周期 50 Hz、每周期执行 3 步(60 ms)作为默认值是否合适(真机控制器频率如有要求请告知)。
|
||||
1. ~~训练机显卡~~:已定 RTX 3090 24 GB。
|
||||
2. ~~near_column 29/30~~:已否决,要求 30/30(§8.5)。
|
||||
3. 控制周期:按 §8.6 评估保持策略层 50 Hz、提交 3 步;**请告知真机电机/驱动类型与通信方式**,用于确定插补频率和提交步数。
|
||||
|
||||
Reference in New Issue
Block a user