docs(训练方案 v2.1): 3090 24G 训练配置;near_column 验收改 30/30,新增超时成因与子目标头/价值头/短前瞻/卡死换向;新增控制周期业界调研与评估
This commit is contained in:
+232
-24
@@ -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;
|
||||
@@ -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. 按"模式概率 − 切换代价"排序(§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)</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>关节位置/速度/力矩、笛卡尔位姿;每周期往返 + 计算必须 < 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)、无点云,单次前向 +
|
||||
安全检查预计 < 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>< 10 ms</td>
|
||||
<td>首次全量 IK 最差约 2 s</td>
|
||||
</tr>
|
||||
<tr class="odd">
|
||||
<tr class="even">
|
||||
<td>每周期耗时(推理+安全层)P99</td>
|
||||
<td>< 15 ms</td>
|
||||
<td>拖拽重规划 P99 约 321 ms</td>
|
||||
</tr>
|
||||
<tr class="even">
|
||||
<tr class="odd">
|
||||
<td>刹停发生率</td>
|
||||
<td>< 2% 的周期</td>
|
||||
<td>—</td>
|
||||
</tr>
|
||||
<tr class="odd">
|
||||
<tr class="even">
|
||||
<td>模式摇摆(≥3 次切换)</td>
|
||||
<td>< 1% 的任务</td>
|
||||
<td>—</td>
|
||||
</tr>
|
||||
<tr class="even">
|
||||
<tr class="odd">
|
||||
<td>策略单独(关安全层)碰撞率</td>
|
||||
<td>< 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
@@ -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