🤖 roboto_origin_03 Wiki
首页 / 项目根 / IsaacLab环境搭建与训练流程

本文档介绍ATOM01足式机器人基于NVIDIA IsaacLab的仿真强化学习环境搭建与训练工作流,涵盖从依赖安装、环境注册、训练启动到策略导出的完整操作路径。阅读本文前,建议先完成URDF运动学与动力学描述MuJoCo与Isaac Sim模型配置的相关配置,以确保机器人模型文件已就位。

Sources: README_CN.md

技术架构与组件关系

ATOM01的训练系统采用隔离式扩展架构:核心仿真引擎IsaacSim与IsaacLab作为底层依赖独立安装,项目代码(robolab环境与rsl_rl算法库)以独立仓库形式存在,通过Python包注册机制与IsaacLab解耦。这种设计避免了直接修改IsaacLab源码,降低了版本升级时的重构成本。

robolab负责任务环境定义(场景、奖励、观测、地形),rsl_rl负责策略优化(PPO、AMP、Distillation等算法)。两者通过gymnasium注册表与IsaacLabDirectRLEnv/ManagerBasedRLEnv接口衔接。

flowchart TB
    subgraph 上层工具层
        A[训练脚本 train.py]
        B[测试脚本 play.py]
        C[Sim2Sim脚本 sim2sim_atom01.py]
    end

    subgraph 算法层
        D[rsl_rl<br/>OnPolicyRunner / AMPRunner / DistillationRunner]
    end

    subgraph 环境层
        E[robolab.tasks.direct<br/>BaseEnv / AttnEncEnv / InterruptEnv]
        F[robolab.tasks.manager_based<br/>AmpEnv / BeyondMimicEnv]
    end

    subgraph 底层引擎层
        G[IsaacLab 2.3.2]
        H[IsaacSim 5.1.0]
    end

    A --> D
    B --> D
    D --> E
    D --> F
    E --> G
    F --> G
    G --> H

Direct RL EnvManager-Based RL Env是IsaacLab提供的两种环境范式。本项目中的基础运动(Locomotion)、注意力编码(AttnEnc)和中断恢复(Interrupt)采用DirectRLEnv实现,代码透明度高,便于精细控制物理步进与观测计算;AMP模仿学习与BeyondMimic多技能策略采用ManagerBasedRLEnv实现,利用IsaacLab的Manager系统模块化组合奖励、终止条件与命令生成器。

Sources: README_CN.md, init.py

前置条件与系统要求

在开始安装前,请确保软硬件环境满足以下最低要求。

组件 推荐版本 说明
Isaac Sim 5.1.0 NVIDIA物理仿真引擎
Isaac Lab 2.3.2 机器人学习框架
RSL_RL 3.3.0 策略优化算法库(项目内置fork)
Python 3.11 解释器版本
CUDA 兼容IsaacSim要求 训练依赖GPU加速
操作系统 Ubuntu 22.04 / Windows 64 Linux推荐用于完整功能

Sources: README_CN.md

环境安装步骤

安装遵循先底层后上层的顺序:先通过conda/pip部署IsaacLab,再将本项目作为独立扩展包安装。

flowchart LR
    A[安装IsaacLab<br/>conda环境] --> B[克隆 atom01_train<br/>仓库]
    B --> C[初始化子模块<br/>git submodule update]
    C --> D[安装 robolab<br/>pip install -e .]
    D --> E[安装 rsl_rl<br/>pip install -e .]
    E --> F[验证环境列表<br/>python list_envs.py]

步骤一:安装IsaacLab。按照IsaacLab官方文档完成conda安装。推荐使用conda方案,因为它简化了终端调用Python脚本的路径管理,并自动处理CUDAPyTorch版本对齐。

步骤二:克隆仓库(需在IsaacLab目录之外执行,保持隔离性):

git clone https://github.com/Roboparty/atom01_train.git
cd atom01_train
git submodule update --init --recursive

步骤三:安装robolab扩展包

cd robolab
pip install -e .

setup.py中声明了robolab的额外依赖,包括mujoco==3.3.3mujoco-python-viewerpsutiljoblibpynput,用于后续Sim2Sim验证与工具脚本。

Sources: setup.py

