

LeRobot 论文精读:把机器人学习做成端到端开源基础设施
精读 LeRobot:统一机器人中间件、LeRobotDataset、可异步推理栈与可复用策略实现,分析其如何降低真实机器人学习的工程门槛。
LeRobot 将机器人硬件、中间件、数据集、策略训练与部署统一到一个开源 PyTorch 栈,并用标准化数据格式和异步 action-chunk 推理把真实机器人学习变成可复现的工程流程。
1. 论文概述#
【Paper】《LeRobot: An Open-Source Library for End-to-End Robot Learning》发表于 ICLR 2026。论文的对象不是某一个新的 VLA 或控制器,而是一套覆盖“电机通信 → 遥操作采集 → 数据存储/流式读取 → 策略训练 → 推理执行”的开源基础设施。
作者:Remi Cadene、Simon Aliberts、Francesco Capuano、Michel Aractingi、Adil Zouitine、Pepijn Kooijmans、Jade Choghari、Martino Russi、Caroline Pascal、Steven Palma、Mustafa Shukor、Jess Moss、Alexander Soare、Dana Aubakirova、Quentin Lhoest、Quentin Gallouédec、Thomas Wolf(Hugging Face 及合作机构)
【Paper】核心贡献:
- 用 Python-native、可组合的 middleware 统一低成本机械臂、移动操作平台和 humanoid 的控制接口。
- 提出可存储多路相机、状态、动作、任务文本和元数据的
LeRobotDataset,并支持远程 streaming。 - 提供覆盖 imitation learning、reinforcement learning 与 VLA 的 PyTorch 策略实现,以及可在远程机器运行的 asynchronous inference。
- 通过 Hugging Face Hub 的公开数据和模型生态,形成“采集—训练—分享—复用”的闭环。

一句话总结#
【Analysis】 LeRobot 的真正创新点是把机器人学习中经常被各实验室重复实现的“胶水代码”提升为公共抽象:研究者可以替换 robot、dataset 或 policy,而不必重写整条 pipeline。
2. 背景与相关工作#
【Paper】 经典机器人系统依赖显式模型(kinematics、contact model、planner 与 controller)的模块化流水线;它在结构化工厂环境中可靠,却难以覆盖家庭等非结构化场景。Robot learning 通过隐式模型直接学习 observation-to-action 映射,性能随数据和算力扩展,但引入了新的基础设施问题:不同机器人有不同 SDK,不同数据集使用 ROS bag、TFDS 或私有 JSON,策略实现和评测脚本也彼此割裂。
【Paper】 低成本 teleoperation 硬件让分布式采集成为可能。SO-10X、ALOHA 等平台的成本远低于工业机械臂,社区可以贡献大量 demonstration;问题转而变成如何让这些异构数据可发现、可组合、可流式读取。
【Analysis】 因此 LeRobot 不是要取代 ACT、Diffusion Policy 或 Pi0,而是为它们提供共同的 data contract、robot contract 和 runtime contract。

