返回Guides

机器人模拟教程:设置,基准和训练您的第一项政策

步骤简单的RoboMimic指南,用于收集真实机器人数据. 进行比较,比较BC,DAgger和MimicGen的工作流程,并对硬件要求,数据集格式化和OpenArm集成.

导游: T17

通过 RoboMimic 进行完整的介绍,这是机器人操纵的领先的离线模仿学习框架. 从安装到训练,

机器人模拟是什么?

机器人操纵的非线模仿学习算法是学习和比较的开源框架.由阿贾曼德勒克和斯坦福和NVIDIA的同事开发,它首次与论文 "机器人操纵的非线人人类示范中学习有什么关系" (CoRL 2021) 一起发布. 该项目提供了以前没有统一包中的三个东西:在Robosuite模拟中收集的标准化示范数据集,六种模仿学习算法的参考实现以及可复制的评估协议以进行公平比较.

支持的六种算法涵盖了线下学习的主要家庭:

  • 监督从观察到行动的回归. 最简单的基线,通常是惊人的竞争力.
  • BC BC BC BC BC BC BC BC BC BC BC BC BC BC BC BC BC BC BC BC BC BC BC BC BC BC BC BC BC BC BC BC BC BC BC BC BC BC BC BC BC BC BC BC BC BC BC BC BC BC BC BC BC BC BC BC BC BC BC BC BC BC BC BC BC BC BC BC BC BC BC BC BC BC BC BC BC BC BC BC BC BC BC BC BC
  • **BCQ (批量限制的Q-学习) ** 一种离线RL方法,限制政策保持接近示范分布,同时优化Q-值.
  • **CQL (保守的Q-学习) ** 离线RL,对非分配行动进行惩罚,防止过度估值.
  • **IQL (暗示Q-学习) ** 通过预期回归学习一个值函数,完全避免查询分布外的操作.
  • TD3-BC TD3具有行为克隆规范化术语,使该政策保持接近数据,同时允许RL改善.

机器人模拟是重要的,因为它回答了一个实用的问题:鉴于人类示范的固定数据集,哪个算法提取了最佳政策? 框架还支持[真实机器人数据]T19) 在相同的 HDF5 格式中,因此结果从模拟基准转移到硬件部署.

装备

机器人模拟需要Python 3.8+,并且依赖于模拟环境的Robosuite. 建议的方法是专门的控制环境来隔离依赖性.

# Create and activate conda environment
conda create -n robomimic python=3.10
conda activate robomimic

# Install robomimic and robosuite
pip install robomimic
pip install robosuite

# For development (editable install with source)
git clone https://github.com/ARISE-Initiative/robomimic.git
cd robomimic
pip install -e .

# Verify installation
python -c "import robomimic; print(robomimic.__version__)"

对于 GPU 加快训练 (需要基于图像的政策),首先安装 CUDA 支持的 PyTorch:

# PyTorch with CUDA 12.1 (adjust for your CUDA version)
pip install torch torchvision --index-url https://download.pytorch.org/whl/cu121

# Then install robomimic
pip install robomimic

在继续之前,请检查您的GPU可见于PyTorch:

python -c "import torch; print(f'CUDA available: {torch.cuda.is_available()}, Device: {torch.cuda.get_device_name(0)}')"

数据集

机器人模拟为四项机器人模拟任务提供预收集的示范数据集.每个数据集分别有两个操作员质量级别 (熟练的人和多人) 和两个观察类型 (低维状态和图像).

使用内置脚本下载数据集:

# Download the Lift task dataset (low-dim, proficient-human, 200 demos)
python robomimic/scripts/download_datasets.py --tasks lift

# Download all four tasks
python robomimic/scripts/download_datasets.py --tasks all

# Download image observation datasets (larger, ~10 GB per task)
python robomimic/scripts/download_datasets.py --tasks lift --dataset_type image

每个数据集都作为一个以以下结构的HDF5文件存储:

  • 数据/示范_0/obs/ 观测阵列 (联合位置,终端效应器姿势,抓住器状态,可选图像)
  • 数据/示范_0/行动 行动阵列 (联合速度或位置目标)
  • 数据/示范_0/奖励 稀有奖励信号 (1个成功,否则0个)
  • 节目的终结标志
  • 数据/面具/ 火车/验证分区指数

低维度观测包括机器人联合位置 (7D),联合速度 (7D),终端效应器位置 (3D),终端效应器导向 (4D四方体) 和抓紧器开口 (1D).对于像运输这样的双手任务,所有阵列都被翻倍 (每臂一).图像观测从代理视觉和机器人相机中增加84x84或128x128 RGB阵列.

培养自己的第一政策

训练有素的政策最快的方法是通过低维观测进行升降任务的BC. 这在现代CPU上训练在30分钟内,并且应该达到95%以上的成功率.

步骤1:生成训练配置.

# Generate a default BC config for the Lift task
python robomimic/scripts/generate_config.py \
  --algo bc \
  --task lift \
  --dataset_path datasets/lift/ph/low_dim.hdf5 \
  --output_dir configs/

**步骤2: 检查和修改配置.**生成的JSON配置控制了每个训练参数.

{
  "algo_name": "bc",
  "experiment": {
    "name": "bc_lift_lowdim",
    "epoch_every_n_steps": 500,
    "validation_epoch_every_n_steps": 50,
    "save.enabled": true
  },
  "train": {
    "data": "datasets/lift/ph/low_dim.hdf5",
    "batch_size": 100,
    "num_epochs": 2000,
    "seed": 1
  },
  "observation": {
    "modalities": {
      "obs": {
        "low_dim": ["robot0_eef_pos", "robot0_eef_quat", "robot0_gripper_qpos", "object"]
      }
    }
  }
}

步骤3: 进行训练.

python robomimic/scripts/train.py --config configs/bc_lift_lowdim.json

# Training logs to stdout and TensorBoard
# Monitor: tensorboard --logdir trained_models/

步骤4:评估训练政策.

# Run 50 evaluation rollouts
python robomimic/scripts/run_trained_agent.py \
  --agent trained_models/bc_lift_lowdim/models/model_best.pth \
  --n_rollouts 50 \
  --render

如果您的成功率低于80%,请检查您是否使用正确的数据集路径,并且整个2000年期间进行了培训.

算法比较

选择合适的算法取决于您的数据预算,计算预算和任务复杂性.

Algorithm Type Data Efficiency Compute Cost Best For Key Limitation
BC Supervised High Low Simple tasks, good data Compounding errors on long horizons
BC-RNN Supervised High Medium Multi-step tasks, temporal reasoning Slower inference, harder to tune
BCQ 离线强化学习 Medium High Suboptimal data, needs improvement Sensitive to hyperparameters
CQL 离线强化学习 Medium High Conservative policies from noisy data Can be overly conservative
IQL 离线强化学习 Medium Medium Mixed-quality datasets Requires careful expectile tuning
TD3-BC 离线强化学习 Medium High Refining near-optimal demonstrations Unstable with small datasets

**一般指导:**从BC开始.如果BC由于长视线组合错误失败,请尝试BC-RNN.如果您的数据质量混合 (有些示范是不最佳的),请尝试IQL.只使用BCQ/CQL/TD3-BC,如果你有具体的理由认为离线RL改善数据分布既必要又可实现. 在实践中,BC-RNN是 RoboMimic 基准任务中最可靠的算法.

测量标准

机器人模拟定义了四项越来越难的操纵任务,所有这些任务都在机器人模拟中实现:

  • 从桌子上拿起一个立方体. 一只手臂,一个对象. 最简单的任务,有用来验证你的训练管道工作. BC成功:95-100%.
  • 拿起一个子,把它放在一个目标桶里.需要精确的抓住和放置.BC成功:80-95%.BC-RNN成功:90-98%.
  • 运输 双手任务:一只手臂从垃圾桶中挑选一个物体,将其交给另一只手臂,将其放置在目标位置.最困难的任务,需要两只手臂之间的协调.BC-RNN成功: 30-60%.

为了运行完整的基准指数:

# Generate configs for all tasks and algorithms
python robomimic/scripts/generate_paper_configs.py --output_dir benchmark_configs/

# Run all experiments (use a cluster or run overnight)
python robomimic/scripts/train.py --config benchmark_configs/lift/bc.json
python robomimic/scripts/train.py --config benchmark_configs/can/bc.json
python robomimic/scripts/train.py --config benchmark_configs/square/bc_rnn.json
python robomimic/scripts/train.py --config benchmark_configs/transport/bc_rnn.json

