XLeRobot · 行动计划 · 2026-08-23 深夜

接下来干什么

今晚把失败原因查清楚了,也发现了一个此前没人识别的因素(夹爪摩擦力)。 这一页把「今天发现了什么 → 每一条怎么解决 → 这一批做什么 → 下一批做什么 → 时间怎么排 → 要准备什么」全部写死,照着做就行。

一句话:现在不要再碰这个模型了。 先把夹爪换掉、把标定重做、 把新一批数据按今晚学到的纪律录出来。旧模型的问题已经诊断完毕, 但它的病根在数据里,而那批数据在换爪之后本来就要作废。

一、今天发现了什么,每一条怎么处理

#发现性质怎么解决状态
1面板启动策略作业用了没有 CUDA 的 Python,2.4 s/帧Bug 改用 train310 解释器已修
2ACM0/ACM1 上电顺序会反,连错总线Bug 按舵机数认总线(8=左/头,9=右/轮)已修
3面板轮询抢串口、预览抢相机,打死试跑Bug 试跑脚本进 BUS_OWNERS/CAMERA_JOBS,认进程不认时间窗已修
4动作块被拉长到 6 秒盲飞(训练 30 Hz,推理 8 Hz)设计缺陷 「--chunk-rate auto 按实测频率消费,重看间隔回到 1.7 s」已修
5一次串口丢包让整场作废健壮性 连接失败自动整体重试一次已修
6「head_motor_2 = 99.649 超标定 50°」的悖论文档错误 实为 49.846,在标定内。三处文档已更正已修
7试验只留三个计数,事后无法回答「降到多低」可观测性 「--trace 默认记录逐帧轨迹 + trace_vs_demo.py」已修
8杯位覆盖不均:22/7/17/4,集数 vs 抓取深度 r = −0.88根因 换爪后整批重录,杯位均衡(本页第三节)待你做
9夹爪摩擦力不足 —— 重放(完美动作)也把杯子推滑根因 换上已打印的高摩擦长爪(本页第二节)待你做
10录制时撞「桌面地板」98 次,包络忽略手腕俯仰次要 换爪后重标 measure_table.py;FK 桥纳入 wrist_flex(可选)待做

1–7 是我修的,你不用管。8、9、10 是接下来这一批的全部工作。 注意 8 和 9 都指向同一个动作:换爪 + 重录。这就是为什么下面只有一条主线。

二、这一批:换爪 → 重标 → 重录(主线)

0开工前的准备(不碰机器人)15 min
1先验张口,再装爪20 min

这一步不能跳。 仓库里挂着一条从未验证的风险:夹套让每片爪多占 9.34 mm, 双爪张口减少 18.68 mm,90 mm 的杯子还塞不塞得进去 —— 没人验过。 新爪更长更厚,风险更大。

PY=~/miniconda3/envs/train310/bin/python
$PY 03-software/scripts/gripper_range.py --arm right
它只驱动夹爪一个关节,手臂不动。必须有人在场。 测出实际的开合行程之后,用卡尺量最大张口,和杯子直径比。 塞不进去就别装了 —— 先改设计,否则录一半才发现就全白费。
2重标桌面高度(换爪必做)10 min

新爪更长 → 爪尖会在更高的手腕位置就触桌 → z_min 必须上调。 (这跟直觉相反,因为那个数约束的是手腕不是爪尖:爪尖挂在手腕下方约 0.159 m, 所以「手腕 z = 0.020」的含义就是「爪尖贴地」。)

$PY 03-software/scripts/measure_table.py
量法:把爪尖按在桌面上,读手腕位置。这次用你实际抓取时的手腕姿态去按, 不要让爪子垂直 —— 实测你闭爪时 wrist_flex = −6.5° ± 10.3°, 倾斜姿态下爪子的垂直投影更短,用垂直姿态标出来的 z_min 会偏保守 5–16 mm。
3对齐头部视角并存新预设10 min

面板「头部相机对准」→ 勾选叠上训练时的画面 → 用 ◀▶▲▼ 调到与参考图一致 → 存成新预设(建议命名 cup-grasp-v2)。

头部姿态会进每一帧的观测。新一批数据必须自始至终用同一个视角, 否则模型要额外去解释「场景为什么会平移」。旧预设 cup-grasp-v0 的角度是对的(实测差 <1°),照它调即可。
3.5★ 修掉录制路线的死区(新发现,别跳过)30 min

操作者反馈:teleop 里手腕能沉到很低,录制时却怎么都放不平。查下来两条路的 包络是一样的(录制也读同一份 teleop_safety.yaml),差别在控制律:

teleop(vr_teleop.py)录制(xlerobot_vr.py)
控制方式绝对位置 + 锚点增量累加
死区无threshold = 0.001
增益--scale 0.680 × 0.015 = 1.2
delta_y = 手的位移 × 80 × 0.015 = 手的位移 × 1.2
死区: |delta_y| < 0.001  ->  归零
反推: 手每帧移动 < 0.83 mm 全部丢弃
30 fps 下 = 手速慢于约 2.5 cm/秒 的动作,手臂纹丝不动

「把手腕慢慢放平、稳稳沉下去」恰好就是一个慢动作 —— 正好落在死区里被吃掉。 teleop 没有死区,所以那边能沉。

这不只是手感问题,它污染了训练数据。50 集示范闭爪高度 z = 0.032, 我们一直以为那是操作者能做到的极限;现在看,下沉这个动作在录制时被死区系统性削弱了。 今晚「模型没学会下沉」的诊断,根子可能在这里。

改动很小,但它是录制路线的核心控制律,必须验过再用:

