XLeRobot · 数据采集规范 · 2026-08-23

调酒技能采集 · 操作者指南

这一页是实际录数据时的主要参考。规范全文见仓库 03-software/GOAL-bartender-skill-data-collection.md; 这里是操作台前用得上的那部分。

一句话概括这次改变:
不再把行为录成一条很长的「拿起 → 移动 → 放下 → 倾倒」完整轨迹, 而是建立可重复调用的技能库:PICK / PLACE / POUR,并区分左右臂。

因为真实的调酒不会每次都「拿起杯子 → 马上放下」。 Pick 和 Place 必须是能被上层单独调用的两个技能。

一、5 个 Task(MVP,只有这 5 个)

句子不能手输,只能在面板上选。选项由 03-software/scripts/bartender_tasks.py 提供 —— 那是唯一事实源, 面板、头盔页、录制进程都从它读,三处不会各写一份。

#Taskcanonical 句子(逐字,含句号)arm mode这一集什么时候算结束
[1]右臂 — 拿起杯子
Right Arm — Pick Up Cup
Pick up the cup with the right arm.arms=1
右臂
杯子已抓稳、明显离开桌面、手臂稳定持杯。★ 不要在这一集里把杯子放回去 ★
[2]右臂 — 放下杯子
Right Arm — Place Cup
Place the cup down with the right arm.arms=1
右臂
杯子稳放桌面、夹爪已打开并稍微撤离、杯子没有倾倒或滑动。★ 开始时右臂必须已经拿着杯子 ★
[3]左臂 — 拿起杯子
Left Arm — Pick Up Cup
Pick up the cup with the left arm.arms=2
左臂
左臂已稳定拿起杯子。★ 左臂必须有真实示范 ★ 右臂学会不等于左臂学会:两臂在 17 维里占不同维度,旧数据里左臂全程停在 home。
[4]左臂 — 放下杯子
Left Arm — Place Cup
Place the cup down with the left arm.arms=2
左臂
杯子稳放桌面、夹爪已打开并撤离。★ 开始时左臂必须已经拿着杯子 ★
[5]双臂 — 右倒入左
Bimanual — Pour Right → Left
Pour from the cup held by the right arm into the cup held by the left arm.arms=0
双臂
倾倒完成、右臂恢复竖直、双臂稳定。★ 这一集【不包含】Pick ★ 开始时两只手都已经拿着杯子。

为什么句子要锁死。SmolVLA 是语言条件模型 —— 换一句话等于换一个任务。 2026-08-23 实测到的代价:前 31 次实机试验用的是 "Grab the cup", 而数据集里是 "Pick up the cup and place it down"。 指令对不上,两天没人发现,因为前 31 次连 task 字段都没存下来。

二、Task 会自动决定 Arm Mode

Taskarm mode选错会怎样
右臂 Pick / Placearms=1(只右臂跟随) 录出一整批该动的手臂全程不动的数据 —— 看起来正常,训出来什么都不会。所以系统会直接拒绝开录。
左臂 Pick / Placearms=2(只左臂跟随)
双臂倾倒arms=0(两臂都跟随)

这个值在 03-software/configs/teleop_safety.yaml 的 vr_mapping.arms。注意同一个文件顶层还有一个 arms:, 那是每条臂的工作区包络,不是模式 —— 别改错了。

三、开录之前的 Checklist

硬件

  • 装的是正确的夹爪
  • 夹爪固定可靠
  • 舵机没有异常(面板上看温度)
  • 要用的那条臂工作正常

工作区

  • 桌面标定有效
  • workspace limit 有效
  • 物体在安全工作区内
  • 起始状态没有明显超出可达范围

相机

  • 三路相机全部在线
  • 方向正确、没有被遮挡
  • 头部相机在目标位置

Task

  • Task 选对了
  • Arm mode 匹配(面板会当场提示)
  • 数据集名正确(选 Task 后自动填)
目标集数 = 50
质量检查 = 开
每 10 集检查一次
出问题暂停 = 开

全部正常才开始第 1 集。

四、录的时候怎么动

改变杯子的位置,不要每次改变抓杯子的基本方法。

标准动作主要变化什么
Pick对齐 → 受控接近 → 闭合 → 抬起 → 稳定 → 结束杯子位置
Place已持杯 → 搬运 → 对准 → 下降 → 松开 → 撤离 → 结束放置目标位置
Pour两手已持杯 → 靠近 → 调整杯口 → 倾斜 → 倒完 → 恢复竖直 → 稳定两杯的相对位置

好的多样性 vs 坏的多样性

✅ 好❌ 坏
杯子位置变了,手臂据此自然调整,抓取策略始终一致 这一集从左边靠近、下一集从上面压、再下一集冲过头再退回来、 又一集绕杯子一圈、再一集先撞到再补救

让任务几何发生变化,不要让 demonstration philosophy 每次都变。

五、杯子该放在哪

不要再回到 P1–P5 五个完全固定的坐标点。那会让模型记住几个坐标, 而不是根据视觉真正定位杯子。

推荐把主要工作区放在更安全的中间区域,约 120–175 mm, 并在这个区域内做连续、小范围的变化。

旧数据同时出现了 Reach Arc、Forward Floor、At The Table Floor 三种 clamp, 说明有的位置偏远、有的偏近、下压也偏深。整体 clamp 率约 10% —— 卡在可接受的边界上。 下一批目标 ≤5%。

clamp 类型说明什么
Reach Arc 高杯子可能太远
Forward Floor 高杯子可能太近
At The Table Floor 高压得太深,或桌面标定有问题

六、什么必须重录

出现下面任何一种,直接 Re-record,不要因为「最后还是成功了」就留下:

为什么不能留。留下来等于教模型「大幅补救动作是标准轨迹的一部分」。 以后真要学失败恢复,应该单独采 Recovery Dataset。

Re-record 不计入集数,也不会触发质量检查 —— 已在代码里验证。

七、每 10 集自动体检

这件事不再靠你记住。第 10 / 20 / 30 / 40 / 50 集保存完成后自动跑, 检查逻辑在录制进程里,面板和头盔只显示结果。

检查项内容
数据完整性集数、metadata 可读、parquet 可读、 声明帧数 vs 实际行数 vs info.json 三方对账、三路视频文件是否真的在盘上
Clamp 质量本批 clamp 率 + Reach Arc / Forward Floor / At The Table Floor 分类计数
每集时长最近 10 集平均 / 最短 / 最长,异常短集告警(2 秒的多半是误触)
clamp 率判定会发生什么
≤ 5%GOOD继续录
5 – 10%WARNING报告,但不打断
> 10%FAIL录制自动暂停,等你决定

暂停之后必须你来做决定,面板上两个按钮:继续录(问题不修) 或 停止录制,先修。不做决定它会一直等 —— 这是有意的: 静默继续录后面的数据,正是这个闸门要防的事。

闸门不会自动删集、自动改工作区、自动移杯子、自动改轨迹。 它只做四件事:检测 → 解释 → 暂停 → 交给你决定。

为什么按「本批」算而不是累计

前 10 集很干净 (1%),后 10 集很糟 (15%)
累计值 = 8%   -> 判 WARNING,放过去了
本批值 = 15%  -> 判 FAIL,拦下来      ← 现在用的是这个

另外:clamp 日志行是每 2 秒节流打印的,所以数日志行数会严重低估。 现在由控制器把 clamp_frames/total_frames 计数器打进日志, 闸门用窗口两端做差算真实比率。

八、录制过程中屏幕上一直显示什么

TASK        右臂 — 拿起杯子
LABEL       Pick up the cup with the right arm.
MODE        arms=1(右臂)
DATASET     Suyang99/xlerobot-right-pick-cup-20260823-2130
EPISODE     07 / 50
NEXT CHECK  还有 3 集
QUALITY     GOOD

Task 不会在开始之后消失。头盔里只显示三种提示: 10 / 50 — CHECKING DATA、DATA OK — CONTINUE、 DATA WARNING — CHECK SCREEN。完整诊断在电脑面板上看。

九、第一轮录多少

Skill集数
Right Pick50
Right Place50
Left Pick50
Left Place50
Bimanual Pour50
合计250

50 是工程 baseline,不是数学上证明足够的数字。 正确流程:先录 50 → 训练 → 实机 rollout → 分析失败类型 → 再决定要不要补。 Bimanual Pour 未来很可能需要超过 50,但先用第一批测了再说。

五个 dataset 不等于五个最终模型。分开录是为了干净、好调试; 训练时可以把 task-labelled 的数据集合起来做 multi-task training。

十、旧的那 50 集怎么办

Suyang99/xlerobot-cup-grasp-20260820-0230(50 集 / 19453 帧 / 右臂 / task Pick up the cup and place it down)

这批里 Pick 和 Place 连在一条轨迹里,所以 不能算作新规范下的 50 条干净 Right Pick 数据。

但它仍然有用:当前云端训练实验、与旧模型对比、验证 batch size / 训练轮数。 把它当作 Legacy Combined Pick+Place Dataset —— 不要删除,也不要偷偷改它的 label。

十一、换了夹爪 = 新的 Embodiment Version

夹爪明显变化(更长 / 更软 / 换 TPU / 指尖结构 / 接触面 / 摩擦材料 / Fin-Ray 结构)之后, 相同的关节角已经对应不同的真实接触点。

安装新夹爪 → 机械检查 → 重测桌面/工作区 → 确认新安全区
→ 新建 Dataset Version → 重新录

不要把旧夹爪数据和新夹爪数据无说明地混成一批。

十二、超短版

开录前

1. 选对 Task
2. 确认 Arm Mode 匹配
3. 确认三路相机
4. 确认标定 / 工作区
5. 质量检查 = 每 10 集

录制中

改变物体位置
保持动作策略一致
减少不必要的修正
明显失败直接 Re-record

每 10 集

看:完整性 / 相机 / clamp 率 / 时长
目标:clamp ≤5% GOOD    5–10% 可用但要观察    >10% 暂停处理

核心原则

一个明确的命令 → 一个明确、可重复调用的机器人技能。
而不是:一个命令 → 一整套写死的调酒流程。

本页的 5 个 task 表由 bartender_tasks.py 直接导出,非手抄。 规范全文 42 节见仓库 03-software/GOAL-bartender-skill-data-collection.md。