3. 问题定义#
【Paper】 给定一个真实机器人及其传感器,系统需要支持以下闭环:
| 环节 | 输入 | 输出 |
|---|---|---|
| Control / middleware | 机器人配置、低层 SDK | 统一的 observation 与 action 接口 |
| Teleoperation | leader 状态、follower 状态、相机 | 专家轨迹 episode |
| Dataset | 多模态时间序列 | 可检索、可分享、可 streaming 的 LeRobotDataset |
| Policy training | episode、任务文本、策略配置 | checkpoint 与 normalization stats |
| Inference | 实时 observation、策略 checkpoint | action chunk 及逐步执行的 action |
机器人状态和动作的维度由 embodiment 决定;论文不假设统一的 action space。【Code】 当前仓库通过 Robot/RobotConfig 注册不同硬件,并由 policy 的 PolicyFeature 声明输入输出形状;因此扩展机器人主要是实现接口和特征映射,而不是修改训练器核心。
4. 方法#
4.1 Overall Architecture#
【Paper】 LeRobot 的垂直集成由五层组成:硬件 middleware、数据采集与 LeRobotDataset、策略模型、训练/评测脚本、推理 runtime。数据流可以概括为:Robot/Teleoperator → processed observation-action → LeRobotDataset → Policy → action chunk → Robot。
【Code】 当前仓库将这些层分别组织在 src/lerobot/robots、src/lerobot/teleoperators、src/lerobot/datasets、src/lerobot/policies、src/lerobot/scripts 与 src/lerobot/async_inference 中。
4.2 核心模块#
统一 Robot middleware#
- 输入:硬件配置、串口/网络地址、相机配置。
- 输出:标准化 observation;接收标准化 action 并发送给 follower。
- 作用:屏蔽 FeeTech、Dynamixel 等执行器 SDK 的差异。
- 【Code】
Robot抽象提供connect、get_observation、send_action、disconnect等生命周期;RobotConfig通过 choice registry 注册具体平台。leader/follower 组合可直接用于 teleoperation。
论文列举 SO-100/101、Koch-v1.1、ALOHA-2、Hope-JR、Stretch-3、LeKiwi 和 Reachy-2;【Code】 截至当前 main 分支,README 还列出 OMX、EarthRover、OpenArm、Unitree G1、reBot B601 等,说明代码覆盖已超过论文统计快照。
LeRobotDataset#
- 输入:同步的 state/action、RGB/depth 相机帧、任务文本、FPS 和 embodiment 元数据。
- 输出:PyTorch
Dataset或IterableDataset样本。 - 存储:
data/**/*.parquet保存表格状态,videos/**/*.mp4保存视频,meta/info.json、stats.json、tasks.parquet保存 schema、归一化统计与任务索引。 - 为什么需要:把“不同机器人、不同相机、不同采样率”的数据变成可组合的统一 contract。
【Code】 LeRobotDataset 从本地目录或 Hugging Face Hub 加载数据;StreamingLeRobotDataset 使用 IterableDataset、有限长度 backtrack buffer 和 torchcodec 按需解码远程视频,内存占用不再随 episode 总数线性增长。
策略与可复用 recipe#
【Paper】 论文覆盖 ACT、Diffusion Policy、VQ-BET、HIL-SERL、TD-MPC、Pi0 与 SmolVLA 等范式,策略均以 PyTorch 实现,可从示教数据训练,也可直接加载 Hub 上的 checkpoint。
【Code】 PreTrainedPolicy 约定 forward、predict_action_chunk 和 select_action。ACT、Diffusion、VQ-BeT、Pi0、SmolVLA 等策略用相同的 action-chunk 消费接口,训练器不需要知道每个模型的内部网络。

Asynchronous inference#
- 物理解耦:policy server 可以运行在有 GPU 的远程机器,robot client 只运行低层控制。
- 逻辑解耦:producer 预测未来 action chunk,consumer 以固定控制频率消费队列。
- 重叠 chunk:对相同 timestep 的动作调用可插拔聚合函数
f;默认实现取最新动作,也可使用 weighted average。 - 【Code】
policy_server.py负责 observation 到 chunk 的推理,robot_client.py的_aggregate_action_queues合并时间戳重叠的 chunk,并通过 gRPC 传输。

