PNP机器人学习——剖析LeRobot框架的架构、支持的策略、仿真平台和硬件、数据采集和训练过程,以及数据格式,帮助读者快速入门

PNP机器人学习——剖析LeRobot框架的架构、支持的策略、仿真平台和硬件、数据采集和训练过程,以及数据格式,帮助读者快速入门

张旭 PnP机器人 2025年11月12日 10:30 加拿大

00

引言

图片

01

LeRobot框架架构

1.1 框架概述

LeRobot是一个专注于实际机器人应用的机器人学习框架,它提供了一系列预训练模型、数据集和工具,特别关注模仿学习和强化学习方法。框架的目标是降低机器人技术的入门门槛,使研究人员和开发者能够更容易地开发和部署机器人应用。

(README.md:55-59)

1.2 系统架构

LeRobot的系统架构由几个相互连接的子系统组成,这些子系统协同工作,支持机器人学习。核心基础设施支持机器人学习算法的策略系统、训练数据的数据集管理、模拟的环境接口以及物理硬件交互的机器人控制。示例目录展示了这些系统如何一起使用。

图片

lerobot系统架构

1.3 代码架构

LeRobot的代码结构清晰,便于开发者理解和扩展:

.

├── examples             # 示例和教程,从这里开始学习LeRobot

│   └── advanced         # 包含更高级的示例

├── lerobot

│   ├── configs          # 包含可以在命令行中覆盖的所有选项的配置类

│   ├── common           # 包含核心功能类和工具

│   │   ├── datasets     # 各种人类演示数据集:aloha, pusht, xarm

│   │   ├── envs         # 各种模拟环境:aloha, pusht, xarm

│   │   ├── policies     # 各种策略实现:act, diffusion, tdmpc等

│   │   ├── robot_devices # 硬件接口:dynamixel电机,opencv相机,koch机器人

│   │   └── utils        # 各种工具函数

│   └── scripts          # 包含通过命令行执行的函数

│       ├── eval.py      # 加载策略并在环境中评估

│       ├── train.py     # 通过模仿学习和/或强化学习训练策略

│       ├── control_robot.py # 远程操作真实机器人,记录数据,运行策略

│       ├── pushdatasetto_hub.py # 将数据集转换为LeRobot数据集格式并上传到Hugging Face hub

│       └── visualize_dataset.py # 加载数据集并渲染其演示

├── outputs              # 包含脚本执行结果:日志、视频、模型检查点

└── tests                # 包含用于持续集成的pytest工具

(README.md:142-159)

这种结构使得开发者可以轻松地找到所需的组件,并理解它们之间的关系。

1.4 主要组件

1.4.1 策略系统

LeRobot通过统一的工厂接口实现多种最先进的策略架构。make_policy()工厂函数为创建不同类型的策略提供了统一的接口。训练(train.py)和评估(eval.py)脚本通过这个工厂与策略交互。所有策略都实现了PreTrainedPolicy接口,其中包括动作选择和模型训练的方法。

lerobot策略系统

1.4.2 数据集管理

数据集系统处理机器人数据集的加载、处理和可视化,重点关注多模态数据。LeRobotDataset类是核心组件,提供了加载和管理机器人数据集的功能。数据集可以从Hugging Face Hub或本地存储访问。make_dataset()工厂根据配置创建数据集实例。该系统处理片段、视频处理和图像转换,通过Rerun或HTML/Flask接口进行可视化。

图片

数据集管理

1.4.3 环境接口

LeRobot基于Gymnasium API为多个模拟环境提供了一致的接口。makeenv()工厂根据配置创建不同的环境类型(Aloha、PushT、XArm)。该系统包括用于预处理观察(preprocessobservation())和将环境特征转换为策略特征(envtopolicy_features())的工具。工厂生成Gymnasium向量环境,实现并行模拟。

图片

环境配置

1.4.4 机器人控制

机器人控制系统提供了与物理机器人交互的接口,支持不同的控制模式和硬件类型。control_robot.py脚本是机器人控制系统的核心组件,支持不同的控制模式(远程操作、记录、回放、校准)和机器人类型(操作器、移动)。该系统通过电机(Dynamixel、Feetech)和相机(OpenCV、RealSense)的抽象与硬件接口。记录模式与LeRobotDataset系统集成,用于数据收集。

图片

robot control模块

02

LeRobot支持的策略

LeRobot实现了几种最先进的策略架构,以下是对这些策略的详细介绍:

策略类型

描述

使用场景

优点

缺点

ACT (Action Chunking Transformer)

基于Transformer的动作分块策略,专为双手操作设计

需要精确协调的双手操作任务,如组装、操作复杂物体

