unitree_rl_gym-main 代码解读2_legged_gym
是整个强化学习训练流程的入口脚本,代码简洁,主要负责初始化环境、训练器并启动训练过程。参数解析、环境初始化、训练器初始化、PPO 算法训练训练过程可分为参数解析、环境初始化、训练器初始化、PPO 算法训练四个核心步骤,具体流程如下:训练前首先通过函数(定义于 )解析命令行参数,核心参数包括:这些参数会用于后续环境和训练器的配置覆盖。 函数(定义于 )负责创建仿真环境,具体流程: 函数(定义于 )负
一、train.py 代码结构与功能
train.py 是整个强化学习训练流程的入口脚本,代码简洁,主要负责初始化环境、训练器并启动训练过程。
参数解析、环境初始化、训练器初始化、PPO 算法训练
二、训练过程详细说明
训练过程可分为参数解析、环境初始化、训练器初始化、PPO 算法训练四个核心步骤,具体流程如下:
1. 命令行参数解析(get_args())
训练前首先通过 get_args() 函数(定义于 legged_gym/utils/helpers.py)解析命令行参数,核心参数包括:
--task:指定训练任务(如go2、h1、g1等机器人),默认值为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_envs、episode_length_s)、地形参数(terrain_type、friction)、机器人初始状态(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):最小化价值预测与折扣回报的均方误差。
- 多次迭代优化策略网络(actor):通过剪辑目标(
-
日志与检查点保存:
- 每轮迭代记录关键指标(平均奖励、策略熵、更新步长等)到 TensorBoard。
- 按固定间隔保存模型检查点(
model_<iter>.pt),用于后续评估或续训。
-
终止条件:当迭代次数达到
train_cfg.runner.max_iterations时,训练结束。
三、关键配置与扩展说明
- 机器人配置:不同机器人(如
go2、h1)的具体参数(关节刚度stiffness、奖励权重scales等)定义于对应的_config.py文件(如go2_config.py),训练时通过--task指定加载。 - 环境随机性:配置中的
domain_rand模块(如随机摩擦系数、推机器人干扰)增加环境多样性,提升策略鲁棒性。 - 训练可视化:若未指定
--headless,Isaac Gym 会启动可视化窗口,实时显示机器人训练过程。
总结:train.py 通过串联参数解析、环境初始化、训练器创建和 PPO 迭代,实现了 legged 机器人的强化学习训练,核心逻辑依赖 task_registry 管理任务与配置,最终输出优化后的控制策略。### train.py 代码详解及训练过程说明
更多推荐



所有评论(0)