完成项目环境搭建并熟悉目录结构后,你现在可以启动第一条强化学习策略训练。本节以 Atom01-Flat 任务为例,带你从命令行出发,理解训练脚本如何自动解析环境配置与智能体配置、执行 On-Policy 训练循环,并产出日志与模型检查点。阅读完本页后,你将具备独立运行、监控和断点续训基础策略的能力。
Sources: train.py
前置条件
在继续之前,请确保你已完成以下两页的内容:
查看可用任务
运行以下命令可列出所有包含 Atom 关键字的已注册任务及其配置入口:
python robolab/scripts/tools/list_envs.py
该脚本通过导入 robolab.tasks 遍历 gymnasium 注册表,将任务名称、入口类与配置路径以表格形式输出,方便你在训练前确认可用的任务 ID。
Sources: list_envs.py
运行第一条训练命令
最基础的训练启动方式如下:
python robolab/scripts/rsl_rl/train.py --task Atom01-Flat --num_envs 4096 --headless
其中 --task 指定任务名称,--num_envs 控制并行环境数量,--headless 以无头模式启动 Isaac Sim(适合远程服务器)。若在本机调试,可去掉 --headless 以打开可视化窗口。脚本执行后,将先启动 Omniverse 应用,随后通过 Hydra 加载任务配置,进入主训练流程。
Sources: train.py
任务注册与配置自动加载
项目采用 gymnasium 注册表管理任务。以 Atom01-Flat 为例,在 robolab/tasks/direct/base/__init__.py 中通过 gym.register 将任务 ID 与环境类 BaseEnv 绑定,并声明了两个关键配置入口:env_cfg_entry_point 指向环境配置类 ATOM01FlatEnvCfg,rsl_rl_cfg_entry_point 指向智能体配置类 ATOM01FlatAgentCfg。训练脚本中的 hydra_task_config(args_cli.task, args_cli.agent) 装饰器会据此自动实例化对应配置对象,实现环境设计与算法参数的解耦。
Sources: init.py
配置分层解析
环境配置与智能体配置承担不同职责。环境配置(继承自 BaseEnvCfg)定义仿真场景、奖励函数、指令系统、观测噪声与随机化事件等 MDP 要素;智能体配置(继承自 BaseAgentCfg)则定义实验名称、训练迭代数、网络结构、PPO 超参数、日志方式等学习算法要素。下表对比了两者的核心字段:
| 维度 | 环境配置 (ATOM01FlatEnvCfg) |
智能体配置 (ATOM01FlatAgentCfg) |
|---|---|---|
| 父类 | BaseEnvCfg |
BaseAgentCfg |
| 关键字段 | scene_context, reward, commands, noise, events, observation_space, action_space |
experiment_name, max_iterations, num_steps_per_env, policy, algorithm, logger, save_interval |
| 典型作用 | 决定机器人在什么场景下如何获得奖励 | 决定网络多深、学习率多大、训练多久 |
Sources: base_config.py, atom01_env_cfg.py, atom01_agent_cfg.py
训练循环内部机制
当配置加载完毕,train.py 会先用 gym.make 创建环境,再使用 RslRlVecEnvWrapper 包装,接着根据 agent_cfg.class_name 选择并实例化 OnPolicyRunner(或 AMPRunner、DistillationRunner),最后调用 runner.learn() 进入主循环。以下 Mermaid 流程图展示了标准 On-Policy 训练的一次迭代:
flowchart TD
A[启动 Isaac Sim & 解析 CLI 参数] --> B[加载 env_cfg 与 agent_cfg]
B --> C[创建 VecEnv 并用 RslRlVecEnvWrapper 包装]
C --> D[实例化 OnPolicyRunner]
D --> E[获取初始观测 obs]
E --> F[for it in 0..max_iterations]
F --> G[Rollout: 每个环境执行 num_steps_per_env 步]
G --> H[算法采样动作 act<br/>环境 step<br/>存储 transition]
H --> I[计算 Returns 与 Advantages]
I --> J[PPO 更新: 多 epoch + mini-batch]
J --> K[记录日志 & 保存模型 checkpoint]
K --> F
在 OnPolicyRunner.learn() 内部,每次迭代先通过 torch.inference_mode() 执行 rollout 收集数据,随后调用 alg.compute_returns(obs) 计算回报,再执行 alg.update() 完成策略更新;日志与模型保存则按 save_interval 周期触发。
Sources: train.py, on_policy_runner.py
核心命令行参数速查
下表汇总了训练脚本中最常用的命令行参数,便于你在实验时快速调整:
| 参数 | 类型 | 示例 | 说明 |
|---|---|---|---|
--task |
str | Atom01-Flat |
任务 ID,对应 gym 注册名 |
--num_envs |
int | 4096 |
并行环境数量,覆盖配置中的默认值 |
--max_iterations |
int | 3000 |
训练总迭代数 |
--seed |
int | 42 |
随机种子;设为 -1 则随机采样 |
--headless |
flag | 无头模式(不启动可视化窗口) | |
--video |
flag | 训练过程录制视频 | |
--video_length |
int | 200 |
单次录制步数 |
--resume |
flag | 从最近 checkpoint 恢复训练 | |
--logger |
str | tensorboard / wandb |
日志后端 |
--experiment_name |
str | my_first_exp |
实验目录名 |
--run_name |
str | run_1 |
运行名称后缀 |
Sources: train.py, cli_args.py
断点续训与视频录制
若训练意外中断或需要延长训练,可在命令中加入 --resume,脚本会根据 agent_cfg.load_run 与 load_checkpoint 的正则规则自动解析最新的模型路径,并调用 runner.load(resume_path) 恢复网络参数与优化器状态。此外,添加 --video 会在 log_dir/videos/train 目录下按 video_interval 周期自动保存训练视频,便于直观检视策略表现。
Sources: train.py
日志与模型输出
训练开始后,所有实验数据默认写入 logs/rsl_rl/<experiment_name>/<YYYY-MM-DD_HH-MM-SS>_<run_name>/ 目录。该目录包含:
params/env.yaml与params/agent.yaml:运行时完整配置快照,便于复现实验;model_<it>.pt:按save_interval保存的 PyTorch 检查点;videos/train/:若启用--video则存放录制片段;- TensorBoard 或 WandB 日志文件:用于实时绘制奖励曲线、策略熵、学习率等指标。
Sources: train.py
下一步阅读建议
完成首次训练后,你可以继续阅读 策略测试与 Sim2Sim 部署,学习如何使用 play.py 加载训练好的模型进行推理,并导出 JIT/ONNX 模型用于 MuJoCo Sim2Sim。若想深入调优算法,可前往 PPO 核心算法与超参数 与 On-Policy Runner 训练循环;若希望修改环境奖励或地形,请参阅 Direct RL 环境架构 与 奖励函数与 MDP 设计。