能够学习长期依赖关系,处理复杂序列任务,对时间步长不敏感

训练成本高,需要大量数据,推理速度可能较慢

Diffusion (Denoising Diffusion)

基于扩散模型的视觉运动控制策略

需要精确控制的视觉引导任务,如精确抓取和放置

生成高质量、多样化的动作,对不确定性有良好建模

推理速度较慢,训练过程复杂

TDMPC (Temporal Difference M)PC)

时间差分模型预测控制

需要预测性控制的任务,如动态环境中的导航和操作

结合了模型预测控制的规划能力和强化学习的自适应性

对模型精度要求高,计算成本较大

VQBeT (Vector Quantized Behavior)

向量量化行为Transformer

需要从多样化演示中学习的任务,如多模态行为学习

能够从多样化数据中提取离散行为原语,泛化能力强

离散表示可能限制某些连续控制任务的精度

PI0 (Vision-Language-Action)

视觉-语言-动作策略

需要语言指导的任务,如遵循自然语言指令的机器人操作

能够理解和执行自然语言指令,多模态融合能力强

对语言理解的准确性依赖高,需要配对的语言-动作数据

PI0FAST (Fast Action Tokenization)

快速动作标记化策略

需要实时响应的语言引导任务

比PI0更快的推理速度,保持语言理解能力

可能在复杂指令上精度略低于PI0

这些策略可以通过统一的make_policy()工厂函数创建,使得在不同任务和环境中切换策略变得简单。

03

LeRobot支持的仿真平台和硬件

3.1 支持的仿真环境

LeRobot通过Gymnasium接口支持多个模拟环境:

环境

描述

特点

Aloha

双手机器人操作任务

专注于双手协调操作,如倒咖啡、开瓶盖等

PushT

物体推动操作任务

专注于推动物体到目标位置的任务

XArm

XArm机器人操作任务

基于现实世界XArm机器人的模拟环境

这些环境可以作为额外依赖项安装:

pip install -e ".aloha, pusht"

(README.md:122-129)

3.2 硬件支持

LeRobot支持多种物理机器人硬件,特别是专注于经济实惠且功能强大的机器人平台。以下是主要支持的硬件类型:

(1)操作器机器人:

SO100(基于Koch设计的双臂机器人)

XArm(单臂机器人)

(2)移动机器人:

LeKiwi(移动机器人平台)

(3)传感器和执行器:

相机:OpenCV兼容相机、Intel RealSense深度相机

电机:Dynamixel伺服电机、Feetech伺服电机

3.3 SO100机器人案例分析

SO100是LeRobot框架中重点支持的一种双臂机器人,基于Koch设计。它是一个经济实惠的双臂机器人平台,特别适合研究和教育用途。

3.3.1 SO100硬件架构

SO100机器人由以下主要组件组成:

两个机械臂,每个臂有多个自由度

Dynamixel伺服电机作为关节驱动

一个或多个相机用于视觉感知

控制电路和电源系统

3.3.2 SO100控制流程

控制SO100机器人的典型流程如下:

图片

04

使用LeRobot进行遥操作和数据采集

4.1 遥操作模式

遥操作模式允许用户直接手动控制机器人。这种模式对于测试机器人硬件、实验动作或准备记录会话非常有用。

4.1.1 遥操作流程

(参考 control_robot.py:233-242)

图片

4.1.2 遥操作配置

遥操作可以通过TeleoperateControlConfig类进行配置,该类提供以下选项:

参数

类型

描述

fps

int或None

限制最大帧率。默认无限制。

teleop_time_s

float或None

遥操作持续时间。默认无限。

display_data

bool

是否显示相机馈送和数据可视化。

4.1.3 遥操作命令示例

基本的无限频率遥操作:

python lerobot/scripts/control_robot.py \    --robot.type=so100 \    --control.type=teleoperate

(control_robot.py:29-39)

限制频率的遥操作,模拟记录:

python lerobot/scripts/control_robot.py \    --robot.type=so100 \    --control.type=teleoperate \    --control.fps=30

(control_robot.py:42-48)

4.2 数据记录模式

记录模式将机器人的观察和动作捕获到结构化数据集中。这种模式对于收集用于机器人学习策略的训练数据至关重要。

4.2.1 记录流程

(参考 control_robot.py:246-340)

图片

4.2.2 使用策略记录

记录可以使用预训练策略控制机器人进行,这对于评估策略性能很有用。使用策略记录时,遥操作被禁用,策略根据观察生成动作。

(control_utils.py:213-288)

4.2.3 记录配置

记录通过RecordControlConfig类配置,具有以下关键参数:

参数

类型

描述

repo_id

