一、train.py 代码结构与功能

train.py 是整个强化学习训练流程的入口脚本,代码简洁,主要负责初始化环境、训练器并启动训练过程。
参数解析环境初始化训练器初始化PPO 算法训练

二、训练过程详细说明

训练过程可分为参数解析环境初始化训练器初始化PPO 算法训练四个核心步骤,具体流程如下:

1. 命令行参数解析(get_args()

训练前首先通过 get_args() 函数(定义于 legged_gym/utils/helpers.py)解析命令行参数,核心参数包括:

  • --task:指定训练任务(如 go2h1g1 等机器人),默认值为 go2
  • --resume:是否从之前的检查点恢复训练。
  • --experiment_name/--run_name:指定实验和运行名称,用于日志存储。
  • --num_envs:环境并行数量(覆盖配置文件中的默认值)。
  • --max_iterations:最大训练迭代次数(覆盖配置文件)。
  • 设备相关参数(如 --rl_device 指定强化学习计算设备,默认 cuda:0)。

这些参数会用于后续环境和训练器的配置覆盖。

2. 环境初始化(task_registry.make_env()

task_registry.make_env() 函数(定义于 legged_gym/utils/task_registry.py)负责创建仿真环境,具体流程:

  • 任务注册检查:通过 task_registry 查找 args.task 对应的任务类(如 GO2RoughCfg 对应 go2 任务),确保任务已注册。
  • 配置加载与覆盖
    • 加载任务预定义的环境配置(如 go2_config.py 中的 GO2RoughCfg),包括环境参数(num_envsepisode_length_s)、地形参数(terrain_typefriction)、机器人初始状态(init_state)等。
    • 用命令行参数覆盖配置(如 --num_envs 覆盖 env_cfg.env.num_envs)。
  • 随机种子设置:通过 set_seed(env_cfg.seed) 固定随机种子,保证实验可复现。
  • 仿真参数解析:将配置中的仿真参数(如物理引擎类型 PHYSX/FLEX、时间步长 dt)转换为 Isaac Gym 所需的格式。
  • 环境实例化:创建任务对应的环境对象(如 LeggedRobot 子类),初始化仿真场景(包括机器人模型、地形、并行环境等),返回环境实例 env 和最终配置 env_cfg
3. 训练器初始化(task_registry.make_alg_runner()

task_registry.make_alg_runner() 函数(定义于 task_registry.py)负责创建 PPO 训练器(OnPolicyRunner),具体流程:

  • 训练配置加载与覆盖
    • 加载任务预定义的训练配置(如 PPO 超参数、日志设置等)。
    • 用命令行参数覆盖配置(如 --max_iterations 覆盖 train_cfg.runner.max_iterations)。
  • 日志目录设置:日志默认存储于 legged_gym/logs/<experiment_name>/<时间戳>_<run_name>,用于保存模型检查点、训练曲线(TensorBoard)等。
  • 训练器实例化:创建 OnPolicyRunner 实例,封装 PPO 算法核心逻辑(策略网络、价值网络、经验收集与更新等),绑定环境 env 和训练配置 train_cfg
  • 断点续训(可选):若 --resume=True,从指定路径(load_run/checkpoint)加载之前保存的模型参数,继续训练。
4. PPO 算法训练(ppo_runner.learn()

OnPolicyRunner.learn() 是训练的核心逻辑(具体实现未完全提供,基于常规 PPO 流程推断),通过多轮迭代优化机器人控制策略,每轮迭代包含以下步骤:

  • 经验收集

    • 机器人在环境中执行当前策略,收集轨迹数据(观测 obs、动作 actions、奖励 rews、终止信号 dones 等)。
    • 观测包括机器人状态(关节角度、速度、基座姿态、线性 / 角速度等),奖励由配置文件中的奖励函数计算(如 rewards.scales 中的 tracking_lin_vel 鼓励速度跟踪,collision 惩罚碰撞)。
  • 优势估计与回报计算

    • 用广义优势估计(GAE)计算优势函数,衡量当前策略下动作的 “好坏”。
    • 计算折扣回报,作为价值网络的目标值。
  • 策略更新

    • 多次迭代优化策略网络(actor):通过剪辑目标(clip_ratio)限制策略更新幅度,避免过大波动。
    • 优化价值网络(critic):最小化价值预测与折扣回报的均方误差。
  • 日志与检查点保存

    • 每轮迭代记录关键指标(平均奖励、策略熵、更新步长等)到 TensorBoard。
    • 按固定间隔保存模型检查点(model_<iter>.pt),用于后续评估或续训。
  • 终止条件:当迭代次数达到 train_cfg.runner.max_iterations 时,训练结束。

三、关键配置与扩展说明
  • 机器人配置:不同机器人(如 go2h1)的具体参数(关节刚度 stiffness、奖励权重 scales 等)定义于对应的 _config.py 文件(如 go2_config.py),训练时通过 --task 指定加载。
  • 环境随机性:配置中的 domain_rand 模块(如随机摩擦系数、推机器人干扰)增加环境多样性,提升策略鲁棒性。
  • 训练可视化:若未指定 --headless,Isaac Gym 会启动可视化窗口,实时显示机器人训练过程。

总结:train.py 通过串联参数解析、环境初始化、训练器创建和 PPO 迭代,实现了 legged 机器人的强化学习训练,核心逻辑依赖 task_registry 管理任务与配置,最终输出优化后的控制策略。### train.py 代码详解及训练过程说明

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