简介#
1. 概览#
本节介绍 MimicLite 的组成、发布的模型和环境配置。完成本节后,你可以在仿真中运行发布的策略,并准备好训练环境。
1.1 MimicLite 能做什么#
| 工作流 | 做什么 | 见 |
|---|---|---|
| Motion Data | 把动作数据集转换成统一格式,检查和回放 | 第 2 节 |
| Training | 用 PPO 或 PPO-ROA 训练跟踪策略 | 第 3 节 |
| Play & Export | 在仿真中查看策略,导出部署用的 ONNX 和 YAML | 第 4 节 |
| Sim2Sim & Sim2Real | 在 MuJoCo 中验证,部署到实机,用 PICO 遥操作 | 第 5 节 |
| Evaluation | 在统一协议下评测策略,运行或接入其他代码库训练的策略 | 第 6 节 |
1.2 四个仓库#
MimicLite 由四个仓库组成,Roboparty/MimicLite 是项目入口:
| 仓库 | 负责 | 运行在 |
|---|---|---|
| mimic-lite | 跟踪任务、奖励、训练算法、查看与导出 | 训练机 |
| active-adaptation | 仿真后端(mjlab / IsaacLab)、分布式启动、环境基础设施 | 训练机 |
| any4hdmi | 动作数据的格式、转换、检查与可视化 | 任意电脑 |
| sim2real | ONNX 推理、MuJoCo 仿真验证、PICO 遥操作、实机部署、跨代码库评测 | 工作站或机器人机载计算单元 |
1.3 发布的模型#
| 模型 | Actor 网络 | 并行环境 | 训练流程 | GPU 小时 | 部署配置(sim2real) |
|---|---|---|---|---|---|
| MimicLite-PPO | 3 层 × 1024 | 16 × 16384 | PPO | 92.3 | checkpoints/mimic-lite/ppo/policy.yaml |
| MimicLite-ROA | 3 层 × 1024 | 16 × 16384 | 教师 → 适配 → 微调 | 173.2 | checkpoints/mimic-lite/roa/policy.yaml |
| MimicLite v1.1 | 3 层 × 512 | 8 × 8192 | 教师 → 适配 → 微调 | 50.1 | checkpoints/mimic-lite/v1_1/policy.yaml |
三个模型都只需要 0.08 秒的未来参考动作,适合低延迟遥操作。部署用的 ONNX 和 YAML 在共享的 sim2real artifacts 中。各模型的评测结果见跟踪排行榜。
1.4 系统要求#
| 项目 | 训练 | 部署 |
|---|---|---|
| 操作系统 | Linux | 工作站(x86_64 Linux),或机器人机载计算单元 |
| GPU | NVIDIA GPU;示例使用 8 卡(RTX 4090) | 可选;推理默认用 CPU |
| 环境管理 | uv | uv |
| 仿真 | mjlab(默认)或 IsaacLab | MuJoCo |
| 账号 | W&B(记录训练和保存模型)、Hugging Face(下载数据) | — |
| 遥操作 | — | PICO 头显和腿部追踪器、XRoboToolkit |
1.5 安装训练环境#
active-adaptation 和 mimic-lite 需要分别克隆,mimic-lite 放在 active-adaptation 的 projects/ 下:
git clone https://github.com/Agent-3154/active-adaptation.git
cd active-adaptation
git clone https://github.com/EGalahad/mimic-lite projects/mimic-lite为每种仿真后端建一个独立的环境:
# mjlab(默认后端)
mkdir -p venv/mjlab
cp projects/mimic-lite/pyproject-mjlab.toml venv/mjlab/pyproject.toml
uv sync --project venv/mjlab
# IsaacLab(可选)
mkdir -p venv/isaaclab
cp projects/mimic-lite/pyproject-isaaclab.toml venv/isaaclab/pyproject.toml
uv sync --project venv/isaaclab启用 MimicLite 并确认任务已注册:
uv --project venv/mjlab run aa-discover-projects
uv --project venv/mjlab run aa-project enable mimic_lite
uv --project venv/mjlab run aa-list-tasks设置账号:
export WANDB_API_KEY=<your_wandb_api_key>
export HF_TOKEN=<your_huggingface_token>注意
mjlab 训练报错缺少
mujoco.mjtEnableBit.mjENBL_MULTICCD时,说明环境装了mujoco>=3.8。运行uv --project venv/mjlab add 'mujoco<3.8'后重新同步。IsaacLab 可能误用 Isaac Sim 自带的 Warp,而不是环境中安装的
warp-lang。出现这种情况时,按 mimic-lite README 的 Troubleshooting 一节清除缓存。
1.6 安装部署环境并运行发布的模型#
在工作站上:
git clone https://github.com/EGalahad/sim2real
cd sim2real
uv sync --extra inference-cpu从共享的 sim2real artifacts 下载 checkpoints/ 和 third_party/,放到仓库根目录:
sim2real/
├── checkpoints/ # 各策略的 policy.yaml 和 policy.onnx
└── third_party/
├── wheels/ # 部署用的 wheel
└── prebuilt/ # 非 Python 的预编译包在 MuJoCo 中运行 MimicLite v1.1。终端 A:
uv run sim2real/sim_env/base_sim.py终端 B:
uv run sim2real/rl_policy/tracking.py \
--policy-config checkpoints/mimic-lite/v1_1/policy.yaml两个进程都启动后,在策略终端按 ] 开始跟踪,再打开 base_sim.py 打印出的 mjviser 网址查看。
检查推理速度:
uv run scripts/test_policy_inference.py \
--policy_config checkpoints/mimic-lite/roa/policy.yaml \
--inference_backend onnx-cpu2. 动作数据#
本节准备训练用的动作数据。MimicLite 使用 any4hdmi 定义的统一格式,数据转换和检查由 any4hdmi 仓库完成。
2.1 数据格式#
一个 any4hdmi 数据集包括:
<数据集>/
├── manifest.json # 数据集信息:帧间隔、机器人模型(MJCF)的 Hugging Face 引用等
└── motions/**/*.npz # 每段动作一个文件,只存机器人的广义坐标 qpos身体各部位的位置和姿态都可以由 qpos 和机器人模型算出,不必重复存储。训练时第一次加载会统一做一次正运动学并缓存。
2.2 使用现成的数据集#
已转换好的数据集在 any4hdmi Hugging Face 合集 中,包括 LAFAN、100STYLE、AMASS 高难度子集、地面动作、高动态动作、PICO 实采数据等。训练配置可以直接用 hf:// 路径引用它们,不需要下载到本地。
注意 SONIC 使用的 BONES-SEED 数据受许可证限制,不能再分发。需要从原始来源获取,再用 any4hdmi 转换。
2.3 转换数据#
在 any4hdmi 仓库中运行:
# LAFAN(机器人重映射版)
uv run any4hdmi-convert-lafan \
--csv-dir <重映射后的 LAFAN CSV 目录> \
--out-dir output/lafan
# SONIC(BONES-SEED)
uv run any4hdmi-convert-sonic \
--csv-dir <BONES-SEED 的 CSV 目录> \
--out-dir output/sonic
# 100STYLE
uv run any4hdmi-convert-axellwppr \
--input /path/to/100style.tar \
--out-dir output/100style需要使用其他机器人模型时,用 --mjcf-repo、--mjcf-path、--mjcf-revision 指定 Hugging Face 上的 MJCF。
2.4 检查和回放#
# 在 MuJoCo 中回放一段动作
uv run any4hdmi-view --motion output/lafan/motions/dance1_subject2.npz
# 无界面检查
uv run any4hdmi-view --motion output/sonic/motions/<路径>.npz --headless转换好的数据集可以用 uv run any4hdmi-upload <本地目录> <HF 仓库名> 上传到 Hugging Face。
2.5 录制自己的动作#
用 PICO 实时采集并重映射到机器人上的动作,可以直接录成 any4hdmi 数据集(需要先按 5.4 节配置 PICO):
# sim2real 仓库中,先启动 PICO 重映射
uv run --project venv/pico sim2real/teleop/pico_retarget_pub.py
# 另开终端录制,Ctrl-C 结束
uv run scripts/record_motion.py输出目录形如 <机器人>_motion_YYYYMMDD_HHMMSS/,包含 manifest.json 和 motions/motion.npz。
2.6 在训练配置中引用数据#
训练用的数据组合写在 mimic-lite 的 cfg/task/motion/ 下,例如 <机器人>/lafan.yaml、<机器人>/mixture.yaml。每个数据源可以设置:
| 字段 | 作用 |
|---|---|
path |
本地目录或 hf:// 路径 |
weight |
采样权重 |
full_motion |
是否使用完整动作 |
filenames_path |
只使用列表中的动作 |
shard |
多卡训练时,把数据切成分片,每张 GPU 只加载一份 |
注意 默认的混合配置中,部分数据源(例如 SONIC、LAFAN)指向
../any4hdmi/output/下的本地目录。使用前请先按 2.3 节转换,或把路径改成对应的hf://数据集。
3. 训练#
本节训练跟踪策略。所有命令都在 active-adaptation 仓库根目录运行。命令中的 <机器人> 表示 cfg/task/motion/ 下的机器人目录。
3.1 PPO#
单阶段 PPO,8 卡训练:
bash scripts/launch_ddp.sh 0,1,2,3,4,5,6,7 projects/mimic-lite/scripts/train.py venv/mjlab \
task=tracking-base task/motion=<机器人>/mixture +exp=ppo/train \
algo/ppo/module=huge backend=mjlablaunch_ddp.sh 的参数依次为:GPU 编号、训练脚本、仿真后端环境,之后是 Hydra 配置覆盖项。
3.2 PPO-ROA(教师 → 适配 → 微调)#
PPO-ROA 分三个阶段依次运行:先用特权信息和更长的未来参考训练教师,再让只用可部署输入的学生拟合教师,最后用 PPO 直接微调学生。
CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 \
uv --project venv/mjlab run \
projects/mimic-lite/scripts/train_sequential.py \
task/motion=<机器人>/mixture \
+task/patches=teacher_future_t16 \
algo/ppo_roa/module=huge \
task.num_envs=8192+task/patches=teacher_future_t16让教师看到 16 帧(0.32 秒)的未来参考;学生仍只看 0.08 秒。显存不足时,追加
task.command.diff_future_steps=[0,1]。三个阶段的划分写在
cfg/stages/中,默认为normal;v1.1 使用的是cfg/stages/v1_1.yaml(4000 / 1000 / 2000 次更新)。
3.3 常用配置项#
| 配置项 | 可选值 | 作用 |
|---|---|---|
task= |
tracking-base 等 |
跟踪任务,按机器人选择 |
task/motion= |
<机器人>/mixture、<机器人>/lafan 等 |
训练数据组合(见 2.6 节) |
+exp= |
ppo/train、ppo_roa/train 等 |
实验预设 |
algo/ppo/module=、algo/ppo_roa/module= |
small、base、large、huge |
网络规模 |
backend= |
mjlab、isaaclab |
仿真后端,默认 mjlab |
task.num_envs= |
例如 8192 |
每张 GPU 的并行环境数 |
wandb.mode= |
online、disabled |
本地调试时可设为 disabled |
3.4 训练输出#
运行目录在
./outputs/<日期>/<时间>-<任务名>-<算法名>/。默认每 500 次更新保存一次模型,并上传到 W&B。
之后可以用
checkpoint_path=run:<entity>/mimic_lite/<run_id>直接引用 W&B 上的模型。
4. 查看 & 导出#
本节在仿真中查看训练好的策略,并导出 sim2real 可以直接使用的 ONNX 和 YAML。
4.1 查看策略#
查看一个 PPO 模型:
uv --project venv/mjlab run projects/mimic-lite/scripts/play.py \
task=tracking-base task/motion=<机器人>/lafan \
+exp=ppo/train algo/ppo/module=huge \
task.num_envs=4 task.termination.root_pos_error.enabled=false \
checkpoint_path=run:<entity>/mimic_lite/<run_id>只查看 PPO-ROA 微调后的学生:
uv --project venv/mjlab run projects/mimic-lite/scripts/play.py \
task/motion=<机器人>/lafan \
+task/patches=teacher_future_t16 \
+exp=ppo_roa/finetune algo/ppo_roa/module=huge \
task.num_envs=1 task.termination.root_pos_error.enabled=false \
checkpoint_path=run:<entity>/mimic_lite/<run_id>查看时关闭根部漂移截断(root_pos_error.enabled=false),可以连续观察长动作。把 checkpoint_path 中的 <entity> 和 <run_id> 换成自己的 W&B 运行,即可查看自己训练的模型。
4.2 导出部署文件#
在查看命令后追加 export_policy=true;只导出、不打开仿真时,再加 export_only=true。
导出的文件在 mimic-lite 的 scripts/exports/<任务名>/ 下,文件名为 policy-<run_id>-<checkpoint 编号>:
| 文件 | 内容 |
|---|---|
.onnx |
部署用的策略 |
.yaml |
部署配置:观测项、关节和身体顺序、PD 增益、默认姿态、动作缩放、未来参考帧等 |
sim2real 会自动加载与 YAML 同名的 ONNX,所以导出的这对文件可以直接作为 --policy-config 使用(见第 5 节)。
注意 ONNX 和 YAML 必须来自同一次导出,配套使用。
4.3 批量评估#
scripts/eval.py 用于定量评估:默认无界面运行 512 个并行环境、1000 步,输出可供后续统计的 TensorDict。跨代码库的统一评测见第 6 节。
5. Sim2Sim & Sim2Real#
本节使用 sim2real 仓库,在 MuJoCo 中验证策略,部署到实机,并用 PICO 遥操作。
5.1 运行方式#
sim2real 把策略和执行端分开:策略进程读取机器人状态、运行 ONNX、发出关节指令;执行端在仿真中是 MuJoCo,在实机上是机器人本体。
| 环境 | 用途 |
|---|---|
| 根项目(仓库根目录) | 策略推理、MuJoCo 仿真、机器人通信 |
venv/pico |
PICO 重映射、动作录制 |
支持两种硬件布局:工作站通过网线控制机器人,或全部程序在机器人的机载计算单元上运行。
控制方式:
| 动作 | 键盘 | PICO |
|---|---|---|
| 进入初始姿态 | i |
A |
| 启用策略 | ] |
A + B |
| 停止策略,保持当前关节位置 | o |
B |
| 暂停 / 继续参考动作 | 空格 | X(开始) |
控制方式由 --controller keyboard|joystick|pico 选择,默认键盘。joystick 为机器人遥控器,按键映射见 sim2real 文档。
5.2 Sim2Sim:跟踪离线动作#
终端 A,启动 MuJoCo,它会打印 mjviser 网址:
uv run sim2real/sim_env/base_sim.py终端 B,启动策略:
uv run sim2real/rl_policy/tracking.py \
--policy-config checkpoints/mimic-lite/roa/policy.yaml \
--motion-path <动作路径><动作路径> 是 any4hdmi 数据集中的一段动作,可以是本地 .npz,也可以是 hf:// 路径。
在策略终端按 ] 开始。可以在 mjviser 界面中开关虚拟吊架(Elastic Band)并调整长度。
单进程运行: 策略和 MuJoCo 也可以在同一个进程中运行。它会把机器人放到动作第一帧,等待 5 秒后开始跟踪,结束后保持最后一帧:
uv run sim2real/sim_env/integrated_sim2sim.py \
--policy-config checkpoints/mimic-lite/roa/policy.yaml \
--motion-path <动作路径>加 --headless 可以无界面运行;加 --trajectory-output <路径>.npz 可以保存轨迹,再用 scripts/tracking_experiment/ 下的脚本计算跟踪指标。
5.3 Sim2Real:部署到实机#
安装机器人依赖:
uv sync --extra inference-cpu --extra <机器人通信 extra>
# 机载计算单元使用 GPU 推理时:
uv sync --extra inference-gpu --extra <机器人通信 extra><机器人通信 extra> 的名称见 sim2real 文档的 Root Project 一节。
如果安装时报 Could not locate cyclonedds,需要先编译安装 CycloneDDS(0.10.x),并设置 CYCLONEDDS_HOME,步骤见 sim2real 文档的 Root Project 一节。
选择机器人通信方式:
| 方式 | 进程 | 适用 |
|---|---|---|
--robot-io inline |
只有策略 | 推荐的实机方式,延迟最稳定 |
--robot-io zmq + Python 桥接脚本 |
策略 + Python 桥接 | 需要把策略和机器人通信分成两个进程调试时 |
--robot-io zmq + C++ 绑定桥接脚本 |
策略 + C++ 绑定桥接 | 同上,桥接使用 C++ 底层控制绑定 |
两种桥接脚本见 sim2real 文档的 Robot I/O 一节。
推荐的 inline 方式:
uv run sim2real/rl_policy/tracking.py \
--robot-io inline \
--policy-config checkpoints/mimic-lite/roa/policy.yaml \
--motion-path <动作路径>机器人网卡不是 eth0 时,加 --robot-interface <网卡名>。
提示 实机上如果关节剧烈抖动,或高动态动作的效果明显变差,先怀疑 ZMQ 通信延迟不稳定,改用
--robot-io inline再试,不要急着调策略或增益。
网络布局:
网线连接: 程序都在笔记本上运行,笔记本通过网线连机器人,通过实验室 Wi-Fi 连 PICO。
机载运行: 程序都在机器人的机载计算单元上运行,机器人、笔记本和 PICO 都连实验室 Wi-Fi,笔记本只用于 SSH 操作。
在机器人上运行时,建议设置 HF_HUB_OFFLINE=1 和 HF_HUB_DISABLE_TELEMETRY=1,避免程序尝试联网。
5.4 PICO 遥操作#
准备遥操作环境(工作站):
安装
venv/pico:uv sync --project venv/pico安装 XRoboToolkit PC Service 的
.deb,并编译安装xrobotoolkit_sdk(步骤见 sim2real 文档的 Teleop Project 一节)。戴上腿部追踪器,完成全身追踪校准,在 XRoboToolkit 中连接工作站并开启全身数据流。
在机器人的机载计算单元上运行遥操作的配置,见 sim2real 文档 Teleop Project 中的机载(Onboard)部分。
运行:
# 终端 A:PICO 动作实时重映射成机器人动作,并打开 mjviser 查看
uv run --project venv/pico sim2real/teleop/pico_retarget_pub.py
# 终端 B(仅仿真时需要):MuJoCo
uv run sim2real/sim_env/base_sim.py
# 终端 C:策略,跟随实时动作流
uv run sim2real/rl_policy/tracking.py \
--policy-config checkpoints/mimic-lite/roa/policy.yaml \
--motion-backend zmq \
--controller pico先在终端 A 的 mjviser 中确认重映射后的机器人动作正常。实机上,去掉终端 B,并按 5.3 节加上 --robot-io inline。
PICO 上的操作:按 A 进入初始姿态,按 A + B 启用策略,按 X 开始跟随动作流。重映射和策略在不同电脑上运行时,给策略加 --motion-zmq-connect tcp://<重映射电脑 IP>:28701。
提示 sim2real 还支持用 PICO 扳机控制 DH116S 灵巧手,详见 sim2real 文档。
6. 评测#
本节在统一协议下评测策略,并介绍如何运行或接入其他代码库训练的策略。
6.1 跨代码库统一评测#
跟踪排行榜 使用 ChingMu 的 MotionDecode 数据中冻结的四个子集,所有策略在同一套 MuJoCo 环境中、用 CPU ONNX Runtime 运行:
| 子集 | 动作数 | 角色 |
|---|---|---|
| Locomotion-80 | 80 | 主要;包含全局根部跟踪 |
| Manipulation-48 | 48 | 主要;身体和手腕跟踪 |
| Ground-60 | 60 | 次要 |
| Dance-40 | 40 | 次要 |
评测自己的策略:
uv run scripts/tracking_experiment/run_motiondecode_eval.py \
--download \
--policy my_policy=checkpoints/my_policy/policy.yaml \
--output-dir outputs/my_policy_motiondecode \
--max-workers 8默认评测 Locomotion-80 和 Manipulation-48;加
--splits locomotion manipulation ground dance评测全部四个子集。重复
--policy 名称=路径可以一次比较多个策略。数据缓存在
datasets/motiondecode,脚本会校验每个文件;--dry-run只下载和校验数据,不运行仿真。每个子集输出轨迹、
runs.csv、tracking_metrics.csv/json和summary.json。
评测协议要点:
骨盆高度误差超过 0.3 m,或重力方向误差超过 0.8,判为失败;不按根部位置判失败。
完成度(Progress)和跟踪回报(Tracking Return)都在失败帧截止;误差只统计失败前的帧,所以要和完成度一起看。
全局根部误差只在 Locomotion 上报告。
这些数据只用于评测,不要重新采样,也不要用于其他机器人。
6.2 运行其他代码库的策略#
sim2real 已把多种外部策略转换成同样的部署格式,只需替换 --policy-config:
| 策略 | 部署配置 |
|---|---|
| HEFT | checkpoints/heft/pmg/policy.yaml 等 |
| SONIC | checkpoints/sonic/release/.../policy.yaml 等 |
| HoloMotion v1.4.0 | checkpoints/holomotion/v1_4_0/policy.yaml(需另外下载官方 ONNX) |
| ScaleBFM | checkpoints/scalebfm/humanoid_transformer_xl/policy.yaml 等 |
| BFM-Zero | checkpoints/bfm-zero/exp_lafan40-100style_update_z10/policy.yaml(需要专用 MJCF,建议 GPU 推理) |
| TeleopIT、Humanoid-GPT、TWIST2 | checkpoints/<名称>/policy.yaml |
完整列表和各策略的特殊要求(例如 SONIC SMPL 模式需要单独的动作源),见 sim2real 文档的 Run External Policies 一节。
6.3 接入自己的策略#
只有一个 ONNX 文件是不够的:观测的构造、关节顺序、PD 增益和动作缩放都必须与训练时一致。接入新策略需要:
导出 ONNX;
实现对应的观测类,并编写部署 YAML;
在 Sim2Sim 中验证。
sim2real 仓库内置了一个 Codex skill(.agents/skills/adapt-policy-to-sim2real),可以按步骤完成以上工作。MimicLite 自己训练的模型用 4.2 节导出即可,不需要这一步。