步骤四:安装rsl_rl算法库

cd ../rsl_rl
pip install -e .

该子模块基于ETH Zurich的rsl_rl进行扩展,pyproject.toml中指定了torch>=2.6.0tensordict>=0.7.0onnx等依赖,用于支持策略网络训练与导出。

Sources: pyproject.toml

步骤五:验证安装。运行以下命令打印所有已注册的ATOM01环境:

python robolab/scripts/tools/list_envs.py

若输出包含Atom01-FlatAtom01-Rough等任务名称,说明扩展包已正确挂载到gymnasium注册表。

Sources: list_envs.py

已注册环境总览

本项目通过gymnasium.register在导入robolab.tasks时自动注册以下环境。环境ID可直接作为--task参数传入训练脚本。

环境ID 范式 适用算法 地形类型 说明
Atom01-Flat DirectRLEnv PPO 平坦碎石 基础运动,平坦地形
Atom01-Rough DirectRLEnv PPO 崎岖地形 基础运动,崎岖地形
Atom01-AttnEnc DirectRLEnv PPO + AttnEnc 按配置 注意力编码感知策略
Atom01-Interrupt DirectRLEnv PPO / Distillation 按配置 中断恢复策略
Atom01-AMP ManagerBasedRLEnv AMP + PPO 按配置 模仿学习训练
Atom01-AMP-Play ManagerBasedRLEnv AMP + PPO 按配置 AMP测试专用配置
Atom01-BeyondMimic ManagerBasedRLEnv PPO 按配置 多技能注意力策略
Atom01-Getup-Mimic ManagerBasedRLEnv PPO 按配置 起身模仿策略

各环境的entry_point指向具体的环境类(如BaseEnvAmpEnv),env_cfg_entry_point指向配置类(如ATOM01FlatEnvCfg),rsl_rl_cfg_entry_point指向智能体配置类(如ATOM01FlatAgentCfg)。这种分离设计允许用户在不修改环境代码的情况下,通过Hydra配置或CLI参数覆盖超参数。

Sources: init.py, init.py, init.py, init.py, init.py

训练工作流

启动训练

Atom01-Flat环境为例,基础训练命令如下:

python robolab/scripts/rsl_rl/train.py \
    --task=Atom01-Flat \
    --headless \
    --logger=tensorboard \
    --num_envs=8192

train.py脚本的工作流程如下:

sequenceDiagram
    participant User
    participant train.py
    participant AppLauncher
    participant gym
    participant RslRlVecEnvWrapper
    participant Runner

    User->>train.py: 传入 --task 等参数
    train.py->>AppLauncher: 解析并启动IsaacSim
    AppLauncher-->>train.py: 返回 simulation_app
    train.py->>gym: gym.make(task, cfg=env_cfg)
    gym-->>train.py: 返回 IsaacLab 环境实例
    train.py->>RslRlVecEnvWrapper: 包装环境(动作裁剪)
    RslRlVecEnvWrapper-->>train.py: 返回 VecEnv
    train.py->>Runner: 实例化 OnPolicyRunner / AMPRunner
    Runner-->>train.py: 返回 runner
    train.py->>Runner: runner.learn(max_iterations)
    loop 每次迭代
        Runner->>RslRlVecEnvWrapper: env.step(actions)
        RslRlVecEnvWrapper->>gym: 执行物理仿真
        gym-->>RslRlVecEnvWrapper: 返回 obs, reward, done
        RslRlVecEnvWrapper-->>Runner: 返回转移数据
        Runner->>Runner: PPO/AMP 参数更新
    end
    Runner-->>train.py: 训练结束
    train.py->>AppLauncher: simulation_app.close()

Sources: train.py

关键CLI参数说明

参数 类型 默认值 说明
--task string None 环境ID,必填
--num_envs int 配置中定义 并行环境数,如4096、8192
--headless flag False 无GUI模式,服务器训练建议开启
--logger string None 日志后端:tensorboardwandbneptune
--max_iterations int 配置中定义 最大训练迭代数
--seed int None 随机种子,设为-1则随机采样
--distributed flag False 多GPU分布式训练
--resume flag False 从最近检查点恢复
--load_run string None 指定恢复的运行目录
--checkpoint string None 指定恢复的检查点文件名
--video flag False 录制训练过程视频
--video_interval int 2000 视频录制间隔(步数)