4.3 关键公式#
数据样本与时间对齐#
【Paper】 每一帧可以表示为
其中 state、多路图像和 action 共享时间戳,task 是可用于 language-conditioned policy 的文本元数据。对 action-chunk policy,模型输出
H 是 look-ahead horizon,控制器再以固定频率执行其中的单步动作。
重叠 action 的聚合#
【Paper】 对同一未来时刻收到的多个预测,系统计算
f 可以是 latest、均值或任务定制的鲁棒聚合器。【Analysis】 该抽象把“策略多久查询一次”和“机器人多久执行一次”解耦,是 LeRobot 面向慢速 VLA 的关键 runtime 设计。
Streaming 的内存边界#
【Code】 StreamingLeRobotDataset 只保留元数据、有限 backtrack/look-ahead 缓冲和当前视频解码帧;若缓冲上限为 B,运行时缓存近似为 O(B),而不是完整数据集的 O(N)。论文未给出统一的 B 数值,因为它取决于 delta timestamp 和采样配置。
4.4 Training#
【Paper】 训练器以 dataset、policy config 和 optimizer config 为输入,统一完成 batch 读取、预处理、loss 聚合、checkpoint 与评测。论文强调 recipe 可组合,而非规定单一损失:ACT 使用 L1+KL,Diffusion Policy 使用扩散目标,RL 策略使用各自的 critic/actor 目标。
【Code】 lerobot_train.py 创建 policy、dataloader 和 optimizer;dataset 的 stats.json 用于 normalization,验证指标和 checkpoint 由统一 trainer 管理。当前仓库支持多 GPU/FSDP 配置,并在训练阶段区分 forward(返回 loss)和推理阶段的 select_action。
LeRobotDataset、policy 配置、optimizer 配置、训练步数- Given 从 Hub 或本地加载 dataset schema、任务文本和 normalization stats
- 根据 policy type 构造对应
PreTrainedPolicy与 processor pipeline - for 每个训练 step
- 读取多模态 batch,执行图像、语言、state 和 action 的预处理
- 调用
policy.forward,得到总 loss 与分项指标 - 反向传播、更新 optimizer,并周期性运行 validation/eval
- end for
- return 保存验证指标最佳或指定 step 的 checkpoint
4.5 Inference#
【Paper】 在线阶段,robot client 以控制频率读取 observation;policy server 预测长度为 H 的 action chunk,并把带 timestep 的 chunk 送回 client。client 将 chunk 放入队列,聚合重叠预测后逐步发送给 follower。
【Code】 本地策略也遵循同一约定:predict_action_chunk 产生 [batch, horizon, action_dim],select_action 负责 action queue;ACT 在开启 temporal ensemble 时在线维护加权平均,Pi0/SmolVLA 等策略则按配置缓存 chunk。
f_c、chunk horizon Hf_c 执行的连续 robot actions- while 机器人 episode 未结束
- client 发送当前 observation 和 timestep
- server 调用
predict_action_chunk,返回带时间戳的H步动作 - client 将新 chunk 与队列中相同 timestep 的动作交给
f聚合 - 以固定控制频率弹出队首动作并调用
robot.send_action - end while
4.6 代码实现对照#
| 论文描述 | 官方代码位置 | 对照结论 |
|---|---|---|
| 统一 middleware | src/lerobot/robots/robot.py、各平台目录 | Robot 生命周期接口与注册机制落地,硬件细节被隔离。 |
| 多模态数据格式 | datasets/lerobot_dataset.py、dataset_metadata.py | Parquet/MP4/JSON 元数据结构与论文一致。 |
| Streaming | datasets/streaming_dataset.py | 通过 IterableDataset 和 backtrack buffer 实现按需读取。 |
| 可复用 policy | policies/pretrained.py、各 policy 子目录 | forward/predict_action_chunk/select_action 形成统一策略 API。 |
| 异步推理 | async_inference/policy_server.py、robot_client.py | gRPC producer-consumer 与可插拔 chunk 聚合已实现。 |
【Analysis】 论文统计的是 2025 年 9 月的生态状态,而当前 main 分支(代码提交时间 2026-08-25)已经新增更多 robot、policy 和仿真环境。因此代码适合说明架构演进,不应把 README 的最新清单当作论文实验结果。
5. 实验#
5.1 Experimental Setup#
【Paper】 论文以真实机器人和社区 Hub 数据作为主要证据,统计 dataset、episode、下载量、模型上传/下载趋势,并在 MacBook M1、RTX 4090、A100 等平台测量策略显存和推理延迟。仿真侧提供 LIBERO 与 Meta-World 的统一评测接口;仿真主要用于系统化 benchmark,真实数据仍是核心训练来源。
5.2 Main Results#
【Paper】 截至 2025 年 9 月,LeRobotDataset 已有 16K+ 个公开数据集、2.2K+ 位贡献者。数据不仅来自原生支持的平台,Franka Panda、xArm、R1Pro 等机器人也被社区转换到统一格式,说明 schema 的价值超出硬件支持范围。

【Paper】 在策略生态中,轻量的单任务 ACT 因体积小、推理快、约 50 条轨迹即可起效而拥有最高上传/使用热度;SmolVLA 则通过语言条件获得更广的任务适用性。ACT 在 RTX 4090/A100 上约可达到 100–200 Hz,而较大的 π_0 在低端设备上可能超过 5 秒超时。

