1. 课程导入
在具身智能与机器人学习快速发展的今天,如何让机器人从真实世界中高效获取数据、并把数据转化为可训练、可复现、可迁移的数据集,已经成为从算法研究走向工程落地的关键环节。LeRobot 是 Hugging Face 生态中面向真实机器人学习的开源项目,它把机器人硬件接口、遥操作采集、数据格式、策略训练与部署评估串联成一条相对完整的工具链。本课程聚焦其中的数据采集与数据集构建,帮助学习者掌握从“让机器人动起来”到“让数据可训练”的全过程。
本节核心问题:为什么数据采集与数据集构建是机器人学习的第一道门槛?LeRobot 在其中提供了哪些标准化能力?学完本课程后,你将能独立完成一条从设备接入、遥操作采集、数据清洗到数据集导出的完整链路。
一、LeRobot 项目背景:从碎片化脚本到标准化数据管线
传统机器人学习项目常面临几个现实问题:不同机械臂与相机厂商接口各异,采集脚本往往一次性使用;数据以零散视频、CSV 或 ROS bag 形式散落,缺少统一的时间戳、动作维度与任务语义;训练框架与数据格式强耦合,换一个策略就要重写数据加载逻辑。LeRobot 试图用统一的 Python 接口和数据集规范解决这些问题。
LeRobot 的核心价值可以概括为三点:第一,提供面向真实机器人的统一硬件抽象,支持 SO-100、SO-101、Koch、ALOHA 等常见低成本平台;第二,定义以 episode 为单位的机器人数据集结构,把观测图像、关节状态、动作指令、任务描述和时间戳组织成可流式加载的格式;第三,打通从采集、回放到策略训练与评估的闭环,使数据可以被 ACT、Diffusion Policy、VQ-BeT 等策略直接消费。
因此,学习 LeRobot 的数据采集,不只是学习几个命令,而是理解一套“数据契约”:采集端如何记录,存储端如何组织,训练端如何读取。只有契约清晰,数据才具备复用价值。
二、学习目标:从“会采”到“会构建数据集”
本课程的学习目标分为四个层次,层层递进:
- 认知层:理解 LeRobot 数据集的目录结构、字段语义与 episode 组织方式,能说清 observation、action、task 之间的关系。
- 操作层:能独立完成环境安装、设备识别、遥操作映射、相机配置与采集脚本运行,处理常见端口与权限问题。
- 质量层:能对采集到的 episode 进行回放检查、异常剔除、帧率对齐与统计可视化,判断数据是否满足训练要求。
- 工程层:能把原始采集结果导出为标准化 LeRobotDataset,并完成本地加载或 Hub 上传,为后续策略训练做好准备。
学习建议:每学完一个模块,都在自己的设备上跑通一次最小闭环。哪怕只采 5 条 episode,也比只看文档更能暴露真实问题,例如相机掉帧、主从臂延迟、时间戳漂移等。
三、整体课程框架与实战路线
课程围绕“采集—处理—导出—验证”主线展开,共 30 章,可划分为五个板块:
| 板块 | 主要内容 | 关键产出 |
|---|---|---|
| 基础与准备 | LeRobot 背景、环境安装、硬件接入、标定 | 可运行的采集环境 |
| 遥操作采集 | 主从臂映射、相机同步、episode 录制、任务标注 | 原始 episode 数据 |
| 数据处理 | 回放质检、异常剔除、时间戳对齐、统计可视化 | 干净可用的数据 |
| 数据集构建 | LeRobotDataset 导出、元数据生成、Hub 上传 | 标准化数据集 |
| 验证与复盘 | 加载测试、训练接口对接、常见故障排查 | 可训练的数据闭环 |
实战路线可以概括为一条命令链:先安装并验证环境,再通过遥操作采集 episode,随后回放检查并清洗数据,最后导出为 LeRobotDataset 并加载验证。下面是一个典型的最小操作序列示意:
# 1. 安装 LeRobot
pip install lerobot
# 2. 查看可用设备与端口
lerobot-find-port
# 3. 遥操作采集 episode
lerobot-record \
--robot.type=so101_follower \
--teleop.type=so101_leader \
--dataset.repo_id=my_user/pick_cube \
--dataset.num_episodes=10
# 4. 回放检查
lerobot-replay --dataset.repo_id=my_user/pick_cube --episode=0
# 5. 加载数据集验证
python -c "from lerobot.datasets import LeRobotDataset; ds = LeRobotDataset('my_user/pick_cube'); print(len(ds))"
四、案例场景:一条 episode 的完整生命周期
假设你要教机械臂完成“抓取红色方块并放入盒子”的任务。采集时,操作者通过主臂遥操作从臂,相机同步记录腕部视角与外部视角,系统按固定频率记录关节状态与动作指令。一条 episode 从按下开始到复位结束,包含数百帧观测与动作对,并附带任务描述“pick red cube and place into box”。
采集完成后,你回放这条 episode,发现第 3 秒相机出现黑帧,第 7 秒动作出现跳变。此时不应直接导出,而应标记异常、剔除或重采。清洗后的 episode 才进入数据集,与其余 episode 一起构成任务集合。最终导出的数据集可以被策略训练脚本直接读取,形成“采集—训练—评估—再采集”的迭代闭环。
常见误区:很多初学者只关注“采了多少条”,却忽略 episode 的一致性与任务描述的规范性。任务描述不统一、帧率不稳定、时间戳不对齐,都会让后续训练效果大打折扣。数据质量永远优先于数据数量。
五、复盘与检查清单
在进入后续章节前,请用下面的清单快速自检:
- 是否理解 LeRobotDataset 以 episode 为基本单位,且每条 episode 包含观测、动作、时间戳与任务描述?
- 是否明确采集端、存储端、训练端之间的数据契约?
- 是否准备好可用的机械臂、相机与遥操作设备?
- 是否知道如何验证端口、标定参数与相机同步?
- 是否理解“先质检、后导出”的原则,而不是采完直接上传?
当你能清晰回答这些问题,就已经具备了进入实操章节的基础。接下来的学习,将围绕环境搭建、设备接入与第一条 episode 的采集逐步展开,把这张路线图真正跑通。