LeRobot documentation
向后兼容性
快速入门
教程
用于机器人的模仿学习LeLab - Lerobot GUI添加策略自带硬件使用 RL 训练机器人在模拟环境中训练 RL多 GPU 训练人工参与的数据收集使用 PEFT(例如 LoRA)进行训练使用重命名映射和空相机
计算与硬件
数据集
策略
ACTSmolVLAπ₀ (Pi0)π₀-FAST (Pi0Fast)π₀.₅ (Pi05)FineART-VLAMolmoAct2VLA-JEPALaWAMEO-1LingBot-VALingBot-VLA 2.0OpenGalaxea G0.5FastWAMLong-WAMFLUX 3 Action (flux3)EVO1NVIDIA GR00TX-VLA多任务 DiT 策略WALL-OSSWall-OSS-0.5DM05Cosmos3
奖励模型
推理
模拟
基准测试
添加基准测试LIBEROLIBERO-plusMeta-WorldRoboTwin 2.0RoboCasa365RoboCerebraNVIDIA RoboLabRoboMMENVIDIA IsaacLab Arena 环境VLABench
机器人处理器
机器人
SO-101SO-100Koch v1.1LeKiwiHope JrReachy 2Unitree G1Earth Rover MiniOMXOpenArmreBot B601YAM第三方机器人 & 遥操作器
远程操作员
传感器
资源
关于
API 参考
向后兼容性
策略归一化迁移(PR #1452)
破坏性变更:LeRobot 策略不再在权重中嵌入内置的归一化层。归一化现在由外部的 PolicyProcessorPipeline 组件处理。
发生了什么变化?
| 在 PR #1452 之前 | 在 PR #1452 之后 | |
|---|---|---|
| 归一化位置 | 嵌入在模型权重中(normalize_inputs.*) | 外部 PolicyProcessorPipeline 组件 |
| 模型状态字典 | 包含归一化统计信息 | 仅清理权重 - 不包含归一化参数 |
| 用法 | policy(batch) 处理所有操作 | preprocessor(batch) → policy(...) → postprocessor(...) |
对现有模型的影响
- 在 PR #1452 之前训练的模型,其权重中已嵌入归一化
- 这些模型需要迁移才能与新的
PolicyProcessorPipeline系统配合使用 - 迁移过程会提取归一化统计信息,并创建独立的处理器流水线
迁移旧模型
使用迁移脚本转换带有嵌入归一化的模型:
python src/lerobot/processor/migrate_policy_normalization.py \
--pretrained-path lerobot/act_aloha_sim_transfer_cube_human \
--push-to-hub \
--branch migrated该脚本:
- 从模型权重中提取Extracts归一化统计量
- 创建外部预处理和后处理流水线
- 从模型权重中移除归一化层
- 保存干净的模型 + 处理器流水线
- 使用自动创建 PR 的方式向 Hub 执行Pushes
使用迁移后的模型
# New usage pattern (after migration)
from lerobot.policies import make_policy, make_pre_post_processors
# Load model and processors separately
policy = make_policy(config, ds_meta=dataset.meta)
preprocessor, postprocessor = make_pre_post_processors(
policy_cfg=config,
dataset_stats=dataset.meta.stats
)
# Process data through pipeline
processed_batch = preprocessor(raw_batch)
action = policy.select_action(processed_batch)
final_action = postprocessor(action)硬件 API 重新设计
PR #777 改进了 LeRobot 的校准,但不向后兼容。以下是变更内容的概述,以及如何在处理此拉取请求之前创建的数据集时继续工作。
发生了什么变化?
| 在 PR #777 之前 | 在 PR #777 之后 | |
|---|---|---|
| 联合范围 | 度数 -180...180° | 归一化范围 关节:–100...100 夹爪:0...100 |
| 零位(SO100 / SO101) | 手臂完全水平伸展 | 每个关节范围的中点 |
| 边界处理 | 用于检测 ±180 ° 环绕的软件防护 | 由于中间范围为零,无需环绕逻辑 |
对现有数据集的影响
- 在 PR #777 之前创建的录制轨迹如果直接加载,将会错误地重放:
- 关节角度存在偏移,且归一化不正确。
- 任何直接在旧数据上微调或训练的模型,都需要对其输入和输出进行转换。
使用旧校准系统创建的数据集
我们提供了一个迁移示例脚本,用于重放使用先前校准记录的剧集,位于此处:examples/backward_compatibility/replay.py。
下面我们将带您了解示例脚本中所做的修改,以使先前的校准数据集能够正常工作。
+ key = f"{name.removeprefix('main_')}.pos"
action[key] = action_array[i].item()
+ action["shoulder_lift.pos"] = -(action["shoulder_lift.pos"] - 90)
+ action["elbow_flex.pos"] -= 90让我们逐步分析。
新代码库使用 .pos 后缀表示位置观测值,并且我们已移除 main_ 前缀:
key = f"{name.removeprefix('main_')}.pos"对于 "shoulder_lift"(id = 2),与旧校准/代码相比,0 位置改变了 -90 度,且方向相反。
action["shoulder_lift.pos"] = -(action["shoulder_lift.pos"] - 90)对于 "elbow_flex"(id = 3),与旧的校准/代码相比,0 位置改变了 -90 度。
action["elbow_flex.pos"] -= 90要使用角度归一化,我们将 --robot.use_degrees 选项设置为 true。
python examples/backward_compatibility/replay.py \
--robot.type=so101_follower \
--robot.port=/dev/tty.usbmodem5A460814411 \
--robot.id=blue \
+ --robot.use_degrees=true \
--dataset.repo_id=my_dataset_id \
--dataset.episode=0使用通过先前校准系统训练的策略
策略以与数据集相同的格式(torch.Tensors)输出动作。因此,应应用相同的转换。
要找到这些变换,我们建议首先使用上面的章节,重放策略训练所用数据集中的某一集。
然后,将这些相同的变换添加到你的推理脚本中(此处展示的是调用 predict_action 的脚本,类似于 examples/ 中的 evaluate.py 示例):
action_values = predict_action(
observation_frame,
policy,
get_safe_torch_device(policy.config.device),
preprocessor,
postprocessor,
policy.config.use_amp,
task=single_task,
robot_type=robot.robot_type,
)
action = {key: action_values[i].item() for i, key in enumerate(robot.action_features)}
+ action["shoulder_lift.pos"] = -(action["shoulder_lift.pos"] - 90)
+ action["elbow_flex.pos"] -= 90
robot.send_action(action)如果您有任何问题或在迁移过程中遇到问题,欢迎在 Discord 上提出。
Update on GitHub