5.3 Ablation Study#
【Paper】 这篇工作没有针对单一模型的结构 ablation;主要对比的是系统设计的可扩展性:预加载 dataset 与 streaming dataset 的读取耗时、同步推理与异步 action-chunk 推理的 cycle time,以及不同 policy 的显存/延迟。
【Paper】 streaming 在初始化后保持接近预加载格式的 steady-state 读取性能,同时把视频按需解码;异步推理的加速来自“计算下一段 chunk 与执行当前 chunk 重叠”,而非简单提高控制线程频率。
5.4 Generalization#
【Paper】 generalization 体现在三个维度:
- Embodiment:同一 middleware 把低成本 arm、mobile manipulator 与 humanoid 接入共同 API。
- Data:schema 可以承载原生支持和社区转换的机器人配置,允许跨数据集混合。
- Policy/runtime:从单任务 ACT 到多任务 VLA,从本地 CPU/GPU 到远程 server,调用方只依赖统一的 action 接口。
【Analysis】 这种 generalization 更像“接口层的可迁移性”,不是论文宣称某个策略在未见机器人上零样本成功;具体控制质量仍由 embodiment、数据和 policy 决定。
6. 方法分析#
6.1 为什么有效?#
【Analysis】 机器人学习的瓶颈往往不是单个模型的表达能力,而是数据无法复用、控制循环被推理延迟阻塞、硬件接入成本过高。LeRobot 同时消除三类摩擦:统一 schema 让数据规模化,异步 runtime 让慢模型可部署,middleware 让同一训练代码跨机器人复用。三者叠加后,更多数据和更多算力才真正能转化为可重复实验。
6.2 核心创新#
- 垂直整合而非单点算法:把硬件、数据、policy 和部署放在同一个可组合抽象内。
- Streaming-first 数据设计:面向百万 episode 规模,避免“先下载完整数据集”成为实验门槛。
- Runtime decoupling:把 action prediction 与 control execution 在物理和逻辑上都解耦。
- 开放生态作为系统组件:Hub 上的数据集、checkpoint 和 dataset card 不是附属物,而是可复现训练闭环的一部分。
6.3 与已有方法的本质区别#
【Analysis】 与 ACT、Diffusion Policy 等“提出一个策略”不同,LeRobot 的评价对象是研究工作流:它不规定模型如何产生动作,而是规定模型如何被加载、训练、切换和执行。与 ROS 这类通用机器人 middleware 相比,LeRobot 更靠近 PyTorch training loop、dataset hosting 和 foundation-model inference,目标是减少 ML/robotics 之间的边界代码。
6.4 关键假设#
- 【Paper】 社区愿意采用统一的
LeRobotDataset并上传公开数据。 - 【Paper】 低成本硬件的可获得性足以支持分布式 teleoperation 采集。
- 【Analysis】 网络、时间同步和 action 聚合的质量足以让远程 inference 不破坏闭环稳定性。
- 【Analysis】 统一 API 能覆盖不同 embodiment 的关键差异;对于触觉、力控或高频实时控制,这一假设仍需额外验证。
7. 局限性#
7.1 作者明确提出的局限#
【Paper】 (1) 支持的机器人、gripper、sensor 和 controller 仍不完整;(2) robot learning algorithm 覆盖不全面;(3) 实际 inference 性能还缺少 quantization、graph compilation 等低层优化。作者把这些缺口视为适合社区贡献的路线图。
7.2 自己分析得到的局限#
【Analysis】 首先,统一 schema 解决了“能否读取”,但不自动解决跨机器人 action semantics、坐标系和安全约束;混合数据前仍需 embodiment-aware processor。其次,streaming 把存储压力转成网络带宽和随机访问延迟,断网或高抖动环境下需要缓存策略。最后,异步 chunk 聚合可能平滑掉突发修正,安全关键任务仍需要 watchdog、限幅和低层 fallback。论文也没有给出在同一数据/硬件预算下各 policy 的严格端到端成功率对照。
8. 启发与研究思考#
【Analysis】 LeRobot 提示一个容易被忽略的研究方向:机器人学习的“scaling law”不仅属于模型和数据,也属于基础设施。只有数据格式、采集工具、训练 recipe 和部署 runtime 同时标准化,新增数据和算力才会产生可累积的收益。
对实践者而言,较稳妥的路线是先用 SO-10X 等低成本平台采集少量高质量 episode,借助 LeRobotDataset 做可视化和统计,再从 ACT 等轻量策略开始;当任务需要语言条件或跨任务迁移时,再切换到 SmolVLA/Pi0,并用 asynchronous inference 把大模型放到远程 GPU。【Analysis】 这不是“一个库解决所有机器人问题”,而是把最常见的工程分歧收敛成可替换的接口,让研究时间更多花在数据、目标和控制策略本身。