# Evaluate all trained models
python robomimic/scripts/run_trained_agent.py \
  --agent trained_models/lift/bc/models/model_best.pth \
  --n_rollouts 100

在一个RTX 3090上,在所有算法和任务中运行完整的基准需要大约3-5天.对于基于图像的实验,预计训练时间将会长达2-3倍.

使用图像观测

基于图像的政策培训是RoboMimic在现实世界转移中最有价值的地方.真正的机器人无法访问地面真相对象位置.它们拥有摄像头.在模拟中培训视觉政策并转移到现实硬件是[模仿学习]T20) 部署的主要管道.

为了训练视觉BC政策,请改变您的配置中的观察方式:

{
  "observation": {
    "modalities": {
      "obs": {
        "low_dim": ["robot0_eef_pos", "robot0_gripper_qpos"],
        "rgb": ["agentview_image", "robot0_eye_in_hand_image"]
      }
    },
    "encoder": {
      "rgb": {
        "core_class": "VisualCore",
        "core_kwargs": {
          "backbone_class": "ResNet18Conv",
          "pool_class": "SpatialSoftmax"
        }
      }
    }
  }
}

为了更好的视觉表示,使用先训练的编码器,如R3M (来自Nair等, 2022) 而不是从零开始训练:

# Install R3M
pip install r3m

# In your config, set the encoder to use R3M
"backbone_class": "R3MConv",
"backbone_kwargs": {"r3m_model_class": "resnet18"}

**GPU要求:**使用ResNet18的图像培训需要至少8GB的VRAM.R3M和16批量大小,预计使用10-12GB.推一个RTX 3080 (10GB) 或RTX 4090 (24GB).训练时间从30分钟 (低) 增加到4-8小时 (基于图像) 在单个GPU上.

收集自己的数据

机器人模拟接收任何按照其格式的HDF5数据集,这意味着你可以在robosuite或在真实硬件上收集示范,并使用相同的算法训练.

通过电话操作在机器人接收:

# Launch robosuite teleoperation data collection
python robosuite/scripts/collect_human_demonstrations.py \
  --environment Lift \
  --robots Panda \
  --controller OSC_POSE \
  --device keyboard

支持的输入设备包括键盘,SpaceMouse (3D连接) 和设备桥梁的VR控制器.对于大规模收集,SpaceMouse提供了数据质量和操作员疲劳之间的最佳权衡.

** 将自定义数据转换为RoboMimic格式:** 您的数据必须在HDF5文件中的集中组织.每个集需要:观测 (数组的定律),行动 (数组),奖励 (数组),和 dones (数组).使用转换工具:

import h5py
import numpy as np

with h5py.File("my_dataset.hdf5", "w") as f:
    grp = f.create_group("data")
    for i, episode in enumerate(episodes):
        demo = grp.create_group(f"demo_{i}")
        obs = demo.create_group("obs")
        obs.create_dataset("robot0_eef_pos", data=episode["eef_positions"])
        obs.create_dataset("robot0_gripper_qpos", data=episode["gripper_states"])
        demo.create_dataset("actions", data=episode["actions"])
        demo.create_dataset("rewards", data=episode["rewards"])
        demo.create_dataset("dones", data=episode["dones"])

    # Create train/val split
    mask = grp.create_group("mask")
    n = len(episodes)
    mask.create_dataset("train", data=np.arange(int(n * 0.9)))
    mask.create_dataset("valid", data=np.arange(int(n * 0.9), n))

转移到真实硬件

通过 RoboMimic 训练的政策将对三种关键缺口进行重视:

  • 观察差距: 实际摄像头图像与模拟染不同. 在训练期间使用机器人随机调整域 (纹理,照明,摄像头姿势) 或通过少量的真实演示调整 (通常足够10-50集).
  • ** 操作空间差距:** 确保您的实际机器人控制器在与训练环境相同的控制频率 (通常是RoboMimic的20 Hz) 接受相同的操作类型 (联合速度与OSC位置).
  • 动力差距: 模拟与现实之间存在不同的对象摩擦,机器人关节动力和抓住器行为.

