docs(训练方案 v2.1): 3090 24G 训练配置;near_column 验收改 30/30,新增超时成因与子目标头/价值头/短前瞻/卡死换向;新增控制周期业界调研与评估

This commit is contained in:
Hark
2026-10-17 12:46:37 +00:00
parent fecc59b0af
commit 5895deb071
2 changed files with 322 additions and 52 deletions
+249 -41
View File
@@ -4,7 +4,7 @@
<meta charset="utf-8" />
<meta name="generator" content="pandoc" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
<title>Transformer 避障运动策略:无老师闭环部署方案(v2)</title>
<title>Transformer 避障运动策略:无老师闭环部署方案(v2.1)</title>
<style>
html {
color: #1a1a1a;
@@ -232,23 +232,23 @@
code span.wa { color: #60a0b0; font-weight: bold; font-style: italic; } /* Warning */
</style>
<style>
:root{--fg:#1d2733;--mut:#5b6b7c;--acc:#1f5fa8;--bd:#d9e1ea;--bg2:#f5f8fb}
body{max-width:1080px;margin:0 auto;padding:32px 28px 80px;font:15px/1.75 -apple-system,"PingFang SC","Microsoft YaHei","Noto Sans CJK SC",sans-serif;color:var(--fg)}
h1{font-size:26px;border-bottom:3px solid var(--acc);padding-bottom:10px}
h2{font-size:21px;margin-top:44px;padding-left:10px;border-left:5px solid var(--acc)}
h3{font-size:17px;margin-top:28px;color:#16324f}
table{border-collapse:collapse;width:100%;margin:14px 0;font-size:13.5px;display:block;overflow-x:auto}
th,td{border:1px solid var(--bd);padding:6px 9px;vertical-align:top}
th{background:#e9f0f7;text-align:left;white-space:nowrap}
tr:nth-child(even) td{background:var(--bg2)}
code{background:#eef2f6;padding:1px 5px;border-radius:4px;font-size:90%}
pre{background:#0f1b2a;color:#e3ecf5;padding:14px 16px;border-radius:8px;overflow-x:auto;line-height:1.5}
pre code{background:none;color:inherit;padding:0}
blockquote{margin:16px 0;padding:10px 16px;background:#fff8e6;border-left:4px solid #e0a800;color:#4a3b00}
#TOC{background:var(--bg2);border:1px solid var(--bd);border-radius:8px;padding:12px 20px;margin:20px 0;font-size:14px}
#TOC ul{margin:4px 0;padding-left:20px}
a{color:var(--acc)}
</style>
:root{--fg:#1d2733;--mut:#5b6b7c;--acc:#1f5fa8;--bd:#d9e1ea;--bg2:#f5f8fb}
body{max-width:1080px;margin:0 auto;padding:32px 28px 80px;font:15px/1.75 -apple-system,"PingFang SC","Microsoft YaHei","Noto Sans CJK SC",sans-serif;color:var(--fg)}
h1{font-size:26px;border-bottom:3px solid var(--acc);padding-bottom:10px}
h2{font-size:21px;margin-top:44px;padding-left:10px;border-left:5px solid var(--acc)}
h3{font-size:17px;margin-top:28px;color:#16324f}
table{border-collapse:collapse;width:100%;margin:14px 0;font-size:13.5px;display:block;overflow-x:auto}
th,td{border:1px solid var(--bd);padding:6px 9px;vertical-align:top}
th{background:#e9f0f7;text-align:left;white-space:nowrap}
tr:nth-child(even) td{background:var(--bg2)}
code{background:#eef2f6;padding:1px 5px;border-radius:4px;font-size:90%}
pre{background:#0f1b2a;color:#e3ecf5;padding:14px 16px;border-radius:8px;overflow-x:auto;line-height:1.5}
pre code{background:none;color:inherit;padding:0}
blockquote{margin:16px 0;padding:10px 16px;background:#fff8e6;border-left:4px solid #e0a800;color:#4a3b00}
#TOC{background:var(--bg2);border:1px solid var(--bd);border-radius:8px;padding:12px 20px;margin:20px 0;font-size:14px}
#TOC ul{margin:4px 0;padding-left:20px}
a{color:var(--acc)}
</style>
</head>
<body>
<nav id="TOC" role="doc-toc">
@@ -300,6 +300,9 @@ id="toc-7-第四步后训练无老师为主">7.
<li><strong>v2(本稿)</strong>:按用户决定改为 <strong>无老师部署 +
每个控制周期重算(闭环)</strong>,删除全部"回落原规划器"设计;
加入具身智能领域主流做法的调研与对比(§1–§2),并据此调整模型输出、后训练方法和验收标准。</li>
<li>v2.1(2026-10-17 20:58):训练机定为 RTX 3090 24 GB;near_column
验收改为 <strong>30/30</strong>,新增 §8.5「为什么会超时、无老师怎样做到
30/30」;新增 §8.6 控制周期业界调研与评估。</li>
<li>基于
<code>main@3c7c814</code>(贴立柱修复后的规划器)。本文只是方案,代码尚未编写。</li>
<li>审查重点:§0 定位、§2 差异与优化、§5 输出表示、§7 后训练(APG)、§8
@@ -606,7 +609,8 @@ APG</strong>(可微胶囊碰撞),挖错循环保留但不再需要老师
<tr class="even">
<td>预训练 + APG 微调</td>
<td><strong>用户的 GPU 机器</strong></td>
<td>沙箱无 GPU、无 PyTorch。建议 ≥ 8 GB 显存(RTX 3060 级别)</td>
<td>沙箱无 GPU、无 PyTorch。<strong>已定:RTX 3090 24
GB</strong>(显存对 3–4 M 参数模型绰绰有余,可用 batch 1024–2048)</td>
</tr>
<tr class="odd">
<td>部署推理</td>
@@ -830,7 +834,8 @@ K×16 个可学习动作 token ──▶ 4 层 Transformer decoder(非自回
│
├─ 动作头:每 token 输出 6 维 Δq
├─ 模式分类头:K=4
└─ 剩余时间头:1</code></pre>
├─ 价值头(剩余时间/代价):1 ← v2.1,§8.5
└─ 子目标头:2 个关节空间途经点 + 是否需要(仅冷启动用)← v2.1,§8.5</code></pre>
<table>
<thead>
<tr class="header">
@@ -882,7 +887,7 @@ K×16 个可学习动作 token ──▶ 4 层 Transformer decoder(非自回
</tr>
<tr class="odd">
<td>batch</td>
<td>512</td>
<td>1024(3090 24 GB)</td>
</tr>
<tr class="even">
<td>精度</td>
@@ -895,7 +900,9 @@ epoch),验证集闭环成功率不再上升即停</td>
</tr>
<tr class="even">
<td>预计耗时</td>
<td>RTX 3060 约 3–5 小时(估算,跑完首轮校正)</td>
<td>RTX 3090 约 1.5–3 小时(估算;DRP 4.67 M 参数在 4090 上预训练 100
万步用 3 天,我们的样本少、无点云编码,步数约其
1/5,跑完首轮再校正)</td>
</tr>
</tbody>
</table>
@@ -905,8 +912,9 @@ epoch),验证集闭环成功率不再上升即停</td>
批量版(<strong>可微</strong>,§7 要用),先与 JS
<code>collideFree</code> 对拍 10 万个位形,判定 0 误差。</li>
<li>验证用<strong>闭环仿真</strong>而不是单步误差:从 1000 个验证任务的
q0 出发,每 20 ms 推理一次、执行前 3 步、直到到达或 6 s
超时,统计到达率、碰撞步数(安全层关闭时)、行程比。</li>
q0 出发,每 20 ms 推理一次、提交前 3 步,直到到达或超时(超时 =
老师同任务路径动画时长 × 2,最少 3
s),统计到达率、碰撞步数(安全层关闭时)、行程比。</li>
</ul>
<hr />
<h2 id="7-第四步后训练无老师为主">7. 第四步:后训练(无老师为主)</h2>
@@ -972,7 +980,9 @@ Hz)</h3>
2. 推理一次:得到 K=4 条 16 步动作块 + 模式概率 ≈ 2–5 ms(估算)
3. 按&quot;模式概率 − 切换代价&quot;排序(§8.2)
4. 安全层依次检查候选的前 n=3 步(60 ms 的运动)+ 刹停段(§8.3)
第一个通过的 → 送插补器执行这 3 步;记下 k_prev
第一个通过的 → 把这 3 步&quot;提交&quot;给插补器;记下 k_prev
(实际上 20 ms 后只走完第 1 步,第 2、3 步是已验证的&quot;缓冲&quot;:
下一周期的新结果会覆盖它们;若下一周期推理超时或全部不安全,就沿缓冲 + 刹停段安全停下)
5. 全部不通过 → 进入刹停:按已验证的刹停轨迹减速停下,保持;下一周期继续推理
6. 到达判据:TCP 误差 &lt; 1 mm(pose 另需 &lt; 0.5°)且速度≈0 → 结束;
接近目标(&lt; 5 mm)时可选做 1–3 次局部牛顿精修(solveTo 单步,不是全量 IK)</code></pre>
@@ -1032,6 +1042,188 @@ Worker 与推理流水线并行)。</li>
</table>
<p><code>collide.json</code>
指纹写进模型;不一致时前端<strong>拒绝运行并提示重训</strong>(不再回落旧规划器)。</p>
<h3 id="85-为什么会超时以及无老师怎样做到-3030">8.5
为什么会"超时",以及无老师怎样做到 30/30</h3>
<p><strong>超时不是算得慢。</strong>
模型每周期只要几毫秒,比原规划器快得多;"超时"指的是<strong>机械臂在规定时间内没走到目标</strong>,是决策错了,不是计算慢了。无老师闭环下有三种典型情形:</p>
<table>
<thead>
<tr class="header">
<th>失效形态</th>
<th>现象</th>
<th>为什么更快的推理救不了</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>局部极小 / 活锁</td>
<td>目标在立柱背后,策略每周期都想"直着过去",安全层每周期都刹停,原地抖动</td>
<td>每周期都做同样的错误决定,算得再快也只是更快地重复</td>
</tr>
<tr class="even">
<td>模式摇摆</td>
<td>这一周期选左绕、下一周期选右绕,来回切换,进度为零</td>
<td>同上</td>
</tr>
<tr class="odd">
<td>绕远</td>
<td>选了一条可行但很长的路,在时限内走不完</td>
<td>方向对了但路线差</td>
</tr>
</tbody>
</table>
<p>原规划器不会这样,是因为它做<strong>全局搜索</strong>(PRM +
A*)。去掉老师后,全局"想清楚往哪绕"这件事必须由模型自己承担。v2.1
用五个手段(全部在运行时不需要老师)把 near_column 要求提到
<strong>30/30</strong>:</p>
<ol type="1">
<li><strong>全局子目标头(分层)</strong>:模型在冷启动(新目标到达的第一个周期)额外输出
1–2
个途经点(关节空间),作为"绕柱方向"的锚点;之后每周期的动作块以"当前子目标"为条件,到达子目标后切到下一个。训练标签直接取自老师路径的拐点(离线已有)。这相当于把老师的全局搜索结果蒸馏成一次前向。</li>
<li><strong>价值头(剩余代价估计)</strong>:模型额外预测"从这个状态到目标还要多少时间"。APG
展开时有真实值可监督,不需要老师。部署时用它给 K
个模式打分,并作为"有没有进展"的判据。</li>
<li><strong>短前瞻选模式</strong>:每周期对 K=4
个模式各自再往前推一块(共 2 次批量前向 ≈ 2 × 2–5 ms),用 胶囊碰撞 +
价值头 给 32
步后的终态打分,选最好的。比只看第一块的概率更能避开"走两步就撞墙"的分支。</li>
<li><strong>卡死检测 + 强制换向</strong>:0.3 s 内价值头没有下降、或连续
2 个周期刹停 →
判定卡死,强制切到另一个绕行方向(另一个子目标/模式)并锁定 1
s(防止又切回来)。规则很简单、确定性、可测试。</li>
<li><strong>训练侧针对性加强</strong>:贴柱类任务在 APG 采样里占
40%;APG 展开长度覆盖整段绕行(约 3 s = 150
个周期,分段截断反传);对贴柱任务做拒绝采样自蒸馏(§7.3),模型自己成功的路线成为新标签。</li>
</ol>
<p>验收相应改为(§9.2):near pos / near rt 都必须
<strong>30/30</strong>,且到达用时 ≤ 老师路径动画时长 × 1.3。</p>
<h3 id="86-控制周期业界案例与评估">8.6 控制周期:业界案例与评估</h3>
<p><strong>工业臂 / 研究臂的外部实时接口(伺服层)</strong></p>
<table>
<thead>
<tr class="header">
<th>产品 / 接口</th>
<th>周期</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>Franka FCI(libfranka)</td>
<td><strong>1 ms(1 kHz)</strong></td>
<td>关节位置/速度/力矩、笛卡尔位姿;每周期往返 + 计算必须 &lt; 1 ms</td>
</tr>
<tr class="even">
<td>Universal Robots e-Series RTDE</td>
<td><strong>2 ms(500 Hz)</strong></td>
<td><code>servoj</code> 默认 t = 0.002</td>
</tr>
<tr class="odd">
<td>Universal Robots CB3 RTDE</td>
<td><strong>8 ms(125 Hz)</strong></td>
<td><code>servoj</code> 默认 t = 0.008</td>
</tr>
<tr class="even">
<td>ABB EGM</td>
<td><strong>4 ms(250 Hz)</strong>,可设为 4 ms 的整数倍</td>
<td>控制滞后 10–20 ms(随机型)</td>
</tr>
<tr class="odd">
<td>KUKA RSI</td>
<td><strong>4 ms</strong>(Fast)或 <strong>12
ms</strong>(Normal)</td>
<td></td>
</tr>
<tr class="even">
<td>FANUC DPM</td>
<td>约 <strong>8 ms</strong></td>
<td>R-30iB 无 1–2 ms 通道</td>
</tr>
<tr class="odd">
<td>MoveIt Servo(ROS 2)</td>
<td>默认 <strong>10 ms</strong>(新版);旧版示例 34 ms</td>
<td>常设为 ros2_control 更新频率的倒数(如 50 Hz → 20 ms)</td>
</tr>
<tr class="even">
<td>舵机(RC PWM)</td>
<td><strong>20 ms(50 Hz)</strong> 帧周期</td>
<td>数字舵机可到更高帧率</td>
</tr>
</tbody>
</table>
<p><strong>学习型策略的推理周期(策略层)</strong></p>
<table>
<thead>
<tr class="header">
<th>方法</th>
<th>策略频率</th>
<th>动作块</th>
<th>执行方式</th>
</tr>
</thead>
<tbody>
<tr class="odd">
<td>MπNets</td>
<td>9 Hz</td>
<td>单步</td>
<td>线性插值,1 kHz PD 跟踪</td>
</tr>
<tr class="even">
<td>Diffusion Policy</td>
<td>10 Hz</td>
<td>16 步</td>
<td>线性插值到 125 Hz 交给 UR5</td>
</tr>
<tr class="odd">
<td>ELMP</td>
<td>30 Hz(真机)</td>
<td>单步 Δq</td>
<td>每步 3 个航点线性插值给 Franka 位置控制器</td>
</tr>
<tr class="even">
<td>π0</td>
<td>50 Hz 动作,约每 0.5 s 推理一次</td>
<td>50 步(1 s)</td>
<td>执行 25 步后重算</td>
</tr>
<tr class="odd">
<td>ACT</td>
<td>50 Hz</td>
<td>100 步</td>
<td>时间集成</td>
</tr>
<tr class="even">
<td>DRP / IMPACT</td>
<td>可跑 300 Hz(4090)</td>
<td>10 步</td>
<td>闭环</td>
</tr>
</tbody>
</table>
<p><strong>结论:业界一律是"两层"结构</strong>——策略层 10–50 Hz(少数到
300 Hz)给出关节目标,伺服/插补层 125 Hz–1 kHz
负责平滑跟踪。没有人让神经网络直接跑 1 kHz 伺服环。</p>
<p><strong>对本方案的评估:</strong></p>
<ol type="1">
<li><strong>策略层 50 Hz(20 ms)合适</strong>:与 π0、ACT 同档,高于
ELMP 的 30 Hz 和 MπNets 的 9 Hz;我们模型小(3–4 M)、无点云,单次前向 +
安全检查预计 &lt; 10 ms,留有一倍余量。浏览器里
<code>requestAnimationFrame</code> 是 60 Hz,50 Hz 也能稳定跑。</li>
<li><strong>"提交 3 步(60
ms)"合适,且应按刹停距离定</strong>:它的作用是给推理抖动和通信滞后留缓冲。ABB
EGM 自身就有 10–20 ms 滞后;60 ms 足以覆盖一次推理超时 +
一次滞后。真机上应改成规则:提交步数 n ≥ ⌈(通信滞后 + 1 次推理最坏耗时)
/ 20 ms⌉ + 1,且刹停段另行验证。</li>
<li><strong>伺服层不归本方案管,但要匹配</strong>:策略输出 50 Hz
关节目标,由插补器升采样到电机控制器的频率(舵机 50 Hz
直接用;总线舵机/步进/FOC 驱动通常 ≥ 250 Hz–1
kHz,做三次样条插值)。</li>
<li><strong>做成可配置</strong>:<code>dt</code>(默认 20 ms)、提交步数
n(默认 3)、动作块长度 S(默认 16 = 320 ms)。训练数据按 dt = 20 ms
生成;若真机必须改到 10 ms(100 Hz),只需把动作块重采样,或用 dt = 10
ms 重造数据(约 5 小时)。</li>
<li>你的电机/驱动型号确定后,按第 2、3 条把 n 和插补频率定下来。</li>
</ol>
<hr />
<h2 id="9-第六步评估与验收">9. 第六步:评估与验收</h2>
<h3 id="91-测试集合">9.1 测试集合</h3>
@@ -1082,46 +1274,51 @@ rt)</td>
<td>rt_drag_bench 0</td>
</tr>
<tr class="even">
<td>到达率(6 s 内)</td>
<td>route ≥ 60/60,near pos ≥ 29/30,near rt ≥ 29/30,held-out ≥
97%</td>
<td>到达率</td>
<td>route <strong>60/60</strong>,near pos <strong>30/30</strong>,near
rt <strong>30/30</strong>,held-out ≥ 98%</td>
<td>60/60、30/30、30/30</td>
</tr>
<tr class="odd">
<td>到达用时</td>
<td>≤ 老师同任务路径动画时长 × 1.3</td>
<td>—</td>
</tr>
<tr class="even">
<td>关节行程</td>
<td>≤ 现有规划器 × 1.10</td>
<td>route 平均 467°</td>
</tr>
<tr class="even">
<tr class="odd">
<td>冷启动(新目标→第一个动作)</td>
<td>&lt; 10 ms</td>
<td>首次全量 IK 最差约 2 s</td>
</tr>
<tr class="odd">
<tr class="even">
<td>每周期耗时(推理+安全层)P99</td>
<td>&lt; 15 ms</td>
<td>拖拽重规划 P99 约 321 ms</td>
</tr>
<tr class="even">
<tr class="odd">
<td>刹停发生率</td>
<td>&lt; 2% 的周期</td>
<td>—</td>
</tr>
<tr class="odd">
<tr class="even">
<td>模式摇摆(≥3 次切换)</td>
<td>&lt; 1% 的任务</td>
<td>—</td>
</tr>
<tr class="even">
<tr class="odd">
<td>策略单独(关安全层)碰撞率</td>
<td>&lt; 3%(参考:ELMP-APG 8.9%,DRP 10.16%)</td>
<td>—</td>
</tr>
</tbody>
</table>
<p>说明:允许 near_column 少 1
例,因为无老师时最难的贴柱案例可能要靠多次刹停-重算才能到达,6 s
超时内可能失败;这一条请审查时确认能否接受。</p>
<p>说明:v2 曾提议 near_column 允许
29/30,用户否决(2026-10-17)。为保证
30/30,部署侧加入子目标头、价值头、短前瞻和卡死换向(§8.5)。</p>
<hr />
<h2 id="10-风险与维护">10. 风险与维护</h2>
<ol type="1">
@@ -1237,17 +1434,28 @@ MπFormer)</li>
<li>Li et al., <em>ELMP: Efficient Learning for Motion Planning via
Analytical Policy Gradients</em>, arXiv 2607.00215, 2026. <a
href="https://arxiv.org/abs/2607.00215">https://arxiv.org/abs/2607.00215</a></li>
<li>控制周期:Franka FCI <a
href="https://frankarobotics.github.io/docs/overview.html">https://frankarobotics.github.io/docs/overview.html</a>
;UR RTDE <a
href="https://www.universal-robots.com/articles/ur/interface-communication/remote-control-via-tcpip">https://www.universal-robots.com/articles/ur/interface-communication/remote-control-via-tcpip</a>
;ABB EGM 应用手册 3HAC073318;KUKA RSI <a
href="https://docs.quanser.com/quarc/documentation/kuka_rsi_block.html">https://docs.quanser.com/quarc/documentation/kuka_rsi_block.html</a>
;MoveIt Servo servo_parameters.yaml;Diffusion Policy <a
href="https://arxiv.org/abs/2303.04137">https://arxiv.org/abs/2303.04137</a>
;π0 <a
href="https://arxiv.org/abs/2410.24164">https://arxiv.org/abs/2410.24164</a>
;实时动作块执行 <a
href="https://arxiv.org/abs/2506.07339">https://arxiv.org/abs/2506.07339</a></li>
<li>Ross, Gordon, Bagnell, <em>A Reduction of Imitation Learning and
Structured Prediction to No-Regret Online
Learning</em>(DAgger),AISTATS 2011</li>
</ul>
<h2 id="14-需要用户确认">14. 需要用户确认</h2>
<ol type="1">
<li>训练机显卡型号与显存。</li>
<li>§9.2 中 near_column 允许
29/30(无老师下最难案例可能超时)是否接受。</li>
<li>控制周期 50 Hz、每周期执行 3 步(60
ms)作为默认值是否合适(真机控制器频率如有要求请告知)。</li>
<li><del>训练机显卡</del>:已定 RTX 3090 24 GB。</li>
<li><del>near_column 29/30</del>:已否决,要求 30/30(§8.5)。</li>
<li>控制周期:按 §8.6 评估保持策略层 50 Hz、提交 3
步;<strong>请告知真机电机/驱动类型与通信方式</strong>,用于确定插补频率和提交步数。</li>
</ol>
</body>
</html>
+73 -11
View File
@@ -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 步;**请告知真机电机/驱动类型与通信方式**,用于确定插补频率和提交步数。