# lerobot310/lerobot/teleoperators/xlerobot_vr/xlerobot_vr.py 第 344 行附近
threshold = 0.001      →   0.0002      # 手速门槛 2.5 cm/s → 0.5 cm/s
  1. 先跑面板的 trace_dry(走录制路线、手臂不动、11 步映射测试),记下现在的手感
  2. 改死区 → 再跑一次 trace_dry 对比
  3. 通过后先录 3 集练手(下一步),用 grasp_sight_check.py 看构图、 demo_coverage.py 看 z@close
  4. 判据很明确:新一批的 z@close 应明显低于旧批的 0.032,组内 σ 也应更小
死区存在是有原因的(抑制手抖),所以不能设成 0。 0.0002 是按「手速 0.5 cm/s」反推的 —— 这是选的值,不是量的值。 更严谨的做法:用 trace_dry 量一下静止时的手抖幅度,取它的 2 倍当死区。
4练手 3 集,先验纪律再正式录20 min

不要一上来就录 60 集。先录 3 集,跑准星检查,确认新爪下的构图和手感对了再开工。

$PY 03-software/scripts/grasp_sight_check.py --episodes 0 1 2 --out /tmp/probe.jpg
三条都对,再往下走。不对就调姿势重来 —— 现在花 20 分钟,胜过录完 60 集才发现方向错。
5正式录制:4 个杯位 × 15 集 = 60 集2–3 h

杯位必须均衡。上一批是 22/7/17/4,最右那个只有 4 集 —— 而模型恰恰在那里表现最差(r = −0.88)。这一批每个位置录满 15 集。

杯位大致 pan上一批这一批
最左−30°2215
中左−10°715
中右+9°1715
最右+23°415

录制时手上默念的三句话:

① 轴线向左偏,让左爪贴住杯子左缘(爪夹向右开合,对准杯心是错的)

② 腕部沉到杯沿以下再往前推进张爪,目标比上一批再深一点

③ 偏移做夸张、每集都做 —— 幅度刚够用的修正会被损失函数当噪声抹掉

6录完体检(三个脚本,5 分钟)5 min
$PY 03-software/scripts/grasp_sight_check.py    # 准星接触表:60 格构图是否一致
$PY 03-software/scripts/demo_coverage.py        # 杯位覆盖 + 两个相关系数
$PY 03-software/scripts/quality_gate.py         # 分窗 clamp 趋势

验收线(这一批的合格标准):

指标合格上一批实测
每个杯位集数≥ 15,四组相差 ≤ 322 / 7 / 17 / 4
组内闭爪高度 σ< 0.010 m0.0063 ~ 0.0141
集数 vs 深度相关性|r| < 0.4(说明覆盖已均衡)−0.88
准星构图跑偏的集0(跑偏就删掉重录)—
clamp 率< 10%,且趋势下降15% → 10%
不达标就补录那几个位置,别急着训练。 训练三小时换来一个"数据本来就偏"的模型,是最贵的浪费。
7训练 v23 h(可挂夜里)

只改三项,其余与 v1 完全一致(GOAL-NEXT.md 既定方案):

训练 loss 一定会比 v1 高(增强的必然结果)。不要误判为退步 —— 看 validation loss 和真机成功率,不看训练 loss。

8真机验收 10 次40 min
面板 → 速度 1.0 · 每次 40s · 动作块 auto → ▶ 实跑 10 次

验收标准:10 次成功 8 次。

三、时间规划

第一段 · 硬件与标定 约 1 小时
 准备 15 min → 验张口 + 装爪 20 min → 重标桌面 10 min → 头部对齐 10 min  → 修死区 + trace_dry 验证 30 min → 练手 3 集 20 min

第二段 · 录制 2–3 小时(可分两次,中间休息)
 4 个杯位 × 15 集;每录 10 集看一次质量回报

第三段 · 体检 5 分钟 → 不达标就回第二段补录

第四段 · 训练 3 小时以上 挂在夜里跑,人去睡觉

第五段 · 验收 40 分钟 真机 10 次

建议的切分:今天做完第一段 + 第二段的一半(30 集),明天补完剩下 30 集 → 体检 → 晚上挂训练 → 后天验收。不要熬夜连着录 60 集 —— 录制质量随疲劳下降,而这一批的核心价值就是「一致性」。

四、需要准备的东西

类别清单
硬件新夹爪(已打印)· 螺丝与热熔螺母 · 卡尺(量张口)· 带开关的插排(把 12V 插头接上去,比拔插头快)
耗材杯子(和上一批同一个)· 桌面标记(4 个杯位贴胶带,保证每次摆回同一点)
环境关掉 Jetson 上的浏览器和 VS Code · 光照条件与上一批一致(尽量同一时段)· 工作区无玻璃无液体
软件面板已就绪(<机器人地址>:8770)· 密码在 private 的 xlerobot-ops Space · 手机添加到主屏幕
心理把三句话背下来:轴线左偏 · 腕部下沉 · 偏移夸张

五、下一批(这一批成功之后)

  1. PICK 达成(8/10)后,才轮到双臂倾倒批次 —— 那是项目原定的下一个里程碑
  2. 双臂之前必须先建臂间碰撞检查(当前安全层是单臂优先,共同坐标系下的互碰检查还没有)
  3. 如果这一批仍不达标:按 trace_vs_demo.py 给出的量化偏差决定方向 —— 深度不够就再加深示范;位置偏就检查覆盖;两者都对却抓不住,回头再看夹爪

六、绝对不要做的

配套页: 0/14 失败分析 · 论文里一般怎么做 · 仓库文档 03-software/TUNING-PLAYBOOK.md、GRIPPER-SWAP-CHECKLIST.md。