这一页是实际录数据时的主要参考。规范全文见仓库
03-software/GOAL-bartender-skill-data-collection.md;
这里是操作台前用得上的那部分。
一句话概括这次改变:
不再把行为录成一条很长的「拿起 → 移动 → 放下 → 倾倒」完整轨迹,
而是建立可重复调用的技能库:PICK / PLACE / POUR,并区分左右臂。
因为真实的调酒不会每次都「拿起杯子 → 马上放下」。 Pick 和 Place 必须是能被上层单独调用的两个技能。
句子不能手输,只能在面板上选。选项由
03-software/scripts/bartender_tasks.py 提供 —— 那是唯一事实源,
面板、头盔页、录制进程都从它读,三处不会各写一份。
| # | Task | canonical 句子(逐字,含句号) | 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 | 选错会怎样 |
|---|---|---|
| 右臂 Pick / Place | arms=1(只右臂跟随) |
录出一整批该动的手臂全程不动的数据 —— 看起来正常,训出来什么都不会。所以系统会直接拒绝开录。 |
| 左臂 Pick / Place | arms=2(只左臂跟随) | |
| 双臂倾倒 | arms=0(两臂都跟随) |
这个值在 03-software/configs/teleop_safety.yaml 的
vr_mapping.arms。注意同一个文件顶层还有一个 arms:,
那是每条臂的工作区包络,不是模式 —— 别改错了。
目标集数 = 50
质量检查 = 开
每 10 集检查一次
出问题暂停 = 开
全部正常才开始第 1 集。
改变杯子的位置,不要每次改变抓杯子的基本方法。
| 标准动作 | 主要变化什么 | |
|---|---|---|
| Pick | 对齐 → 受控接近 → 闭合 → 抬起 → 稳定 → 结束 | 杯子位置 |
| Place | 已持杯 → 搬运 → 对准 → 下降 → 松开 → 撤离 → 结束 | 放置目标位置 |
| Pour | 两手已持杯 → 靠近 → 调整杯口 → 倾斜 → 倒完 → 恢复竖直 → 稳定 | 两杯的相对位置 |
| ✅ 好 | ❌ 坏 |
|---|---|
| 杯子位置变了,手臂据此自然调整,抓取策略始终一致 | 这一集从左边靠近、下一集从上面压、再下一集冲过头再退回来、 又一集绕杯子一圈、再一集先撞到再补救 |
让任务几何发生变化,不要让 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 / 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 Pick | 50 |
| Right Place | 50 |
| Left Pick | 50 |
| Left Place | 50 |
| Bimanual Pour | 50 |
| 合计 | 250 |
50 是工程 baseline,不是数学上证明足够的数字。 正确流程:先录 50 → 训练 → 实机 rollout → 分析失败类型 → 再决定要不要补。 Bimanual Pour 未来很可能需要超过 50,但先用第一批测了再说。
五个 dataset 不等于五个最终模型。分开录是为了干净、好调试; 训练时可以把 task-labelled 的数据集合起来做 multi-task training。
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。
夹爪明显变化(更长 / 更软 / 换 TPU / 指尖结构 / 接触面 / 摩擦材料 / Fin-Ray 结构)之后, 相同的关节角已经对应不同的真实接触点。
安装新夹爪 → 机械检查 → 重测桌面/工作区 → 确认新安全区
→ 新建 Dataset Version → 重新录
不要把旧夹爪数据和新夹爪数据无说明地混成一批。
1. 选对 Task
2. 确认 Arm Mode 匹配
3. 确认三路相机
4. 确认标定 / 工作区
5. 质量检查 = 每 10 集
改变物体位置
保持动作策略一致
减少不必要的修正
明显失败直接 Re-record
看:完整性 / 相机 / clamp 率 / 时长
目标:clamp ≤5% GOOD 5–10% 可用但要观察 >10% 暂停处理
核心原则
一个明确的命令 → 一个明确、可重复调用的机器人技能。
而不是:一个命令 → 一整套写死的调酒流程。
本页的 5 个 task 表由 bartender_tasks.py 直接导出,非手抄。
规范全文 42 节见仓库 03-software/GOAL-bartender-skill-data-collection.md。