Skip to main content
第 3 阶段 · 第 11 章 · 理论

11. 机器人数据集与任务设计

什么是 Episode、一帧数据里到底有什么、时间戳与数据同步、任务的起止条件、一致性与多样性、数据量与质量,以及一个完整的 A 到 B 抓放示例。

什么是 Episode?​


从本章起,你每做一次操作都意味着角色转变 —— 你不再是"驾驶员",而是"老师"。 你的每个动作都会被记录下来,成为模型的教材。这本教材的基本单元就是 Episode。

一个 Episode 就是一次完整的任务演示。 从机械臂处于起始姿态、任务开始,到任务完成,系统连续记录的全部数据构成一个 Episode。


一帧数据里到底有什么?​


回忆第 8 章 —— 这些内容应该很眼熟。没错,就是学过的:观测、状态、动作。

在 SO-ARM 上,录制的一帧包含:

  • 观测:两个相机的图像(前 + 侧);
  • 状态:从臂的 6 个关节读数(5 个关节 + 夹爪);
  • 动作:来自主臂的 6 个目标关节值。

注意动作的来源:它记录的是(经主臂)给定的目标动作,而不是从臂之后实际到达的位置。这正好符合行为克隆的定义 —— 模型学习的是"在此观测与状态下,人当时想做什么"。


时间戳与数据同步​


图像走 USB、关节数据走串行总线 —— 两路数据天然在不同时刻到达电脑。LeRobot 为每帧数据打时间戳,从而把"同一时刻"的图像、状态、动作对齐到同一行。

时间戳与同步

任务设计:起止条件​


采数据之前,先把任务定义用文字写清楚。一个好的任务定义回答两个问题:从哪里开始?什么时候算完成?

起始条件:给模型一个"固定起点"​

  • 固定的初始臂姿:每个 Episode 都从同一个安全姿态出发(例如标定后的归位姿态)。如果起始姿态五花八门,模型的第一课就变成"从任意姿态进入任务",平添不必要的难度。

结束条件:给 Episode 画一条"终点线"​

  • 成功结束:任务目标达成(例如"物体已放到 B 点、夹爪松开、机械臂离开");
  • 失败终止:出现不可挽回的情况(物体掉落、物体被碰出桌垫、机械臂进入危险姿态)—— 立即停止本条 Episode 的录制。

一致性 vs. 多样性​


这是全章最关键的一节。高质量的示教数据必须同时满足两个看似矛盾的要求。

一致性:只教"一种做法"​

  • 操作风格一致:同一个任务,所有 Episode 采用同一策略(例如总是从物体上方接近、抓取、放到 B 点)。如果一半数据从左抓、一半从右抓,模型学到的是两种做法的"平均" —— 往往是一条什么也抓不到的怪异轨迹;
  • 节奏一致:移动速度与停顿位置大体稳定 —— 定了 20–30 秒,就在 20–30 秒内完成。速度忽快忽慢的数据,会让模型的动作速度也不稳定;
  • 流程一致:每次都完整走"接近 → 抓取 → 搬运 → 放置 → 收回",不跳步骤;
  • 场景初始状态可控:物体放在指定区域内(区域可以大,但边界要清晰);工作区里拿走无关物品;
  • 相机位置固定:采集期间相机不能动 —— 对模型而言,相机挪 5 厘米就意味着世界变了。

多样性:见过足够多的"变体"​

  • 目标位置多样:物体出现在工作空间的各个位置(网格化覆盖,而不是随机乱撒);
  • 初始姿态多样:物体的朝向、与障碍物的相对位置要有变化。

成功与失败标准​


"任务完成"必须是一个可客观判定的状态,而不是"看起来差不多"。合格的成功标准长这样:

不合格标准(含糊)合格标准(可测量)
"大概抓到了就行。""夹爪完全闭合,抓住物体中心。"
"物体放到 B 点附近就行。""物体落在 B 点标记区域内,而不是搭在边缘上。"
"把物体拿起来放下去就算。""整个动作流畅,每条录制的时长大体一致。"

录制中出现失败片段的原则很简单:重录这一条。 不要抱着"模型也许能从失败里学到东西"的心态留下失败数据 —— 模型确实会学,包括学失败。


数据量 vs. 数据质量​


经验参考(干净、一致场景下的单一桌面任务):

