跑完一批实机试验,按实际看到的现象找那一条。 每条原因都写了可能性、机理、怎么验、怎么修、在哪做。 已经用数据排除的会明说是哪个数字排除的 —— 不留模糊。
策略是拿【像素位置】学的:训练时「杯子在画面偏左 → 手往左移这么多」。相机一转,整个场景在像素上平移,策略照旧按像素反应,于是手臂系统性偏一边。★ 这是最能解释【系统性、方向一致】偏移的原因 ★ 随机误差不会一直偏同一边。
怎么验:面板「头部相机对准」→ 勾「叠上训练时的画面」→ ◀▶ 翻五张不同杯位,每张构图都要对得上
怎么修:重新对准头部,直到五张参考帧都能叠合
实测:右侧 pan +22.9° 那个杯位只有 4 集,而 eval_split=0.2 又切走 2 集 —— 模型实际只见过 2 集,失衡 11 倍。没学过的位置,输出会退化到训练分布的均值,也就是往数据最多的那一侧(pan −30.5°,22 集)偏。
怎么验:面板「数据可用性」→「覆盖体检」
怎么修:EVAL_SPLIT=0 重训 + 补录右侧杯位
关节零点一变,同样的关节角对应的笛卡尔位置就整体平移。这是纯机械问题,跟策略无关,所以【重放录制动作也会同样偏】。
怎么验:★ 重放对照实验 ★ --replay-episode 0 --send(不加载模型,直接重放录制动作)
怎么修:重放也偏 = 硬件动过,重新标定;重放不偏 = 排除这条
爪长变了,学到的「关节角 → 接触点」映射整体平移。
怎么验:对比当前爪与录数据时的爪长
怎么修:measure_table.py --pivot 重新标定
实测 集数 vs 抓取深度 r = −0.89:
pan −30.5°(22 集)闭爪 z=0.028 ← 抓得最深
pan +22.9°( 4 集)闭爪 z=0.038 ← 抓得最浅(就是「偏上」)
数据越少的位置抓得越浅越散。模型的弱点就是数据的弱点。
怎么验:面板「数据可用性」→「覆盖体检」,看各杯位的闭爪 z
怎么修:补录数据少的杯位;EVAL_SPLIT=0 用全部数据重训
同上一条的机理,只是方向变成上下:相机往下俯一点,画面里桌面显得更近,策略就以为已经够低了。
怎么验:叠图对比,看地平线和桌沿在画面里的高度
怎么修:重新对准头部
安全层的 z_min 约束的是腕部不是爪尖:z_min = 桌面高度 + 爪长。当前 GRIPPER_LEN=0.159、右臂 z_min=+0.02。爪长一变或桌面没重标,手就停在错误高度。
怎么验:z_min − 0.159 是否等于实测桌面高度(当前反推 −0.139)
怎么修:measure_table.py --pivot,然后更新 teleop_safety.yaml
最近几批拒帧率 0.0~0.52% —— 安全层几乎没拦过东西。这条已经用数据排除。
怎么验:看「实机试验」卡上的拒帧率
怎么修:不用动
batch=2 × 20000 步 = 只过了约 2 遍数据(官方配方是 66 遍)。欠训的模型输出趋于保守,幅度偏小。
怎么验:面板「训练交接自检」看 batch
怎么修:租卡,BATCH=32
98A 实测就是「柔度够但摩擦力不足」。这是材料问题不是几何问题。
怎么验:手动测:抓起装水的杯子横向拨一下
怎么修:装 82A 尖端弹性夹
闭爪 z 越大越浅,浅了只夹住杯口一点点。
怎么验:覆盖体检看闭爪 z
怎么修:同上
--speed 乘在步长上限上:0.3 档时钳位率 47.7%,1.0 档只有 2.7%。但 1.0 档已经跑过 0/10,所以这条不是主因。
怎么验:看钳位率
怎么修:speed 1.0
训练是 30 Hz 录的,本机推理约 8 Hz。chunk-rate=1 时 50 步的计划要播 6 秒,看上去就像手臂在慢慢挪。auto 档按真实时间播放。
怎么验:试跑卡的「动作块」选 auto
怎么修:chunk-rate=auto
这个症状的形状本身就指向数据:模型在哪个位置数据少,就在哪个位置失败。实测右侧只有 2 集进训练。
怎么验:覆盖体检,看失败那个位置有几集
怎么修:补录那个位置到和最多的一组相当
| 杯位 pan | 集数 | 闭爪 z(越大越浅) | 组内 σ |
|---|---|---|---|
| −30.5° | 22 | 0.028 ← 最深 | 0.0063 |
| −10.2° | 7 | 0.035 | 0.0101 |
| +8.8° | 17 | 0.034 | 0.0118 |
| +22.9° | 4 | 0.038 ← 最浅(就是「偏上」) | 0.0141 |
集数 vs 抓取深度 r = −0.89;集数 vs 组内散布 r = −0.75。
数据越少的位置,抓得越浅、越散。模型的弱点就是数据的弱点 ——
这不是需要更好的训练技巧,是需要更均衡的数据。
--dataset.eval_split=0.2 按集号顺序切最后 20%,
集号又恰好按杯位从左到右排 —— 所以右侧那 4 集里又被切走 2 集,
模型实际只见过 2 集,失衡从 5.5× 恶化到 11×。
| 做什么 | 能排除什么 | 成本 | |
|---|---|---|---|
| 1 | 看拒帧率(面板上现成的) | 安全层拦截、策略输出越界 | 0 |
| 2 | 叠图对比头部视角,五张不同杯位 | 相机视角变了(能同时解释偏右和偏上) | 2 分钟 |
| 3 | 覆盖体检 | 覆盖失衡 | 1 分钟 |
| 4 | ★ 重放对照实验 ★--replay-episode 0 --send |
最干净的一刀:不加载模型,直接重放录制动作。 重放也偏 = 硬件几何变了;重放不偏 = 策略学得不对 | 5 分钟 |
| 5 | 换 checkpoint 对比 | 该不该继续训 | 20 分钟 |
| 6 | 重训 | — | 租卡 1~2 小时 |