Spaces:
Running
Running
| <html lang="zh-CN"><head><meta charset="utf-8"> | |
| <meta name="viewport" content="width=device-width,initial-scale=1"> | |
| <title>方法一页纸 — React 力恢复</title> | |
| <link rel="preconnect" href="https://fonts.googleapis.com"> | |
| <link href="https://fonts.googleapis.com/css2?family=Fraunces:opsz,wght@9..144,600;9..144,700&family=IBM+Plex+Mono:wght@400;500&family=IBM+Plex+Sans:wght@400;600&family=Noto+Serif+SC:wght@600;700&family=Noto+Sans+SC:wght@400;500&display=swap" rel="stylesheet"> | |
| <style> | |
| :root{--paper:#0d1526;--ink:#dce7f5;--dim:#7c8db0;--grid:#1a2540; | |
| --force:#ffb347;--target:#ff7847;--ok:#7be0a0;--card:#111b31;--line:#24345;} | |
| *{box-sizing:border-box} | |
| body{margin:0;background:var(--paper);color:var(--ink); | |
| font-family:'IBM Plex Sans','Noto Sans SC',sans-serif;line-height:1.65;font-size:16px; | |
| background-image:linear-gradient(var(--grid) 1px,transparent 1px), | |
| linear-gradient(90deg,var(--grid) 1px,transparent 1px);background-size:44px 44px} | |
| .wrap{max-width:880px;margin:0 auto;padding:0 24px 80px} | |
| h1,h2{font-family:'Fraunces','Noto Serif SC',serif} | |
| h1{font-size:2.1rem;font-weight:700;line-height:1.2;margin:0 0 10px} | |
| h2{font-size:1.25rem;font-weight:600;margin:46px 0 8px;color:var(--force)} | |
| .kicker{font-family:'IBM Plex Mono',monospace;font-size:.76rem;letter-spacing:.16em; | |
| text-transform:uppercase;color:var(--force);margin-bottom:14px} | |
| header{padding:60px 0 26px;border-bottom:1px dashed var(--line)} | |
| .sub{color:var(--dim);max-width:720px} | |
| .card{background:var(--card);border:1px solid var(--line);border-radius:10px; | |
| padding:18px 22px;margin:14px 0} | |
| .step{display:grid;grid-template-columns:34px 200px 1fr;gap:12px; | |
| padding:10px 0;border-bottom:1px solid var(--line);align-items:baseline} | |
| .step:last-child{border-bottom:none} | |
| .step .n{font-family:'Fraunces',serif;font-size:1.25rem;color:var(--target)} | |
| .step .t{font-family:'IBM Plex Mono',monospace;font-size:.85rem} | |
| .step .d{color:var(--dim);font-size:.9rem} | |
| table{border-collapse:collapse;width:100%;font-size:.88rem;margin:10px 0; | |
| font-variant-numeric:tabular-nums} | |
| th,td{padding:7px 10px;border-bottom:1px solid var(--line);text-align:right} | |
| th{color:var(--dim);font-family:'IBM Plex Mono',monospace;font-size:.72rem; | |
| text-transform:uppercase;letter-spacing:.08em} | |
| td:first-child,th:first-child{text-align:left} | |
| img,video{max-width:100%;height:auto;border-radius:8px;border:1px solid var(--line); | |
| display:block;margin:12px auto} | |
| a{color:#4fd8e0}a:hover{color:var(--force)} | |
| .pill{display:inline-block;border:1px solid var(--line);border-radius:999px; | |
| padding:3px 12px;font-size:.75rem;font-family:'IBM Plex Mono',monospace; | |
| color:var(--dim);margin-right:8px;margin-top:12px;text-decoration:none} | |
| code{font-family:'IBM Plex Mono',monospace;background:#0a1120;padding:1px 5px; | |
| border-radius:4px;font-size:.85em} | |
| .ok{color:var(--ok)}.warn{color:#e0b34f} | |
| footer{margin-top:60px;padding-top:18px;border-top:1px dashed var(--line); | |
| color:var(--dim);font-size:.8rem} | |
| @media(max-width:640px){.step{grid-template-columns:28px 1fr;grid-auto-flow:dense} | |
| .step .d{grid-column:2} | |
| h1{font-size:1.45rem} | |
| table{display:block;overflow-x:auto;white-space:nowrap;-webkit-overflow-scrolling:touch} | |
| th,td{white-space:normal;min-width:110px}} | |
| </style></head><body><div class="wrap"> | |
| <header> | |
| <div class="kicker">React 力恢复 · 方法简介</div> | |
| <h1>从 GelSight 图像到法向力,一页讲完</h1> | |
| <p class="sub">无 marker gel,无 F/T 传感器,没有一帧来自我们平台的训练数据。 | |
| 一条只有一个拟合参数的物理管线。</p> | |
| <a class="pill" href="results_zh.html">↖ 评测结果</a> | |
| <a class="pill" href="index.html">总览(英文)</a> | |
| <a class="pill" href="recon_workbench.html">3D 工作台</a> | |
| <a class="pill" href="actions_zh.html">动作变换</a> | |
| <a class="pill" href="method.html">English</a> | |
| </header> | |
| <h2>管线——六步</h2> | |
| <div class="card"> | |
| <div class="step"><span class="n">1</span><span class="t">裁掉 1/7 边缘</span> | |
| <span class="d">深度网络在 SDK 的裁剪视野上训练;整幅画面含它从未见过的 LED 边缘</span></div> | |
| <div class="step"><span class="n">2</span><span class="t">RGB → 表面法向</span> | |
| <span class="d">逐像素 MLP(gsrobotics <code>nnmini</code>):三色照明使 颜色→法向 可逆</span></div> | |
| <div class="step"><span class="n">3</span><span class="t">Poisson 积分</span> | |
| <span class="d">法向 → 高度图;减去逐 episode 零图(15 个最低接触帧的中位数)</span></div> | |
| <div class="step"><span class="n">4</span><span class="t">背景平面移除</span> | |
| <span class="d">照明漂移积分后成为全局倾斜,可淹没真实压入;逐帧稳健平面拟合将其去除</span></div> | |
| <div class="step"><span class="n">5</span><span class="t">接触阈值</span> | |
| <span class="d">参考帧残差 MAD 的 5σ——逐传感器,因为噪声在 10–50 µm 间浮动</span></div> | |
| <div class="step"><span class="n">6</span><span class="t">体积 × c → 力</span> | |
| <span class="d">Winkler 弹性地基:F = c·Σδ·dA。刻度 c 是唯一拟合量——来自 FEA 真值,而非假设的 gel 常数</span></div> | |
| </div> | |
| <p>后处理:只在 <i>fresh</i> 触觉帧上做 3 点中值(逐行滤波会把重复行里的坏值数三次)。 | |
| 单帧尖峰从 4–8% 降到 ≈0。</p> | |
| <h2>光度重做——经典逐传感器标定(v2)</h2> | |
| <div class="card"> | |
| <p style="margin-top:0">Ground-truth depth supervision (commanded press depth in | |
| GlowTact) exposed that the generic depth MLP recovers only ~25% of true | |
| indentation and saturates (peak-depth ρ = 0.39) — and, deeper, that the | |
| <b>gsrobotics SDK's Poisson solver returns 39% of the amplitude even on a | |
| perfect synthetic gradient field</b> (line-integral proved the gradients were | |
| correct at 105%). Rebuilt on the classic Dong/Yuan calibration: difference | |
| image → per-sensor RGB lookup table, self-calibrated from GlowTact's | |
| spherical presses via the exact relation a² = d(2R−d) (R = 3.35 mm, no | |
| external data) → exact Poisson (Dong's fast_poisson, 100.7% on the same | |
| benchmark) → sphere-supervised spatial gain field → Drake-style stiffening | |
| foundation p = k₁δ + k₂δ² with imprint-derived shape conditioning.</p> | |
| <table> | |
| <tr><th>stage (held-out, GlowTact 0–20 N)</th><th>ρ</th><th>MAE</th></tr> | |
| <tr><td>MLP + linear Winkler (v1)</td><td>0.63</td><td>4.4 N</td></tr> | |
| <tr><td>LUT + solver fix + gain field + nonlinear foundation</td><td>0.80</td><td>2.75 N</td></tr> | |
| <tr><td>+ imprint shape self-conditioning</td><td><b>0.82</b></td><td><b>2.46 N</b></td></tr> | |
| <tr><td>spheres only (geometry exact — the method's ceiling)</td><td class="ok"><b>0.91–0.94</b></td><td class="ok">1.5–1.9 N</td></tr> | |
| <tr><td><b>spheres × 0–8 N</b> (React's operating range; 7-seed median, +isotonic)</td><td class="ok"><b>0.95</b> (0.93–0.96)</td><td class="ok"><b>0.78 N</b> (0.73–0.84)</td></tr> | |
| </table> | |
| <p class="footnote">Ceiling context: the CNC's own commanded depth predicts force | |
| at ρ = 0.975. The remaining pooled gap is object-dependent contact mechanics; | |
| sub-newton MAE on 0–20 N exceeds what geometry alone carries (the 200K-frame | |
| supervised network reaches 2.1 N on the same range). A new sensor needs one | |
| 2-minute ball-press pass — a calibration the React rig can adopt.</p> | |
| </div> | |
| <h2>验证(LUT-v2 管线)</h2> | |
| <div class="card"> | |
| <p style="margin-top:0">LUT-v2 管线在<b>四个带力标注的数据集</b>(FEATS、FoTa cnc_Mini、GlowTact、Sparsh)上验证,并与两个神经网络估计器同帧对比——每个数据集的预测 vs 真值散点图都在<a href="results_zh.html"><b>评测结果页</b></a>。一句话版:物理方法在所有域 0.77–0.99(GlowTact 0.99、cnc_Mini 视野内 0.95、Sparsh 视野内 0.97、FEATS 0.77),每个数字旁边都给出组内标签打乱对照(落在 −0.00 到 0.26 之间);每个网络在自己的 gel 域 0.90+,出域即塌。</p> | |
| </div> | |
| <h2>深度到底准到多少微米?</h2> | |
| <div class="card"> | |
| <p style="margin-top:0">上面所有 ρ 评的都是<b>力</b>。底层的深度此前只和我们自己的 | |
| 解析球冠比较过。现在它已经对着精确的逐像素真值测量——420 次 Tactile MNIST 触碰的 | |
| 网格光线投射深度,而且是球面标定无法自证的非球面几何——答案是一个 | |
| <b>由压入深度决定的区间</b>,而不是一个数字:</p> | |
| <table> | |
| <tr><th>压入深度</th><th>0.30 mm</th><th>0.60 mm</th><th>1.00 mm</th> | |
| <th>1.50 mm</th><th>2.25 mm</th></tr> | |
| <tr><td>MAE</td><td class="ok"><b>11 µm</b></td><td class="ok">35 µm</td> | |
| <td>68 µm</td><td>127 µm</td><td class="warn">281 µm</td></tr> | |
| <tr><td>峰值还原比</td><td>1.00</td><td>0.97</td><td>0.77</td><td>0.68</td> | |
| <td class="warn">0.55</td></tr> | |
| </table> | |
| <p>在 0.3 mm,且没有逐帧配准、也没有拟合压入尺度的情况下,Type-2 误差为 96.5 µm—— | |
| 低于 3D Cal 公布的全部三个数字(152.8 / 171.6 / 290.0 µm), | |
| 而他们的结果是<i>带</i>这两项才得到的。到 2.25 mm 我们只还原了大约一半峰值。 | |
| <b>这套重建的适用区间是浅接触,本页任何精度数字都必须连同其压入深度一起引用。</b></p> | |
| <p>同一次实验纠正了我们自己的两个说法,并确认了第三个:平头过度穹顶化是 | |
| <b>+7% 到 +12%</b>,而不是我们暗示的 +23–42%(gel 柔顺、会包裹平边, | |
| 所以真实的中心/边缘比是 1.33–1.40,而不是 1.0);未观测的 LUT bin 是 | |
| <b>次要</b>因素(与误差的相关性只有 0.10–0.29);而 <code>|dI|>8</code> | |
| 有效掩码确实被光晕主导(IoU 0.614、召回 0.917、过分割 0.531)。 | |
| 光度查找表<i>不是</i>薄弱环节——它的梯度在域外与真值相差 24.4°, | |
| 而在它自己的传感器上是 26.1°。完整表格、对照与 Taxim 相关的边界说明见 | |
| <a href="results_zh.html"><b>评测结果页</b></a>。</p> | |
| </div> | |
| <h2>有 marker 的 gel:多一步,以及它不是为了什么</h2> | |
| <div class="card"> | |
| <p style="margin-top:0">FEATS 是我们唯一一块带点的 gel。点会遮挡 gel, | |
| 所以光度查找表在点下没有有效颜色,Poisson 积分会把一层点阵凹坑烤进深度图—— | |
| 在整个重建表面上表现为麻点。修法就是 | |
| <a href="https://arxiv.org/abs/2106.08851">GelSight Wedge</a> | |
| (Wang/She/Dong/Adelson,ICRA 2021)图 10 针对 marker 孔洞给出的做法—— | |
| 检测这些点,然后<i>填充</i>而不是屏蔽——只不过从梯度域搬到了图像域: | |
| 把点从<b>参考帧和当前帧</b>里一起修补掉(cv2 Telea),再对修补后的两幅图做差分。</p> | |
| <table> | |
| <tr><th>方案</th><th>31.9 px 点距频率上的凹坑功率</th><th>力 ρ</th></tr> | |
| <tr><td>基线,不处理 marker</td><td>1.523</td><td class="ok">0.7747</td></tr> | |
| <tr><td><b>图像域修补,参考帧 + 当前帧</b>——已上线,仅用于深度</td> | |
| <td class="ok"><b>0.890</b>(×0.65)</td><td>0.7371</td></tr> | |
| <tr><td>改为修补梯度场</td><td>0.924</td><td>0.7408</td></tr> | |
| <tr><td>把孔洞内的梯度置零</td><td class="warn">1.251</td><td>0.7620</td></tr> | |
| </table> | |
| <p>这张表有两点值得读出来。<b>填充胜过屏蔽</b>:把孔洞里的 g 置零几乎没用(×0.93), | |
| 因为零补丁会在每个孔洞边界上放一层偶极子,频率恰好就是它本该去掉的那个点阵频率。 | |
| 以及<b>几何列和力列是相反的</b>——把凹坑功率减半的那个方案,恰恰是 ρ 掉得最多的。 | |
| 所以这一步只用于<b>深度与 3D</b>(<code>marker_removal.stages_depth</code>, | |
| 它是包一层而不是改动力的路径);FEATS 的力特征仍然来自未改动的管线。 | |
| 本站其余数据都是无 marker 的,检测器在那里找不到点,这一步是逐比特的空操作。</p> | |
| <p class="footnote">对照实验,因为“修补有用”是很容易自欺的结论: | |
| 把同样<i>面积</i>的随机假 marker 修补掉得到 ρ 0.7697——没有增益,所以这不是平滑效应。 | |
| 检测器在 FEATS 参考帧上得到 63/63 个点、0 个误检,阈值从 3 到 16 灰阶都保持 63; | |
| 而在 GlowTact 与 cnc 参考帧上恰好是 0 个,所以它是 marker 专用的。 | |
| 它也不是完全的修复:点会随 gel 剪切移动(中位 1.7 px,8% 的帧超过 8 px), | |
| 静态参考掩码会漏掉位移后的点。完整研究: | |
| <code>python -m force_recovery.marker_study all</code>。</p> | |
| </div> | |
| <h2>逐数据集标定</h2> | |
| <div class="card"> | |
| <p style="margin-top:0">这一点值得直说,因为它界定了上面那些 ρ 的含义:<b>管线里没有任何硬度或弹性模量常数</b>。代码不知道任何 gel 的邵氏硬度或杨氏模量。刚度只是隐式进入——被逐组最小二乘的权重、以及叠在其上的保序(isotonic)标定吸收掉了——而这些都是<b>逐数据集、逐压头/探头组</b>重新拟合的:每个 cnc_Mini 探头、每个 GlowTact 压头族、每个 FEATS 采集组各自拟合,组内一半拟合、一半留出。</p> | |
| <p>跨数据集共享的物理常数只有两个:球面标定出的 RGB 查找表,以及 <code>MM_PER_PIXEL</code>。深度之后的一切都会重新拟合。因此报告的 ρ 是<b>逐组的秩相关</b>——它说明从图像恢复的几何在组<i>内</i>与力单调相关,但<b>不</b>说明存在一个可跨 gel 迁移的绝对牛顿值模型;我们唯一试过的多物体混合拟合差得多(ρ 0.47),这正是选用几何已知的球体作标定物的原因。</p> | |
| <p>下面的重建也不是它看上去的那个噪声源,而且这是量出来的、不是假设的:<b>深度</b>场里的高频成分只占峰值深度的 <b>0.3%</b>(1.9 mm 按压上是 6.5 µm),而<b>梯度</b>场里是 <b>22.2%</b>——来自 LUT 分箱量化,9.8% 的接触像素落在球面标定从未观测到的 bin 里(用最近邻填充)。Poisson 积分本身就是低通,所以到深度这一步 LUT 噪声已经没了;梯度域调试面板里看到的麻点根本进不到力特征里。</p> | |
| </div> | |
| <h2>用真值驱动的优化</h2> | |
| <div class="card"> | |
| <p style="margin-top:0">cnc_Mini 的力标签把管线的弱点变成了可测量的缺陷,依次修复 | |
| (每一步都在留出集上验证):</p> | |
| <table> | |
| <tr><th>步骤</th><th>驱动它的证据</th><th>ρ(留出 val)</th></tr> | |
| <tr><td>基线(体积,逐集零图)</td><td>—</td><td>0.34 混合</td></tr> | |
| <tr><td>+ 散布按压的中位数零图</td><td>2686 帧里只有 4 帧真无接触;最低力参考帧带着 1.7 N 的既有接触</td><td>≈ 不变(零图不是瓶颈)</td></tr> | |
| <tr><td>+ <b>照明平场归一</b></td><td>力拟合残差与接触位置相关(|ρ| 达 0.6);按探头×象限条件化 ρ 0.45→0.55——渐晕在调制深度 MLP 的增益</td><td>0.44 混合</td></tr> | |
| <tr><td>+ <b>边缘过滤</b>(接触质心距边 > 3 mm)</td><td>贴边按压处渐晕最陡,印痕还会出传感器边界</td><td><b>0.65</b>(探头中位 0.64)</td></tr> | |
| </table> | |
| <p><b>体积还是最大深度?</b>实证裁决:体积家族胜出(δ<sup>1.5</sup> 加权 0.65、 | |
| 纯体积 0.63)优于最大深度(0.63),明显优于接触面积(0.35);3 特征小线性模型 ρ 持平 | |
| 但 MAE 减半(0.61 N)。天花板也要认识:连 CNC 自己的指令压深在<i>探头内</i>也只有 | |
| ρ 0.78–0.88——同样深度下力确实随纹理和位置变化。</p> | |
| </div> | |
| <h2>图库</h2> | |
| <div class="card"> | |
| <p style="margin-top:0">20 个图像样本(原图 | 压入图 | 重建的 Open3D 网格 | 预测 vs 真值力) | |
| 与 10 个 React 片段(触觉 | 实时深度 | 实时 Open3D 网格 | 力曲线):<a href="gallery.html">浏览完整图库</a>。网格面板在每一个新触觉帧上重新渲染。</p> | |
| <img src="assets/gallery/cnc_08.png" alt="sample panel"> | |
| <video controls muted loop playsinline preload="metadata" | |
| src="assets/gallery/clip_motherboard_episode_002_right.mp4"></video> | |
| </div> | |
| <h2>GelSight Mini 上 NN 与 model-based 谁对比过?</h2> | |
| <div class="card"> | |
| <p style="margin-top:0"><b>没有找到公开发表的正面对比。</b> | |
| 文献分成互相引用但不互相 benchmark 的两个阵营。 | |
| Model-based:marker 位移 × 弹性理论 | |
| (<a href="https://ieeexplore.ieee.org/document/8202149">Yuan 2017</a>)、 | |
| 光度立体高度图 + 多项式拟合、逆有限元 | |
| (<a href="https://arxiv.org/abs/1810.04621">GelSlim, Ma 2019</a>)。 | |
| 学习类(专门在 Mini 上): | |
| <a href="https://openreview.net/forum?id=dUO0QQw4FW">CANFnet</a>(F/T 标注,仅法向)、 | |
| <a href="https://arxiv.org/abs/2411.03315">FEATS</a>(FEA 标注,3D 分布)、 | |
| <a href="https://arxiv.org/abs/2410.02048">FeelAnyForce</a>(20 万 ATI 标注)。 | |
| 它们都只定性地论证 NN 优于物理方法——FEA 太慢、线性弹性抓不住弹性体非线性—— | |
| 但论文里对比的 baseline 全是其他<i>网络</i>,没有物理管线。</p> | |
| <p>因此我们的 FEATS 实验算是少数直接对比数据点之一:物理管线只用<b>一个</b>拟合标量、 | |
| 零训练帧,达到 ρ 0.70–0.85;NN 在域内能到亚牛顿 MAE,但出了自己的 gel 就失效 | |
| (FEATS 在我们的无点 gel 上完全无响应)。这是可移植性与域内精度的取舍—— | |
| 选哪个取决于你能否在自己的传感器上采标注。</p> | |
| </div> | |
| <h2>还能怎么改进——learning 有用吗?</h2> | |
| <div class="card"> | |
| <p>五个候选改进,每个都配了一个足以否定它的对照。两个存活。复跑: | |
| <code>python -m force_recovery.improvement_study all</code>。</p> | |
| <table> | |
| <tr><th>思路</th><th>结果</th><th>结论</th></tr> | |
| <tr><td>提取剪切敏感特征<br> | |
| <span class="footnote">残差与剪切相关 ρ 0.31–0.40</span></td> | |
| <td>把<b>真实</b>剪切作为预言机特征喂进去,ρ 仅 0.9749 → 0.9757 | |
| (MAE 0.0360 → 0.0345)</td><td><b>关闭</b>——相关性是混杂的, | |
| 两者都随力的大小变化</td></tr> | |
| <tr><td>在同样特征上用小神经网络</td> | |
| <td>MLP 32×16 0.967 · MLP 64×64 0.972 · 梯度提升 0.972, | |
| 而<b>线性+isotonic 为 0.974</b></td> | |
| <td><b>无用</b>——每块 pad 仅约 400 帧视野内数据,柔性模型过拟合</td></tr> | |
| <tr><td><b>对数特征</b>(误差是乘性的)</td> | |
| <td>ρ 0.9735 → <b>0.9822</b>,MAE 0.0361 → <b>0.0310</b>(−14%)</td> | |
| <td><b>采纳</b></td></tr> | |
| <tr><td>“PINN-lite” 量纲无关接触律 | |
| <i>F/A = g(δ/√A)</i></td> | |
| <td>在 球→平 上看似决定性(MAE 0.426 → 0.150 N,胜过 MLP 的 0.297)—— | |
| 但 <i>F = g(体积)</i> 达到 <b>0.0736 N</b></td> | |
| <td><b>否决</b>——增益来自“用一个单调特征而非五个”, | |
| 不是那个物理形式</td></tr> | |
| <tr><td><b>让模型复杂度匹配迁移场景</b></td> | |
| <td>见下</td><td><b>采纳</b></td></tr> | |
| </table> | |
| <p>唯一真正的结构性发现:<b>单一单调的体积特征在未见过的压头形状上比五特征模型 | |
| 泛化得更好</b>,而一旦该形状已被标定,五特征仍然更优。在 GlowTact 留一压头交叉验证中 | |
| (模型从未见过被留出的形状),这恰好修复了我们此前报告的两个短板:</p> | |
| <table> | |
| <tr><th>留出的压头</th><th>五特征 ρ</th><th>仅体积 ρ</th></tr> | |
| <tr><td>round</td><td>0.958</td><td><b>0.993</b></td></tr> | |
| <tr><td>star</td><td>0.977</td><td><b>0.991</b></td></tr> | |
| <tr><td>quad_small</td><td>0.989</td><td><b>0.997</b></td></tr> | |
| <tr><td>B / quad / triangle</td><td>0.981–0.995</td><td>0.986–0.996</td></tr> | |
| </table> | |
| <p class="footnote">现在每个被留出的压头都达到 ρ ≥ 0.986,<i>而模型从未见过该形状</i>—— | |
| 这比结果页上“逐压头标定”的数字是更强的论断(后者是在各家族内部拟合的)。 | |
| 代价在绝对牛顿:形状已知时五特征的 MAE 仍更优(Sparsh 跨 pad 0.0372 vs 0.0443 N), | |
| 所以规则是:未见形状用仅体积,已标定则用五特征。把物理律里的 <i>g</i> 换成学习模型会完全崩溃 | |
| (ρ −0.249):isotonic 在训练范围外单调截断,而网络会自由外推。</p> | |
| </div> | |
| <footer>React 力恢复 · | |
| <a href="https://huggingface.co/datasets/yxma/React">数据集</a> · | |
| <a href="index.html">完整结果</a> · | |
| <a href="actions_zh.html">动作变换</a> · | |
| 代码:<code>twm/force_recovery/</code></footer> | |
| </div></body></html> |