前言

最近开始系统学习机器人学习,一个让我越来越感兴趣的项目是 LeRobot。

以前学习机器人,接触更多的是如何让机器人按照我们的要求准确地运动?但 AI 的发展让我开始思考另外一个问题:

机器人能不能自己学习怎么完成任务?

比如我们想让一个机械臂完成“把桌上的杯子拿起来。”,传统机器人方法可能需要我们设计:

目标检测
    ↓
目标位置
    ↓
运动规划
    ↓
逆运动学
    ↓
轨迹规划
    ↓
控制器
    ↓
电机

而 Robot Learning 尝试走另一条路:

人类示范
    ↓
采集数据
    ↓
训练模型
    ↓
Policy
    ↓
机器人自己执行

这就是我开始学习 LeRobot 的原因。我希望通过 LeRobot 真正理解一件事情:

机器人究竟是如何从数据中学会行动的?

这篇文章会作为我的 LeRobot 学习总览,后面我会不断加入代码、实验、截图、数据分析和踩坑记录。


LeRobot 是什么?

LeRobot 是 Hugging Face 开源的机器人学习框架。

(Hugging Face LeRobot 官方文档)

我认为 LeRobot 值得学习,不只是因为它是一个开源项目。更重要的是,它把传统机器人和 AI 连接起来了。

从“告诉机器人怎么做”,逐渐走向“让机器人从数据中学习怎么做”。

当然,这并不意味着传统机器人技术会消失,恰恰相反。未来真正成熟的机器人,很可能是:

大模型
 ↓
任务理解
 ↓
Task Planner
 ↓
Robot Skill
 ↓
Policy
 ↓
Motion Planner
 ↓
Controller
 ↓
Actuator

AI 负责理解、决策和学习。

传统机器人控制负责:实时、稳定、安全地把动作执行出来。

LeRobot 的完整学习闭环

                人类
                 ↓
             Teleoperate
                 ↓
              Robot
                 ↓
              Record
                 ↓
             Dataset
                 ↓
              Train
                 ↓
              Policy
                 ↓
             Deploy
                 ↓
              Robot
                 ↓
              Feedback
                 ↺

这也是整篇文章最重要的一张图。

后面所有知识,基本都可以放进这条链路里面。


第一步:环境搭建

真正开始学习之前,首先需要准备开发环境。

主要涉及:

  • Ubuntu
  • Python
  • Git
  • CUDA
  • PyTorch
  • LeRobot

如果使用真实机器人,还需要:

  • USB / Serial
  • Camera
  • Motor
  • Robot Driver
  • 相应硬件依赖

LeRobot 官方提供安装文档,可以按照当前版本文档进行安装。这里安装大部分都使用AI模型来进行安装了,所以很方便,具体安装步骤参考官方文档即可。

我的思考

这里大家也可以手动安装,过一遍流程,因为机器人项目经常会遇到:

Python 环境问题
CUDA 问题
驱动问题
USB 问题
相机问题
机器人通信问题

如果没有先跑通最小系统,后面很容易不知道问题到底出在哪里。

第二步:认识 LeRobot 中的 Robot

LeRobot 对机器人进行了比较统一的抽象。

简单来说:

Robot
├── connect()
├── read()
├── send_action()
└── disconnect()

不同机器人底层硬件不同:

SO-101
Koch
Aloha
Humanoid
其他机器人

但上层尽可能使用统一接口,这种设计非常重要。

因为如果每一种机器人都需要重新写:

数据采集
训练
推理
部署

整个机器人学习生态很难发展。

而统一接口以后:

              Policy
                 ↓
          Robot Interface
          ↙      ↓      ↘
       Robot A Robot B Robot C

就可以提高代码和模型的复用性。

第三步:Teleoperate——让人操作机器人

Teleoperate 人先教机器人。

例如:

Leader Arm
    ↓
人的动作
    ↓
LeRobot
    ↓
Follower Arm

人移动 Leader Arm,Follower Arm 跟着移动。

这一阶段的目的不是让机器人自己完成任务,是产生高质量的示范数据。

所以 Teleoperation 实际上是整个 Robot Learning 数据链路的起点。

第四步:Record——记录机器人数据

机器人开始跟随人运动以后,我们需要把过程记录下来。

例如:

Camera
Robot State
Action
Timestamp
Task

最终形成:Episode

一个 Episode 可以理解成:

机器人完整执行一次任务的过程。

例如:

Episode 1
抓取杯子 → 成功

Episode 2
抓取杯子 → 成功

Episode 3
抓取杯子 → 失败

大量 Episode 最终形成 Dataset。

第五步:理解 LeRobot Dataset

Dataset 是 LeRobot 非常重要的一部分。

可以把一个数据集简单理解成:

Dataset
│
├── Episode 1
│   ├── Observation
│   ├── Action
│   └── Timestamp
│
├── Episode 2
│   ├── Observation
│   ├── Action
│   └── Timestamp
│
└── Episode N

每一帧可能包含:

Camera Image
+
Robot State
+
Action

所以机器人数据和普通图像数据有一个明显区别:

普通图像:

Image → Label

机器人学习:

Observation → Action

而且这个过程还是连续的。

为什么机器人数据这么重要?

这是我学习 LeRobot 后非常深的一个感受:

机器人学习可能首先是一个数据问题,而不是模型问题。

我们很容易把注意力放到:

  • Transformer
  • Diffusion
  • VLA
  • 参数量
  • GPU

但是如果 Dataset 本身不好,模型再强也很难解决问题。

例如:

  • 摄像头位置不稳定
  • 光照变化太大
  • 示范动作质量差
  • 数据量不足
  • 成功数据太少
  • 任务定义不清晰
  • Robot State 不准确

最终都会影响训练结果。

所以我认为:

高质量 Robot Data 是机器人学习最重要的基础设施之一。

这也是为什么我觉得 LeRobot 值得研究。

它不只是训练模型,而是在尝试把:

机器人数据采集 → 数据集 → 模型 → 部署

整个链路连接起来。

第六步:Dataset Visualization

数据采集完成以后,我认为不要马上训练。

应该先:

看看自己采集的数据到底是什么。

通过 Dataset Visualization,我们可以观察:

Camera
Robot State
Action
Episode

这一步特别重要。

因为很多问题训练以后才发现,其实数据一开始就有问题。

例如:

画面模糊
↓
训练失败

真正的问题可能不是模型。

而是:

Dataset
↓
Camera
↓
数据质量不好

所以:

先看数据,再训练模型。

这是我以后做机器人学习实验时会坚持的习惯。


第七步:Policy

数据准备好以后,就进入:

Policy Training

Policy 的核心任务就是:

Observation
      ↓
   Policy
      ↓
   Action

例如:

Camera:
看到杯子

Robot State:
机械臂当前位置

       ↓

     Policy

       ↓

Action:
向杯子方向移动

然后机器人执行。

再获取新的 Observation。

于是:

Observation
 ↓
Policy
 ↓
Action
 ↓
Robot
 ↓
Observation
 ↓
Policy
 ↓
Action
 ↓
...

形成闭环。


从 ACT 开始

对于第一次学习 Robot Learning,我比较推荐从 ACT 开始理解。

ACT:

Action Chunking with Transformers

它是一种用于机器人模仿学习的 Policy。

相比一开始就研究非常复杂的 VLA,我觉得 ACT 更适合作为入门。

因为我们可以先理解:

Dataset
   ↓
ACT
   ↓
Action
   ↓
Robot

跑通以后,再研究:

为什么 ACT 要预测 Action Chunk?

为什么不是一次只预测一个动作?

Transformer 在这里解决了什么问题?

这时候理论和实践就能真正结合起来。


第八步:训练第一个 Policy

准备好 Dataset 后,就可以开始训练。

一个典型流程是:

Dataset
   ↓
DataLoader
   ↓
Policy
   ↓
Loss
   ↓
Optimizer
   ↓
Checkpoint

例如使用:

python lerobot/scripts/train.py \
    --dataset.repo_id=YOUR_DATASET \
    --policy.type=act \
    --output_dir=outputs/train/act \
    --policy.device=cuda

具体参数需要根据当前 LeRobot 版本和官方教程调整。

训练结束以后得到:

Checkpoint

也就是训练好的 Policy。


训练不是结束,而是开始

模型训练完成以后,千万不要马上认为:

“机器人已经学会了。”

真正应该问的是:

它能不能完成任务?

所以接下来必须进行:

Evaluation

例如:

测试 10 次

成功:7 次
失败:3 次

Success Rate = 70%

这才是真正有意义的结果。

因为:

Loss 下降 ≠ 机器人一定能够完成任务。


第九步:Inference / Rollout

训练完成以后,就可以进入推理。

整个过程:

Camera
   ↓
Observation
   ↓
Trained Policy
   ↓
Action
   ↓
Robot

如果机器人成功完成:

抓取 → 移动 → 放置

那么说明:

从数据采集到模型部署的整个闭环跑通了。

如果失败:

不要第一时间认为:

“模型不行。”

而应该检查:

Dataset?
Camera?
Robot Calibration?
Action?
Policy?
Environment?

然后重新实验。


机器人学习和传统机器人控制的关系

这是我学习 LeRobot 时比较重要的一个思考。

Robot Learning 并不是:

AI 取代机器人控制。

现实机器人依然需要:

  • 电机
  • 编码器
  • PID
  • 控制器
  • 运动学
  • 轨迹规划
  • 通信
  • 实时系统
  • 安全机制

Policy 输出的动作最终仍然需要经过机器人控制系统执行。

所以我更倾向于把未来机器人理解成:

大模型
 ↓
理解任务
 ↓
Task Planner
 ↓
Robot Skill
 ↓
Policy
 ↓
Motion Planner
 ↓
Controller
 ↓
Motor

不同层解决不同问题。

这也和我之前对机器人系统架构的理解比较一致:

AI 不应该直接控制电机。

AI 更适合负责:

理解、规划、决策、学习。

控制系统负责:

实时执行、安全和稳定性。


从模仿学习走向 VLA

当我们理解:

Observation
 ↓
Policy
 ↓
Action

以后,就可以进一步理解 VLA。

VLA:

Vision-Language-Action

也就是:

Vision
+
Language
+
Action

例如:

“把桌上的红色杯子放进盒子里。”

机器人不仅需要看到:

杯子
盒子
桌子

还需要理解:

红色
+
放进去
+
目标对象

然后生成动作。

于是:

Image
+
Language
+
Robot State
       ↓
      VLA
       ↓
     Action

这比单纯的模仿学习更加接近通用机器人智能。


LeRobot 与 VLA

LeRobot 当前已经不仅仅是传统模仿学习。

官方文档中已经包含不同类型的 Policy,例如:

  • ACT
  • Diffusion Policy
  • SmolVLA
  • π₀
  • π₀.₅

所以可以把学习路线理解成:

Imitation Learning
        ↓
      ACT
        ↓
 Diffusion Policy
        ↓
       VLA
        ↓
更通用的机器人智能

当然,这并不是说一定要严格按照这个顺序。

但对于初学者来说:

先理解最简单的闭环,再逐渐增加模型复杂度。

通常会更容易。


没有机器人怎么办?

如果暂时没有真实机器人,也不意味着不能学习。

可以从:

已有 Dataset

开始。

先:

Dataset
 ↓
Training
 ↓
Policy

然后再进入:

Simulation

最后:

Simulation
 ↓
Real Robot

这也是机器人学习中非常重要的一条路线:

Sim2Real

即:

Simulation to Reality

在仿真环境中训练或验证,再尝试迁移到真实机器人。


为什么仿真很重要?

真实机器人实验成本很高。

一次失败可能意味着:

  • 时间成本
  • 硬件损耗
  • 电机损耗
  • 安全风险

而仿真可以快速:

训练
 ↓
失败
 ↓
重新开始
 ↓
训练
 ↓
失败
 ↓
继续

所以未来机器人学习很可能形成:

Simulation
+
Real Data
+
Real Robot

三者结合。


我目前理解的 LeRobot 学习路线

如果让我重新从零开始,我会按照下面的顺序:

                LeRobot
                   │
        ┌──────────┴──────────┐
        ↓                     ↓
    基础知识                机器人
        │                     │
 Python / PyTorch        ROS2 / 控制
        │                     │
        └──────────┬──────────┘
                   ↓
              LeRobot API
                   ↓
              Teleoperate
                   ↓
                Record
                   ↓
               Dataset
                   ↓
              Visualization
                   ↓
                Policy
                   ↓
              ACT / Diffusion
                   ↓
                Training
                   ↓
              Evaluation
                   ↓
              Deployment
                   ↓
             Simulation
                   ↓
                 VLA

我不建议一开始做什么?

如果刚开始学习 LeRobot,我反而不建议:

1. 一开始研究所有源码

LeRobot 的代码量并不少。

如果从第一行代码开始读,很容易陷进去。


2. 一开始追最新模型

不要刚开始就研究:

最新 VLA 是什么?

先搞懂:

Observation
 ↓
Policy
 ↓
Action

3. 一开始追求大数据

先用一个很简单的任务。

例如:

抓取一个物体。

先把整个闭环跑通。


4. 只训练模型,不看数据

这是我认为最容易犯的错误。

一定要:

Record
 ↓
Visualize
 ↓
Check Dataset
 ↓
Train

我真正想通过 LeRobot 学到什么?

其实我不只是想学会一个框架。

我更想理解:

机器人智能到底是怎么形成的?

以前我们写程序:

if A:
    do B

机器人按照我们写好的规则行动。

现在:

Data
 ↓
Learning
 ↓
Policy
 ↓
Action

机器人开始从数据中学习。

未来可能进一步变成:

Observe
 ↓
Think
 ↓
Act
 ↓
Feedback
 ↓
Learn
 ↓
Act Better

如果机器人可以持续获得真实世界的数据,并不断提高自己的能力,那么机器人软件可能会从:

固定程序

逐渐变成:

持续学习的系统。


我目前最大的思考:Robot Data 可能比模型更加重要

这是我现在学习 LeRobot 后最想记录下来的一点。

我们经常讨论:

GPT 有多强?

VLA 有多大?

Transformer 参数是多少?

但机器人最终需要解决的是:

真实世界。

真实世界的数据非常难获得。

一个机器人完成一次任务,需要同时记录:

视觉
+
机器人状态
+
动作
+
环境
+
时间
+
任务结果

所以未来机器人领域很可能存在一个巨大的数据竞争:

谁拥有更多、更高质量、更标准化的机器人数据?

如果未来:

Robot A
 ↓
产生数据
 ↓
Dataset
 ↓
训练
 ↓
Robot B
 ↓
产生更多数据
 ↓
Dataset
 ↓
继续训练

那么机器人可能会形成一个类似互联网 AI 的数据飞轮。

这也是我认为 LeRobot 这类项目真正值得关注的原因。


LeRobot 对我的意义

如果只是把 LeRobot 当成一个工具:

它就是一个机器人学习框架。

但如果把它放到整个机器人发展过程中:

传统机器人
      ↓
规则
      ↓
控制
      ↓
机器人执行

        ↓

Robot Learning
      ↓
数据
      ↓
Policy
      ↓
机器人学习

        ↓

VLA
      ↓
视觉
+
语言
+
动作

        ↓

未来
      ↓
理解
+
规划
+
学习
+
行动
+
反馈

那么 LeRobot 更像是:

进入机器人学习时代的一个入口。


接下来我的学习计划

这篇文章不会停留在这里。

后面我会继续把自己的实际学习过程补充进来。

计划包括:

环境

  • Ubuntu
  • Python
  • PyTorch
  • CUDA
  • LeRobot 安装
  • 常见环境问题

机器人

  • SO-101
  • 机器人硬件
  • 电机
  • 编码器
  • 摄像头
  • Calibration

数据

  • Teleoperation
  • Record
  • Dataset
  • Episode
  • Dataset Visualization
  • 数据清洗

模型

  • ACT
  • Diffusion Policy
  • Transformer
  • VLA
  • SmolVLA
  • π₀ / π₀.₅

实验

  • 第一个 Demo
  • 第一次采集数据
  • 第一次训练
  • 第一次失败
  • 第一次成功
  • 不同 Dataset 对比
  • 不同 Policy 对比

进阶

  • Simulation
  • Sim2Real
  • Fine-tuning
  • 多任务学习
  • 数据规模
  • 泛化能力
  • 真机部署

结语

我觉得学习 LeRobot 最重要的,并不是把官方文档全部看完。

而是亲自完成这样一个闭环:

我操作机器人
      ↓
采集数据
      ↓
形成 Dataset
      ↓
训练 Policy
      ↓
机器人自己执行
      ↓
失败
      ↓
分析原因
      ↓
重新采集
      ↓
重新训练
      ↓
再次执行

当这个过程真正跑起来以后,你才会开始理解:

机器人是如何从数据中学习的。

而这可能也是未来机器人发展的一个重要方向:

从“人告诉机器人怎么做”,走向“机器人从人类经验中学习怎么做”。

所以,对我来说,学习 LeRobot 并不是单纯学习一个框架。

而是借 LeRobot 这个入口,去理解:

AI、数据、控制和真实世界机器人之间,到底是如何连接起来的。

这也是我接下来想继续探索的方向。 🤖