str

数据集标识符(例如,'username/dataset_name')

single_task

str

记录期间执行的任务描述

fps

int或None

记录的帧率

warmup_time_s

int或float

开始数据收集前的预热秒数

episode_time_s

int或float

每个片段的数据记录秒数

reset_time_s

int或float

每个片段后重置环境的秒数

num_episodes

int

要记录的片段数量

video

bool

是否将帧编码为数据集中的视频

push_to_hub

bool

是否将数据集上传到Hugging Face Hub

policy

PreTrainedConfig或None

用于评估记录的可选策略配置

resume

bool

是否在现有数据集上继续记录

num_image_writer_processes

int

处理帧保存为PNG的子进程数

num_image_writer_threads_per_camera

int

每个相机写入PNG图像的线程数

4.2.4 记录命令示例

记录单个测试片段:

python lerobot/scripts/controlrobot.py \    --robot.type=so100 \    --control.type=record \    --control.fps=30\    --control.singletask="抓取乐高积木并将其放入箱中。"\    --control.repoid=username/testdataset \    --control.numepisodes=1\    --control.pushto_hub=True

(control_robot.py:50-59)

记录用于训练的完整数据集:

python lerobot/scripts/controlrobot.py \    --robot.type=so100 \    --control.type=record \    --control.fps=30\    --control.repoid=username/trainingdataset \    --control.numepisodes=50\    --control.warmuptimes=2\    --control.episodetimes=30\    --control.resettimes=10

(control_robot.py:82-91)

4.3 模拟环境中的数据采集

除了在实际机器人上收集数据外,LeRobot还支持在模拟环境中收集数据,这对于初始开发和测试非常有用。

python lerobot/scripts/controlsimrobot.py record \    --robot-path lerobot/configs/robot/yourrobotconfig.yaml \    --sim-config lerobot/configs/env/yoursimconfig.yaml \    --fps 30\    --repo-id $USER/robotsimtest \    --num-episodes 50\    --episode-time-s 30

(controlsimrobot.py:65-72)

05

LeRobot数据格式

5.1 LeRobotDataset格式概述

LeRobot使用一种称为LeRobotDataset的统一数据格式,它设计用于存储和管理机器人学习所需的多模态数据。这种格式可以轻松地从Hugging Face Hub或本地文件夹加载。

图片

lerobot数据格式

5.2 数据集结构

LeRobotDataset的文件结构组织如下:

├── data

│   ├── chunk-000

│   │   ├── episode_000000.parquet

│   │   ├── episode_000001.parquet

│   │   └── ...

│   ├── chunk-001

│   │   ├── episode_001000.parquet

│   └── ...

├── meta

│   ├── episodes.jsonl

│   ├── info.json

│   ├── stats.json

│   └── tasks.jsonl

└── videos

├── chunk-000

│   ├── observation.images.camera1  # 'camera1' 是示例名称

│   │   ├── episode_000000.mp4

│   ├── observation.images.camera2

├── chunk-001

└── ...

(lerobot_dataset.py:400-438)

5.3 数据集组件

LeRobotDataset包含以下主要组件:

(1)HF Dataset:基于Arrow/Parquet的数据集,包含以下特征:

观察图像(VideoFrame格式或路径)

状态观察(例如关节位置)

动作(例如关节目标位置)

片段索引和帧索引

时间戳

任务描述

(2)元数据 (meta):

episodes.jsonl: 包含每个片段的元信息,如起始/结束帧索引、在哪个chunk等。

info.json: 数据集的整体信息,包括特征、fps、机器人信息等。

stats.json: 数据集中每个数值特征的统计信息(最大值、均值、最小值、标准差)。

tasks.jsonl: 如果数据集包含多个任务,这里会列出任务描述和对应的片段。

(3)视频 (videos) (可选):如果info.json中指定使用视频存储图像,则原始视频文件存储在此处,按chunk和相机名称组织。

06

结论

LeRobot框架通过其模块化的设计、丰富的预训练模型和数据集支持,以及对真实世界机器人应用的关注,显著降低了机器人学习的门槛。无论是进行学术研究还是开发实际应用,LeRobot都提供了一个强大而灵活的平台。希望本篇深度剖析能帮助您快速上手并有效利用LeRobot进行机器人学习的探索与创新。

文/张旭,已获得转载授权

Read more

【FPGA干货】详解高速ADC的串行LVDS数据捕获与接口设计

【FPGA干货】详解高速ADC的串行LVDS数据捕获与接口设计