RSL-RL专用参数通过cli_args.py统一管理,支持覆盖实验名称(--experiment_name)、运行名后缀(--run_name)和日志项目名(--log_project_name)。

Sources: cli_args.py

算法Runner类型选择

train.py根据agent_cfg.class_name自动实例化对应的Runner:

实例化前,环境会被RslRlVecEnvWrapper包装,统一动作裁剪(clip_actions)并适配RSL-RL的VecEnv接口。

Sources: train.py

恢复训练与多GPU配置

恢复训练:添加--resume即可从logs/rsl_rl/<experiment_name>/下最近的检查点继续。也可通过--load_run--checkpoint精确定位。

多GPU训练:添加--distributed后,脚本会自动为每个进程分配独立的cuda:{local_rank}设备,并基于local_rank偏移随机种子,保证各进程探索多样性。注意多GPU训练不支持CPU设备(--device cpu),必须显式指定GPU。

Sources: train.py

策略验证与导出

Play模式

训练完成后,使用play.py加载策略进行可视化验证:

python robolab/scripts/rsl_rl/play.py \
    --task=Atom01-Flat \
    --num_envs=1

Play脚本支持以下附加选项:

Sources: play.py

模型导出

Play脚本内置策略导出功能。加载检查点后,脚本会自动将策略导出为Torch JIT.pt)和ONNX.onnx)两种格式,存放于检查点同级目录的exported/文件夹下。对于标准ActorCritic策略,调用export_policy_as_jitexport_policy_as_onnx完成导出;对于注意力编码策略(AttnEnc),脚本内嵌了TorchAttnEncPolicyExporterOnnxAttnEncPolicyExporter,将encoder与actor组装为统一的前向图,确保导出后的模型与Sim2Sim、部署阶段的输入输出维度一致。

导出的ONNX模型将在后续推理节点与ONNX策略部署章节中用于ROS2推理节点部署。

Sources: play.py

Sim2Sim验证(简要)

训练导出的.pt策略可通过MuJoCo进行Sim2Sim验证:

python robolab/scripts/mujoco/sim2sim_atom01.py \
    --load_model /path/to/exported/policy.pt

项目为不同算法准备了对应的Sim2Sim入口:sim2sim_atom01.py(基础)、sim2sim_atom01_amp.py(AMP)、sim2sim_atom01_attn_enc.py(注意力编码)、sim2sim_atom01_bm.py(BeyondMimic)、sim2sim_atom01_interrupt.py(中断恢复)。Sim2Sim的详细操作流程与验证指标请参见Sim2Sim迁移与MuJoCo验证

Sources: README_CN.md

数据集准备工具(AMP / BeyondMimic)

对于AMP和BeyondMimic训练,需要先准备动作数据集。项目提供scripts/tools/retarget/下的重定向工具链,将GMR(参考GMR仓库)生成的动作数据转换为IsaacLab可用的格式。由于GMR数据集的关节顺序与IsaacLab内部顺序不同,需事先准备关节映射YAML(如scripts/tools/retarget/config/atom01.yaml),然后运行dataset_retarget.py完成批量转换。

转换后的数据集存放在data/motions/目录下,按算法分子目录(atom01_gmratom01_labatom01_bm)。

Sources: README_CN.md

故障排查

现象 可能原因 解决方案
list_envs.py无ATOM01环境 robolab未安装或导入失败 确认在IsaacLab的Python环境中执行pip install -e robolab/
训练启动报RSL_RL_VERSION错误 rsl_rl版本低于3.0.1 在项目rsl_rl/目录下重新执行pip install -e .
多GPU训练报错 使用CPU设备或CUDA可见性配置错误 确保--device cuda,并检查CUDA_VISIBLE_DEVICES
导出ONNX维度不匹配 注意力编码策略未使用专用Exporter 使用play.py内置导出逻辑,勿直接调用通用ONNX导出
地形生成异常 高度扫描器配置与地形类型不匹配 检查env_cfgterrain_generatorheight_scanner的联动配置

下一步

完成环境搭建并成功运行基础训练后,建议按以下路径继续深入: