← reports index
假设清单 · 2026-09-10

右臂 0/14:还剩哪些可能

同一套配方左臂 15/20、右臂 0/14。这一页把所有能想到的解释摆出来,标清楚哪些已经被量掉了、哪些还活着,以及每个活着的假设要花多少代价才能验掉。按「能排除多少 ÷ 花多少」排序,不按可能性大小。

先说清楚 0/14 是哪个模型。Suyang99/xlerobot-smolvla-right-sd-p0.2-b16-u20000,训练数据是 xlerobot-right-pick-cup-20260826-0042 单独 40 集(实读自它的 train_config.json)。
2026-09-10 合并出来的 73 集数据集,至今没有任何模型训练过 —— 05-training/ 下只有 left-sd 和 right-sd 两个 checkpoint 目录。 所以下面所有分析说的都是加补录之前的右臂模型。

一、已经量掉的(九条)

都是跑出来否掉的,写下来是为了别再走一遍。注意有三条的结论和直觉相反。

假设实测判定
左臂那个任务更简单、不用看杯子左臂训练集闭爪 pan σ 14.72°(极差 59.1°),右臂 10.45°(46.9°)。「永远输出中位 pan」的误差中位:左 12.6°、右 5.2°反了,左臂更需要看
右臂标定漂了标定文件全部停在 2026-08-16,0826 录制(08-26)之后没人动过排除
右臂数据节奏太规律,模型学会数拍子闭爪@集长的标准差:右 7.0%、左 8.0%基本一样
左臂训练集光照更多样所以更鲁棒亮度 σ:右臂 4.3(极差 37.6),左臂 2.8(13.8)反了
两次测试的光照条件不同init 关键帧各 28 张:09-08 右臂 亮度 106.1 / 对比度 46.4 / 暗像素 17.9% / G-R 1.006;09-09 左臂 104.4 / 45.8 / 16.3% / 1.003几乎一模一样
安全层把动作削掉了trace 逐帧比 raw vs safe:pan / elbow / wrist / gripper 被改 0.0%,shoulder_lift 0.4%排除
策略命令的动作太慢每控制周期命令 lift+elbow 走 3.00°,示范在同样时间窗(0.136 s)应走 2.86°速度正常
模型够不到杯子17 次试跑最远前伸中位 20.2 cm,示范闭爪位置是 18.0 cm够得到
相机名字/分辨率对不上input_features 就是 head / left_arm_wrist / right_arm_wrist,不传 rename_map;run_policy_trials.py:647 head 固定 424×240一致

二、还活着的假设

按「能排除多少 ÷ 花多少」排,不按可能性大小 —— 先做便宜的,哪怕它不是最可能的那个。

① 推理停顿导致重规划回退 · 半小时 · 不用训练

目前最强的一条,而且从没在右臂上试过。
实测:右臂 46% 的时间在等推理(每 12 拍一次、每次约 1.4 s),左臂 26%。 前进有效率(最远前伸 ÷ 指令总路程)右臂 10.3%、左臂 40.7%。 右臂在 11–15 cm 之间来回摆了整整 60 秒。
机制:n_action_steps=50,每周期取 chunk_k 步 —— k=4 时队列 12.5 拍见底,k=1 时 50 拍。每次见底停下来推理,解冻后新计划不接旧计划,往回走一段。
怎么测:right-sd 跑 5–10 次 chunk 1/1。有效率若从 10% 一档升到 40% 一档,就是它。
历史:右臂在 chunk 1/1 下总共只跑过 1 次,还是 void。详见 失败机制那一页。

② 重规划时喂进去的是旧画面 · 十分钟 · 纯读代码

如果画面是在那 1.4 秒停顿之前抓的,策略就是拿 1.4 秒前的视野规划当下的动作 —— 而这期间手臂已经走了 1.7 秒的计划。 这会直接产生「新计划和现状对不上、于是往回修」的行为,和 ① 观察到的现象一模一样,但修法完全不同(① 改 chunk_k,② 改取帧时机)。
怎么测:读 run_policy_trials.py 的主循环,确认 observation 的抓取时刻相对于 inference 的位置。不用上机。

③ 从中途姿态起手时,计划本身就不连续 · 一小时 · 离线

09-08 测过「从不同 phase 起手时瞄不瞄得准」(home −0.03、phase 0.35 +0.90、phase 0.70 +1.02), 但没测过「计划本身连不连续」 —— 即从够取中途的状态出发,那 50 步是接着往前,还是先退回再来一遍。
怎么测:固定一张图,把 state 沿一条示范轨迹采样,逐个看输出的 50 步计划形状。纯离线,不占机器。

