🤖 roboto_origin_03 Wiki
首页 / 训练 / 训练你的第一个策略

完成项目环境搭建并熟悉目录结构后,你现在可以启动第一条强化学习策略训练。本节以 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 指向环境配置类 ATOM01FlatEnvCfgrsl_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(或 AMPRunnerDistillationRunner),最后调用 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_runload_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>/ 目录。该目录包含:

Sources: train.py

下一步阅读建议

完成首次训练后,你可以继续阅读 策略测试与 Sim2Sim 部署,学习如何使用 play.py 加载训练好的模型进行推理,并导出 JIT/ONNX 模型用于 MuJoCo Sim2Sim。若想深入调优算法,可前往 PPO 核心算法与超参数On-Policy Runner 训练循环;若希望修改环境奖励或地形,请参阅 Direct RL 环境架构奖励函数与 MDP 设计