【FPGA干货】详解高速ADC的串行LVDS数据捕获与接口设计 前言 在现代高速数据采集系统中,随着ADC采样率的不断提升(从几十MHz到几百MHz甚至更高),传统的并行CMOS/LVDS接口因占用引脚过多、布线困难等问题逐渐被串行LVDS接口取代。TI(德州仪器)的许多多通道ADC(如ADS528x, ADS529x系列)都采用了这种接口。 然而,串行LVDS接口虽然减少了PCB走线数量,却给FPGA接收端的设计带来了巨大的挑战:如何在几百Mbps甚至Gbps的速率下,稳定地实现位同步(Bit Alignment)和帧同步(Frame Alignment)? 1. 认识串行LVDS接口 一个典型的高速ADC串行LVDS接口通常包含以下三类信号: 1. 串行数据 (Serial Data, D0…DN−1D_0 \dots D_{N-1}D0 …DN−1 ):ADC的采样数据通过一对或多对LVDS线串行输出。 2. 位时钟 (Bit Clock, LCLK/DCLK):通常是DDR(

2023年电赛H题(信号分离装置)-FPGA+stm32解法

2023年电赛H题(信号分离装置)-FPGA+stm32解法

目录 前言 题目 解题思路 基本框架 代码思路 第一部分(FPGA的FIFO以及串口发送接收) 1.FIFO 2.(FPGA串口发送) 3.FPGA串口接收 4.总结 第二部分(stm32接收数据进行FFT识别波形以及频率并发送) 1.stm32串口接收 2.stm32进行FFT 3.stm32串口发送 第三部分(FPGA得到波形与频率后生成波形) 第四部分(FPGA锁相) 1.鉴相 2.环路滤波 3.反馈 第五部分(DAC输出) 第六部分(移相) 1.按键消抖 2.按键设置相位差 3.数码管显示相位 第七部分(FPGA代码总结) 后记 前言 本文章除开要求一使用的增益为一的加法器以外,其余皆由FPGA+

理想、小鹏争相发力汽车机器人,为啥都抢着做?

理想、小鹏争相发力汽车机器人,为啥都抢着做?

最近几年,伴随着AI科技的高速发展,各家企业都在纷纷布局具身智能,就在近期,理想、小鹏都在争相发力汽车机器人,为什么会这样?他们抢着做的原因是啥? 一、理想、小鹏争相发力汽车机器人 据界面新闻的报道,试图从硬件参数竞赛与价格战泥潭中抽身的汽车制造商们,正在把筹码押向全新的AI赌注。它们希望打造出一种媲美科幻电影,具备主动感知与服务能力的“汽车机器人”。这场转向不仅关乎技术升级,也被视为向资本市场讲述新一轮增长故事的关键。 理想汽车CEO李想日前发文称,人工智能正经历从Chatbot(聊天机器人)向Agent(智能体)进化。过去AI工具更多提供建议,但真正进入生活和用于生产和生活,它必须能够行动。他认为,汽车本质上是一个在物理世界移动的机器人,应当像司机一样理解用户需求、主动提供服务。 要实现这一愿景,车辆必须同时具备意图理解与物理执行能力,这也意味着目前独立运作的两套系统需要打通,即负责交互与服务的智能座舱,以及负责感知与控制的智能驾驶。只有形成从决策到控制的完整链路,“汽车机器人”才具备落地现实基础。 小鹏汽车CEO何小鹏在内部讲话中也给出了相似判断。据36氪报道,何小

组建龙虾团队——OpenClaw多机器人构建

组建龙虾团队——OpenClaw多机器人构建

成功搭建了OpenClaw,也成功建立的自己的每日服务,这时候发现,似乎不太敢在当前的机器人中让他做别的事情,生怕会话太多会让他出现遗忘。(尽管我们配置了QMD记忆增强,但毋庸置疑任何技术都是有上限的)。 换做同样的情况,比如在DeepSeek或者豆包之类的对话窗口,我们会习惯性地新建一个对话。那么我们是否可以新建一个机器人,或者多个机器人,让他们各司其职,各尽所能,形成一个相互配合的团队呢~开干吧,没什么不可能的!! 🦞新建一个机器人 来到飞书开发者后台,新创建一个应用,在这里我们以短视频剪辑脚本应用为例。 创建之后,由于我们的openclaw绑定的是之前的飞书渠道,并没有链接到这个应用的APP ID,所以暂时不做其他操作,只需要记录一下他的APP ID和APP Secret。 🦞配置OpenClaw 如果还是按照claw的命令行安装,每一步都有些让人担心害怕,毕竟我们先前已经配置过一次了,接下来的操作,需要小心是否会把以前的配置给覆盖掉。 为了避免这样的不确定性,我们直接去操作他的配置文件 在WSL2终端中进入openclaw目录 cd .openclaw