1. 训练流程与适用范围#
本教程沿着“环境准备 → 模型与数据 → 任务配置 → 策略训练”的顺序,介绍 RP1 的强化学习训练流程。各章节使用配套的模型、任务和策略配置;训练完成后,继续阅读评估与仿真,完成策略导出、MuJoCo Sim2Sim 验证与部署交付。
速度指令任务使用 RP1.3-Flat / RP1.3-Rough,参考动作跟踪使用 RP1.3-BeyondMimic。先确定目标任务,再准备对应输入,并核对身体动作数、观测与历史布局,避免混用不同路径的模型或策略。
| 阶段 | 阅读位置 | 完成后应保留 |
|---|---|---|
| 准备环境与输入 | 环境准备、模型与动作数据 | 软件版本、模型资产、参考数据与来源 |
| 定义训练任务 | 任务配置、策略输入输出 | Task ID、机器人与 Agent 配置、观测和动作约定 |
| 训练与回放 | 训练与续训、BeyondMimic 动作跟踪 | 训练日志、配置、checkpoint 与参考动作 |
已有策略时,可以从策略输入输出和评估与仿真开始核对,再进入部署。平台与方法的关系见PartyOS 总览。
2. 训练环境与配置覆盖#
使用RP1_train完成Isaac Lab训练、策略回放与导出,再通过MuJoCo Sim2Sim检查迁移,最后核对机器人推理端配置。
环境基线#
| 项目 | 固定来源中的要求 |
|---|---|
| Python | 3.11 |
| Isaac Sim | 5.1.0 |
| Isaac Lab | 2.3.2 |
| 操作系统 | Ubuntu 22.04 x64 或 Windows x64 |
| RoboLab包元数据 | 1.0.0 |
| RSL-RL包元数据 | 3.3.0 |
按上述版本准备Isaac环境,并核对CUDA、显卡驱动与PyTorch的配套要求。Python依赖以 robolab/setup.py 和 rsl_rl/pyproject.toml 为准。
获取与安装#
将RP1_train放在Isaac Lab源码树之外,在Isaac Lab使用的Python环境中操作:
git clone https://github.com/Roboparty/RP1_train.git
cd RP1_train
git checkout --detach 613193a725b557bf9ea397431c46c32c9d9e3084
python -m pip install -e ./robolab
python -m pip install -e ./rsl_rlrobolab/ 与 rsl_rl/ 是源码目录。任务批量导入可能引用RPO资产子模块;遇到资产缺失时,按异常中的实际路径排查。
检查RP1.3任务时,查看其注册与配置。list_envs.py 会启动Isaac Sim且仅筛选RPO名称。任务定义见 任务与机器人配置。
24与28的覆盖#
| 环节 | 24动作 | 28动作 |
|---|---|---|
| URDF/MJCF模型 | 存在 | 存在 |
| 专用训练task/agent | RP1.3-Flat、RP1.3-Rough |
待补28任务与agent |
| 专用Sim2Sim入口 | 24动作脚本 | 待补28入口 |
| deploy配置 | rp1_24dof |
rp1 |
| deploy默认策略 | 策略路径存在;使用前核对权重 | 引用的 policy.onnx 缺失 |
28链路还需要对应任务、奖励、观测、动作映射与策略;30/42训练链路暂不可用。
3. 模型与动作数据准备#
先确定目标任务和身体配置,再准备机器人资产与数据。Flat/Rough 速度任务与 BeyondMimic 动作跟踪任务使用不同输入;参考动作视频不能直接替代训练所需的动作数据。
选择训练路径#
固定模型与关节定义#
准备并保留同一来源的 URDF / MJCF、网格、关节名称与顺序、默认姿态、执行器配置和碰撞设置。头部、手部或身体轴数变化后,需要相应任务、观测和动作定义。
固定训练源码为 RP1_train@613193a725b5。
动作跟踪数据#
BeyondMimic 的加载器读取以下 NPZ 字段。自备参考动作时,数据必须与目标模型、跟踪部位和任务时间定义对应。
| 字段 | 内容 |
|---|---|
fps |
动作数据的采样频率 |
joint_pos、joint_vel |
参考关节位置与速度;RP1.3 使用 24 轴关节集合 |
body_pos_w、body_quat_w |
参考身体在世界坐标中的位置与姿态 |
body_lin_vel_w、body_ang_vel_w |
参考身体在世界坐标中的线速度与角速度 |
核对字段维度、身体顺序、单位、坐标、四元数约定和有效帧数。参考 FPS 与控制或策略频率分别登记;重采样后的速度需与位置和时间一致。
使用人体或其他机器人动作时,可通过 hhtools 的 H2R / R2R 工作流适配目标身体,再检查关节限位、接触和动作连续性。重定向后能够可视化的动作,还需要在目标训练任务中验证动态可跟踪性。
留下可复用的输入#
4. 任务与机器人配置#
RP1.3训练注册在 robolab/robolab/tasks/direct/base/__init__.py,两条任务均使用 BaseEnv 直接环境。修改任务时需要同时追踪机器人资产、环境配置、agent配置和观测定义。
任务入口#
| Task ID | 环境配置 | Agent配置 | Experiment |
|---|---|---|---|
RP1.3-Flat |
RP1_3FlatEnvCfg |
RP1_3FlatAgentCfg |
rp1.3_flat |
RP1.3-Rough |
RP1_3RoughEnvCfg |
RP1_3RoughAgentCfg |
rp1.3_rough |
配置文件分别是 rp1_3_env_cfg.py 和 agents/rp1_3_agent_cfg.py。机器人定义 RP1_3_CFG 位于 robolab/robolab/assets/robots/roboparty.py,指向 rp1.3/urdf/rp1_24dof.urdf。
配置值与语义#
| 字段 | Flat | Rough |
|---|---|---|
action_space |
24 | 继承24 |
observation_space |
单帧81 | 继承81 |
state_space |
144 | 331 |
| 高度扫描 | 关闭 | 开启 |
action_scale |
0.25 | 继承0.25 |
这些值用于24动作训练配置。硬件行程与安全限值按对应机器规格确认;actor单帧输入与历史缓冲的关系见 策略输入输出。
资源必须随来源保留#
训练仓库的 rp1_flat.xml、rp1_rough.xml 都引用 robot_24dof.xml。RP1_description中同名场景引用 robot.xml,即28运动关节模型;两个仓库的部分mesh也不同。
训练使用RP1_train对应版本的URDF、MJCF与mesh;更换模型时同时核对关节定义、几何、惯性和映射。
扩展为28任务需要的定义#
建立独立的28动作任务前,需要对应的task注册、机器人与执行器配置、动作/观测维度、奖励与终止条件、agent配置、关节顺序、历史缓冲和Sim2Sim映射。这些定义应作为独立配置配套维护。
5. 策略输入输出与归一化#
部署前逐项匹配输入尺寸、字段、历史顺序、坐标、归一化与关节映射。
先选择策略路径#
| 路径 | 身体动作数 | 单帧观测 | 历史与最终输入 | 对应入口 |
|---|---|---|---|---|
| RP1.3 Flat / Rough 训练 | 24 | 81 | 3 帧,243 维 | BaseEnv;RP1.3 速度任务 |
| 24 轴默认部署 | 24 | 81 | 3 帧,243 维;obs_major |
rp1_24dof/configs/default.yaml |
| RP1.3 BeyondMimic | 24 | 126 | 1 帧,126 维 | 动作跟踪任务、BM Sim2Sim;24 轴部署配置中的动作跟踪分支 |
| 28 轴默认部署 | 28 | 93 | 10 帧,930 维;frame_major |
rp1/configs/default.yaml |
尺寸一致还需要核对字段、顺序和语义;243 维训练与默认部署的历史排列也可能不同。24 轴 BeyondMimic 与默认 28 轴策略具有不同身体集合和输入定义,不能直接互换。
rp1_24dof/configs/beyondmimic.yaml 同时列出默认速度策略与动作跟踪策略:前者为 243 维,后者为 126 维,并引用 policy_dance1.onnx 与 dance1.npz。按选中的策略分支检查实际导出文件,不能只按 YAML 文件名推断输入。
Flat / Rough:24 动作单帧观测#
BaseEnv按以下顺序拼接单帧输入:
| 顺序 | 字段 | 维度 | 含义 |
|---|---|---|---|
| 1 | 角速度 | 3 | 机身角速度 |
| 2 | 重力投影 | 3 | 机身坐标中的重力方向 |
| 3 | 速度指令 | 3 | 任务速度指令 |
| 4 | 关节位置偏移 | 24 | 相对默认姿态的位置 |
| 5 | 关节速度偏移 | 24 | 相对默认速度的速度 |
| 6 | 上一动作 | 24 | 上一步策略动作 |
单帧合计81。该配置使用3帧历史,最终actor输入243元素。训练环境先更新CircularBuffer再展平,历史方向按使用的Isaac Lab版本确认。
观测缩放与裁剪见 base_config.py;动作先裁剪,再乘 action_scale 并加默认关节位置。分别记录数值缩放、统计normalizer和关节顺序。
BeyondMimic:参考动作与本体状态#
RP1.3 动作跟踪的 Actor 按以下顺序组合单帧观测:
| 字段 | 维度 |
|---|---|
参考关节位置与速度 motion_command |
48(24 + 24) |
| 机身角速度 | 3 |
| 重力投影 | 3 |
| 关节位置偏移 | 24 |
| 关节速度偏移 | 24 |
| 上一动作 | 24 |
合计 126 维输入、24 维输出,使用一帧历史。参考动作、模型、跟踪锚点和时间定义随策略保留,见动作跟踪配置与BM Sim2Sim 入口。
历史堆叠的两种布局#
用A、B代表两个观测字段,0、1代表从旧到新的两帧:
frame_major:A0, B0, A1, B1
obs_major: A0, A1, B0, B1真实字段是向量,这个例子只说明排列方式。
| 项目 | 24 Sim2Sim | 24 deploy default |
|---|---|---|
| 历史布局 | frame_major,3帧,从旧到新追加 | obs_major,3帧;按字段分块,各字段内从旧到新 |
| 策略格式 | TorchScript | ONNX |
| 策略到模型顺序 | 非恒等policy→MuJoCo置换 | usd2urdf为0..23恒等 |
dt / decimation |
0.005 / 4 | 0.004 / 5 |
两套配置的策略周期均为20ms,仿真/控制基础步分别为5ms与4ms;实际运行周期另行测量。部署端继续通过 urdf2motor 和闭链变换映射到电机,分别核对每层索引。
使用新导出策略时,先确认其历史布局与映射,再匹配部署配置。已有策略沿用其对应的训练与导出定义。
记录每个策略的I/O约定#
- checkpoint、导出文件、训练配置和部署配置的固定版本/哈希。
- ONNX实际输入输出名称、shape、dtype、batch、opset及外部数据。
- 字段顺序、坐标系、单位、默认姿态、缩放与裁剪。
- 历史长度、布局、从旧到新的方向、首帧填充与重置方式。
- 统计normalizer的值及其嵌入/外置处理方式。
- 策略顺序→模型顺序→电机顺序、符号、零位与闭链转换。
- 推理/控制时间配置和动作后的处理。
部署端要求单输入并检查输入元素数;其余语义按上述清单逐项核对。28 default使用10帧、frame_major和28维映射,需要独立I/O约定。
6. 训练与续训#
训练入口为 robolab/scripts/rsl_rl/train.py。它启动Isaac Sim、加载任务与agent配置,再调用runner训练;请先完成 环境准备。
不同训练轮数的状态#
环境链路检查#
从RP1_train根目录、匹配的Isaac Lab Python环境执行:
python robolab/scripts/rsl_rl/train.py \
--task=RP1.3-Flat --headless --logger=tensorboard \
--num_envs=1 --max_iterations=1使用1个环境、1次迭代检查加载与训练链路。正式实验另行设置并行规模与迭代数;这次检查产出的策略仅用于链路检查。
CLI参数#
| 参数 | 用途 |
|---|---|
--task |
Task ID |
--num_envs |
覆盖并行环境数 |
--max_iterations |
覆盖学习迭代数 |
--seed |
随机种子 |
--run_name |
新日志目录的名称后缀 |
--logger |
tensorboard / wandb / neptune |
--resume |
从历史checkpoint恢复 |
--load_run |
匹配历史run名称 |
--checkpoint |
匹配历史checkpoint文件名 |
每次实验记录并行规模、迭代数、种子与运行条件。
恢复已有训练#
先将 RP1_RUN_PATTERN 与 RP1_CHECKPOINT_PATTERN 设置为匹配已有run与文件的正则表达式,然后执行:
python robolab/scripts/rsl_rl/train.py \
--task=RP1.3-Flat --headless --logger=tensorboard --resume \
--load_run "$RP1_RUN_PATTERN" --checkpoint "$RP1_CHECKPOINT_PATTERN"训练入口使用 re.match 搜索历史目录和文件。训练的 --checkpoint 使用匹配表达式,play的同名参数使用明确文件路径。使用足够精确的表达式,并检查启动输出解析出的checkpoint,避免加载另一个实验。
恢复查找发生在创建新日志目录之前。匹配run按修改时间选择,空run会跳过。runner保存并恢复模型、优化器、迭代计数等状态;新日志写入新run目录,保留原run。
产物位置#
Flat日志根目录为 logs/rsl_rl/rp1.3_flat,Rough为 logs/rsl_rl/rp1.3_rough。每个run保存 params/env.yaml、params/agent.yaml 和checkpoint;runner按配置周期保存,并在结束时保存最终checkpoint。
继续查看 评估与导出。
7. 动作跟踪(BeyondMimic)#
BeyondMimic 使用参考动作中的身体位置、姿态与速度训练动作跟踪策略。RP1.3-BeyondMimic 采用 RP1.3 模型,默认参考动作为 rp1.3_bm/dance1.npz。
舞蹈动作演示#
RP1.3 任务配置#
| 配置项 | 值 |
|---|---|
| Task ID | RP1.3-BeyondMimic |
| 环境配置 | RP1_3BeyondMimicEnvCfg |
| 机器人配置 | RP1_3_CFG |
| 默认动作文件 | robolab/data/motions/rp1.3_bm/dance1.npz |
| 跟踪锚点 | waist_yaw_link |
训练入口为 robolab/scripts/rsl_rl/train.py,策略回放入口为 robolab/scripts/rsl_rl/play_bm.py。回放前核对 Task ID、机器人配置、动作文件及 checkpoint;动作跟踪策略的观测与指令约定需使用对应任务配置。
RPO-BeyondMimic 与 RPO-Getup-Mimic 是另外注册的 RPO 任务,使用各自的模型、动作与 agent 配置。不能直接替换为 RP1.3 的任务或策略。
从动作跟踪到部署#
- 在数据准备中固定 24 轴模型、参考动作、跟踪身体和时间定义。
- 使用
RP1.3-BeyondMimic训练与回放,保留 checkpoint、配置及对应参考动作。 - 核对126 维输入与 24 维输出,用BM MuJoCo 入口运行匹配的 TorchScript 策略。
- 接入实机时,使用配套的 ONNX 导出、动作参考和 24 轴部署配置,继续部署检查。
部署配置中的动作跟踪分支与默认速度分支分别匹配其权重和观测;默认 28 轴速度策略的历史输入不能替代这条动作跟踪路径。实机进入条件与回退规则见验收记录。