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 数据采集与数据集构建 · 实战路线图 从环境准备到数据集导出,形成可训练、可复现的数据闭环 阶段一 · 环境与硬件 安装 LeRobot 识别机械臂与相机 标定与端口配置 遥操作连通性验证 阶段二 · 遥操作采集 主从臂映射 相机同步录制 episode 分段 任务描述标注 阶段三 · 数据处理 回放与质检 异常 episode 剔除 帧率与时间戳对齐 统计与可视化 阶段四 · 数据集导出 LeRobotDataset 元数据与任务表 Hub 上传/本地加载 训练接口对接 数据契约核心字段 observation.images observation.state action timestamp task / episode_index 贯穿全程的质量准则 ① 可复现:固定随机种子、记录硬件配置与标定参数 ② 可追溯:每个 episode 保留任务描述、采集时间与操作者信息 ③ 可扩展:新增任务时只增 episode,不改数据 schema ④ 可训练:导出后可直接被策略训练脚本流式读取

二、学习目标:从“会采”到“会构建数据集”

本课程的学习目标分为四个层次,层层递进:

  1. 认知层:理解 LeRobot 数据集的目录结构、字段语义与 episode 组织方式,能说清 observation、action、task 之间的关系。
  2. 操作层:能独立完成环境安装、设备识别、遥操作映射、相机配置与采集脚本运行,处理常见端口与权限问题。
  3. 质量层:能对采集到的 episode 进行回放检查、异常剔除、帧率对齐与统计可视化,判断数据是否满足训练要求。
  4. 工程层:能把原始采集结果导出为标准化 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 的采集逐步展开,把这张路线图真正跑通。