对于实际的Franka Panda (默认的 RoboMimic 机器人) 的部署,使用 T13 控制器界面,该界面提供与robosuite相同的 OSC_POSE 行动空间.对于其他机器人臂,您需要实现一个将 RoboMimic 操作映射到机器人的控制器的行动包装.

常见的错误和纠正

  • "KeyError: 'robot0_eef_pos'"在训练中 您的数据集不包含配置预期的观察键.运行T14查看可用的键,然后更新配置以匹配.
  • 培训损失下降,但评估成功率为0% 政策过度适应培训数据.减少批量大小,增加中断 (0.1-0.3),或增加数据集大小.还要检查你的评估环境是否使用与培训相同的观察正常化.
  • 在图像训练中"CUDA 输出内存" 减少批量大小 (图像政策的开始是8或16),或使用梯度积累.如果使用R3M,则结编码器脊柱,以减少内存约40%.
  • **BC-RNN训练不稳定 (损失峰值) ** 降低学习速度到1e-4,使用梯度剪切 (max_norm=1.0),并逐步增加序列长度.开始从seq_length=10,并在训练稳定后增加到20.
  • **自 MuJoCo 转向开源 (v2.1.2+) 后,在 T15 በኩል安装. 删除任何冲突的旧mujoco-py 装置: T16.
  • 训练有素的政策在sim中运行,但在真实机器人上失败 检查行动空间不匹配 (联合速度与OSC位置),控制频率不匹配和观察正常化.

与RCSV硬件集成

RCSV提供了预配置的机器人设置,这些机器人与RoboMimic工作流程兼容,消除了硬件集成负担:

  • OpenArm RCSV的开源6DOF机器人臂.我们提供了一个与 RoboMimic 兼容的动作包装,它将 OSC_POSE 操作映射到 OpenArm 的联合控制器上,以20 Hz.数据集收集使用相同的 HDF5 格式,因此您可以直接使用 RoboMimic 算法进行培训,而无需转换格式.
  • Franka Panda 默认的RoboMimic机器人.RCSV运行了Franka系统,预先配置了对RoboMimic兼容的数据收集和政策部署的无氧控制器.
  • 双手设置 在现实硬件上运输任务,RCSV提供双臂ALOHA类型系统,并以50Hz的同步数据收集.数据格式直接匹配RoboMimic的双手结构.

在交付前,所有RCSV收集的数据集都根据RoboMimic HDF5方案进行验证,确保它们直接在训练管道中进行加载,而不进行修改.

常见的问题

  • ** 机器人模拟是用于什么?** 机器人模拟是对机器人操纵的离线模拟学习算法进行基准测量和开发的框架. 它提供了标准化的数据集,培训管道和评估协议,以便研究人员可以公平地对比BC,BC-RNN,BCQ和IQL等算法进行相同的任务.
  • ** 机器人模拟支持哪些算法?** 六个算法:BC,BC-RNN,BCQ,CQL,IQL和TD3-BC.用户还可以通过模块化配置系统添加自定义算法.
  • **我需要一个GPU来训练RoboMimic的政策吗?**对于低维度观测政策,现代的CPU工作但很慢.对于基于图像的政策,需要一个至少8GB的VRAM的NVIDIA GPU.建议使用RTX 3080或更好的CPU.
  • 我可以用真实机器人数据使用RoboMimic吗 是的.RoboMimic接受任何按照其格式规范的HDF5数据集.收集在真实机器人上的示范,将它们转换为RoboMimic HDF5格式,并使用相同的算法训练.
  • 罗博米奇与勒罗波特如何比较?**罗博米奇与罗博苏伊特专注于离线模仿学习基准.勒罗波特 (Hugging Face) 是更广泛的,涵盖数据收集,多个模拟后台和实机器人部署.许多研究人员在勒罗波特管道内使用了罗博米奇算法.
  • 我应该在基准任务中预期什么样的成功率? 升级率:95-100% (BC). 可以:80-95% (BC). 平方:60-85% (BC-RNN). 运输率:30-60% (BC-RNN). 这些因数据质量和超参数而不同.

需要真正的机器人训练数据吗?

RCSV收集了与RoboMimic兼容的实用硬件的示范数据集 Franka,OpenArm和双手动ALOHA系统.

[查看数据服务]