④ 测试时杯子放在训练最疏的那一档 · 半小时 · 离线

0826 的杯位覆盖最密 20 集、最疏 1 集,而 09-08 报告说操作者标的 hard zone 正是最疏那端。 如果那 14 次多数落在最疏档,0/14 有一部分是「没教过」而不是「学不会」。
障碍:trials 记录里没有杯位字段(initial = None)—— 这正是录制指南第 4 项「杯位写进每集元数据」至今未做的后果。
但能补救:trials/keyframes/kf-*-init.jpg 每次试跑的起始帧都在(09-08 共 28 张),从图里把杯子位置量出来即可。

⑤ 数据覆盖不够 —— 而合并集从没训过 · 4090 一小时

右臂只有 40 集,左臂 54 集;右臂最疏杯位档只有 1 集。 2026-09-10 合并好的 73 集(0826 + Sep 8 全部六个会话)已经在 Hub 上,但没有任何模型训练过。
注意:按录制指南打分,73 集仍然没有达到第 1 项(每档 ≥12 集,四档不足), 第 2 项节奏散度 7.8%(要求 ≥15%)更是加多少集都不会变。所以这一步能改善覆盖,但不该指望它单独翻盘。

⑥ 示范慢 2.8 倍,一次计划只覆盖任务的 20% · 训练一轮

从起手到闭爪:左臂 4.37 s / 前伸 17.68 cm / 3.79 cm·s⁻¹;右臂 8.18 s / 11.66 cm / 1.34 cm·s⁻¹。 右臂走得更近、关节路程更绕(297.6° vs 230.9°)、时间更长。
一次 50 步计划 = 1.67 s,占右臂整个够取的 20%、左臂的 38% —— 同一次抓取右臂要多规划一倍次数,和 ① 的停顿机制直接叠加。
怎么测:这条和 ① 耦合,必须等 ① 做完再单独验,否则分不清。

⑦ 右臂实际跟不上指令 · 改几行 + 一次试跑

现有 trace 只记录指令(raw / safe),不记录实际到达位置,所以「手臂有没有走到」这件事用现有数据证不了。 如果右臂在负载下欠行程或滞后,喂回给策略的 state 就是错的,会直接制造出「计划和现状对不上」。
怎么测:跑测时同时记 present position,和 safe 逐帧比。

⑧ 右臂夹爪硬件与 0826 录制时不是同一个 · 查记录

换爪会让示范和现状对不上。项目记录说换爪之后 PICK 这条线是从重新采数据开始的、当前数据集就是 0826-0042, 所以 0826 应该是换爪之后录的 —— 但这一条我没有当场核对时间戳。列在这里是为了不漏。

三、建议的顺序

顺序做什么成本为什么排这个位置
1② 读代码确认取帧时机十分钟最便宜,而且它和 ① 现象相同、修法不同 —— 先分开
2① right-sd 跑 5–10 次 chunk 1/1半小时唯一没变过的推理参数;不用训练
3④ 从 init 关键帧反推 09-08 的杯位半小时纯离线,能判定 0/14 里有多少是「没教过」
4③ 离线看计划连续性一小时若 ① 没救回来,这是下一个落点
5⑦ 加 present position 记录一次试跑把「手臂跟不跟得上」这个盲区补上
6⑤ 用 73 集重训4090 一小时前面都排除完再动训练,否则无法归因
为什么训练配置排在最后。①③⑥⑦ 里只有 ⑥ 需要动训练配置,而它和 ① 耦合。 现在改配置会把唯一没被污染的变量一起搅掉,跑出来的结果没法归因。 前五步全部不需要重新训练,加起来不到一天。
跑任何上机实验之前的两个现场条件。 桌上要有杯子(2026-09-10 13:20 实测工作区是空的); 当前光照是强方向光加硬阴影(对比度 60.3、暗像素 36%), 而两个训练集和 09-08/09-09 两次测试都在平光下(对比度 46–49、暗像素 16–20%)—— 今天这个条件是分布外的,拉上百叶窗再跑。

还有:起跑测必须用 ~/miniconda3/envs/train310/bin/python。用 lerobot 那个环境会静默落到 CPU, 每次推理 2.4 秒、动作计划被拉长十倍,抓取根本完不成。日志里要看到 == device: cuda (Orin)。
数据:05-training/trials/traces/(右臂 17 条 / 左臂 14 条)· 05-training/trials/keyframes/(各 28 张 init 帧)· 两个 checkpoint 的 train_config.json
相关:失败机制:右臂在原地刷 · 右臂一天 16 次全败 · 0826+sep8 合并数据 · 录制指南
本页数字实测于 2026-09-10 本机 Jetson