遥操作与数据采集
Teleoperation & Data Collection
使用 Leader 臂遥操作 Follower 臂,采集训练数据集
未开始
完成后会同步到学习路径和首页统计
准备工作都做完了,终于到最爽也最累的一步:亲手扳动 Leader,让 Follower 跟随,电脑把整个过程录下来。这些录像就是喂给 AI 的"演示数据"。
这一章有一个反直觉但极其重要的观念:数据质量 > 数据数量,而质量的核心是"多样性"。新手最容易犯的错,是把同一个动作在同一个位置一丝不苟地录 50 遍 —— 结果模型只会"背"这一个场景,杯子挪 1 厘米就傻。
我们会讲清楚:怎么先验证遥操作手感、怎么正式录、录多少条、以及怎么"故意制造变化"让模型真正学会泛化。
数据采集是整条流水线里人力投入最大、对结果影响也最大的一步:
- 数据采得好 → 模型泛化强,环境变了也能扛
- 数据采得"太干净太一致" → 过拟合,实测一碰扰动就崩
- 失败演示处理不当 → 要么丢掉宝贵的"纠错信号",要么比例过高污染目标
这一步没有 GPU 也能做,是你能亲手影响最终效果的关键环节。
- 掌握遥操作的基本流程
- 了解数据采集的参数设置
- 完成一个完整的数据采集任务
- 1遥操作通过读取 Leader 关节位置控制 Follower
- 2数据包括关节角度、图像和时间戳
- 3数据质量直接影响模型训练效果
采集时一帧里发生了什么
flowchart LR
Hand["👋 你扳 Leader"] --> Read["读 Leader 关节角 = action a"]
Read --> Follow["Follower 复现"]
Read --> Cam["相机拍一帧 = 环境状态"]
Follow --> Save["写入数据集 (s, a)"]
Cam --> Save
Save -.->|"30 fps 循环"| Hand
style Save fill:#22c55e,stroke:#22c55e,color:#fff先纯遥操作,验证手感
别急着录。先跑 teleoperate(不存数据),确认 Leader → Follower 同步正常、延迟低。你扳 Leader,Follower 应该几乎实时跟动。
试 30 秒,手感对了再 Ctrl+C 退出,进入正式录制。
只遥操作不录
python lerobot/scripts/control_robot.py teleoperate \ --robot-path lerobot/configs/robot/so100.yaml[INFO] Connected to leader_arms/main [INFO] Connected to follower_arms/main [INFO] Teleoperation started. Move the leader arm.
跟随有明显延迟/抖动?把机械臂直接插主板 USB(别走 hub),fps 锁 30。
正式录制数据集
切到 record 模式,加上数据集名字、要录多少条、帧率。--repo-id 是你自己起的名字(不必真的传 HuggingFace);--num-episodes 是总条数;--fps 30 是甜点帧率。
每录一条它会提示你按 Enter 开始下一条,方便你重新摆放物体。
录 50 条演示
python lerobot/scripts/control_robot.py record \ --robot-path lerobot/configs/robot/so100.yaml \ --repo-id your-name/so100-pick-cup \ --num-episodes 50 --fps 30Recording episode 1/50... [INFO] Press Enter when ready, Ctrl+C to abort. Episode 1 saved (132 frames, 4.4 s)
录制必须完整跑完才会写 meta/info.json。中途 Ctrl+C 强退会导致 meta 缺失,第 6 章/训练时报 FileNotFoundError。
刻意制造多样性
这是决定成败的一步。录 50 条时不要每次都一样:
- 物体位置每次挪 ±3-5 cm
- 物体朝向(杯柄朝左/右/前)都录一些
- 起始姿态、动作快慢有变化
- 换不同时段录(光线不同)、桌面放点干扰物
- 偶尔的失败后重试也录进去(教模型从错误中恢复)
目标:50 条里没有任意两条完全一样。
简单 pick-place ≈ 50 条;插 USB 这类 ≈ 100-200 条;折毛巾这类 300+ 条。但多样的 50 条 > 雷同的 200 条。
启动遥操作
python lerobot/scripts/control_robot.py teleoperate --robot-path lerobot/configs/robot/so100.yaml录制数据集
python lerobot/scripts/control_robot.py record --robot-path lerobot/configs/robot/so100.yaml --repo-id your-name/so100-task --num-episodes 50训练后模型只会在某个固定位置工作,物体一挪就失败。
根本原因
采集时物体每次都放同一位置,模型过拟合到那个坐标。
正确认识
重采,刻意让物体位置/朝向/光线变化。泛化来自训练分布的宽度,不是重复次数。
录了 10 条就想开训,结果学不会。
根本原因
数据量严重不足,覆盖的状态空间太窄。
正确认识
简单任务起码 50 条,且要多样。10 条几乎必然过拟合。
某条演示中途失败了(杯子掉了),要不要删?
根本原因
以为失败数据是"脏数据"。
正确认识
保留并标记为失败更好 —— 它提供"这样不行"的负信号。但失败比例别超 ~30%,否则污染学习目标。
- Leader-Follower 同步正常
- 数据文件正确生成
- 图像帧率稳定
估算样本量
你以 30 fps 录了 50 条、每条平均 5 秒的演示。总共多少帧(≈ 多少个 (s, a) 样本)?
设计你的多样性清单
为"把杯子放到盘子里"这个任务,列出 4 个你会在 50 条演示里刻意变化的维度。
- LeRobot 数据采集教程视频
HuggingFace 官方演示遥操作 + 录制的实拍流程。
- DROID 数据集
看大规模、高多样性数据集长什么样,理解"多样性"在工业级是怎么做的。
先 teleoperate 验证手感,再 record 正式录。质量 > 数量,质量 = 多样性:刻意变化物体位置/朝向/光线/速度,让 50 条里没有两条相同。
简单任务 ~50 条;失败演示保留并标记(<30%);录制必须完整跑完才会写 meta。
下一章打开你刚录的数据集,看看它在硬盘上长什么样。
本章讨论区
登录后即可参与讨论 —— 点击右上角的 登录 按钮
加载中…