前言
最近开始系统学习机器人学习,一个让我越来越感兴趣的项目是 LeRobot。
以前学习机器人,接触更多的是如何让机器人按照我们的要求准确地运动?但 AI 的发展让我开始思考另外一个问题:
机器人能不能自己学习怎么完成任务?
比如我们想让一个机械臂完成“把桌上的杯子拿起来。”,传统机器人方法可能需要我们设计:
目标检测
↓
目标位置
↓
运动规划
↓
逆运动学
↓
轨迹规划
↓
控制器
↓
电机
而 Robot Learning 尝试走另一条路:
人类示范
↓
采集数据
↓
训练模型
↓
Policy
↓
机器人自己执行
这就是我开始学习 LeRobot 的原因。我希望通过 LeRobot 真正理解一件事情:
机器人究竟是如何从数据中学会行动的?
这篇文章会作为我的 LeRobot 学习总览,后面我会不断加入代码、实验、截图、数据分析和踩坑记录。
LeRobot 是什么?
LeRobot 是 Hugging Face 开源的机器人学习框架。
我认为 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、数据、控制和真实世界机器人之间,到底是如何连接起来的。
这也是我接下来想继续探索的方向。 🤖