数据量预期效果
20–30 条 Episode固定 A 到 B 任务的首个可用策略(入门级)
50 条 Episode流程跑通;模型在数据覆盖区域内开始工作(泛化入门量)
50–100 条 Episode成功率进入可用区间;大多数单任务实验的甜点区
100 条以上收益递减,除非任务复杂或成功率要求很高

多任务场景按复杂度等比增加数据量。当然,训练之后也可以补数据 —— 发现模型表现不佳时再加就行。

但请把这几句放在数字前面:

  • 50 条高质量 Episode 胜过 200 条粗糙的。
  • 采集出问题不要犹豫 —— 立刻重录这一条。
  • 想要强泛化,需要几百上千条 Episode。
tip

实用的分批策略(第 22 章的无代码流程也这么做):每批录 10 条左右;录 2–3 批后,保留 20–30 条有效数据做第一次训练;再根据训练结果为更难的变体补数据。


单任务 vs. 多任务数据集​


  • 单任务数据集:一个数据集只含一个任务(例如"物体从 A 到 B")。模型目标单一,数据需求小,成功率容易做出来。你的第一个模型必须从单任务开始。
  • 多任务数据集:一个数据集含多个任务(抓方块、开抽屉、放方块进抽屉);每条 Episode 以 task_index 标注所属任务。数据利用率高,是通向通用策略的方向,但任务之间会竞争模型容量,每个任务需要更多数据才能学好。

数据迭代​


分批采集、迭代验证:采 50 条 → 训练 → 真机评估 → 针对失败场景补数据 → 重训。如果模型大方向对但精度差,加数据有用;如果模型行为完全错误,那是任务或数据设计的问题,加再多数据也没用。


数据创作示例:从 A 到 B 抓放​


本阶段后续章节使用的示例任务:抓起 A 点的物体,放到 B 点 —— 与第 22 章无代码平台的任务相同,方便你对照两条路径。

场景设计​

  1. 在桌垫上标记两个固定位置:A 点放物体的起始位置,B 点是目的地。准备一个大小合适、易于抓取的物体,例如小方块;
  2. 确保 A 点、B 点、两条臂和物体在两个相机画面里都可见、不被遮挡。固定相机、保持光照不变、让主臂避开相机视野。
A 点与 B 点任务场景

初学者采数据最头疼的问题是"物体怎么摆才能练得全" —— 随机摆放要么聚成一团(模型只认那一块,别的位置全失败),要么散乱无章(有的区域练爆了,有的从未碰过)。这里给出一个简单且规范的做法:

  1. 标点:在采集区域(桌垫)上用铅笔画 5 个点,摆成十字形 —— 中心 1 个,上下左右各 1 个;
  2. 定间距:相邻点间隔 5–10 cm,确保 5 个点都在机械臂工作空间内、且两个相机都看得清;
  3. 分配:每个点采 10 条 Episode;5 点 × 10 = 50 条,正好达标。注意不要在 1 号点连录 10 条再去 2 号点,而是每个点各录 1 条(5 点 = 1 轮),这样录 10 轮。

抓取与放置设计​

  1. 初始位置:机械臂位于归位姿态;物体放在 A 点;
  2. 抓取物体:
    • 移动到物体正上方(每次都以相同高度到达物体中心正上方);
    • 在物体上方固定距离处张开夹爪(为什么固定距离?避免开爪时碰到物体、把物体碰歪);
    • 每次以相同的力度与速度抓取;
  3. 放置物体:
    • 移动到 B 点中心正上方;
    • 匀速张开夹爪并抬臂 —— 应能看到物体平稳落在标记区域内;
    • 机械臂回到归位姿态。

这样,一条完美的 Episode 就完成了。接下来只需重复 50 次。

设计思考题​

为什么不能随意挪桌垫、相机、物体位置或改变光照?

  • 破除误区:"什么都随便动"带来的不是多样性,而是噪声;
  • 泛化预算理论:数据有限时,把变化花在哪个维度,模型就学会哪个维度 —— 花在目标位置上,它学会抓不同位置的物体;花在相机位置变化上,它得同时学会抓取与视角差异,需要多得多数据且效果更差;
  • 真的需要变化怎么办:不是采集时"不固定",而是后续补数据时有意扩展边界 —— 这才是我们要的泛化。
Loading Comments...