基础结构
环境注册
- 文件:config/anymal_c/init.py
- 理解:环境如何注册到 Gymnasium
# 场景功能:
# 这个环境设计用于大规模并行训练,通常配置为:
# 1. 大量的环境实例(例如 4096)以加速数据收集
# 2. 默认不开启渲染以提高性能
# 3. 包含域随机化以训练鲁棒策略
gym.register(
# 1. id: 环境的唯一标识符。用户后续可以通过 'gym.make("Isaac-Navigation-Flat-Anymal-C-v0")' 来创建此环境。
id="Isaac-Navigation-Flat-Anymal-C-v0",
# 2. entry_point: 指定环境实例化的类。这里统一使用 'isaaclab.envs:ManagerBasedRLEnv' 类,
# 它是 Isaac Lab 中基于管理器(Manager-Based)的强化学习环境通用类。这意味着所有逻辑都由这个通用类管理,
# 而具体的差异(如机器人类型、任务目标)通过下面的配置参数传入。
entry_point="isaaclab.envs:ManagerBasedRLEnv",
# 3. disable_env_checker: 设置为 True 以禁用 Gymnasium 默认的兼容性检查(因为 Isaac Lab 环境较复杂,不需要此检查)。
disable_env_checker=True,
# 4. kwargs: 这些参数会直接传递给 'ManagerBasedRLEnv' 类的构造函数:
# - "env_cfg_entry_point": 重要!指向具体的环境配置类(NavigationEnvCfg)。
# 这个配置类定义了场景、机器人、传感器、动作空间、观察空间和奖励函数等核心要素。
# - "rsl_rl_cfg_entry_point": 指向 RSL-RL 库的训练运行配置(如 PPO 算法参数),当使用 RSL-RL 训练时会读取此配置。
# - "skrl_cfg_entry_point": 指向 SKRL 库的配置文件,当使用 SKRL 库训练时会读取此配置。
kwargs={
"env_cfg_entry_point": f"{__name__}.navigation_env_cfg:NavigationEnvCfg",
"rsl_rl_cfg_entry_point": f"{agents.__name__}.rsl_rl_ppo_cfg:NavigationEnvPPORunnerCfg",
"skrl_cfg_entry_point": f"{agents.__name__}:skrl_flat_ppo_cfg.yaml",
},
)
# 注册用于演示/推理的环境(Play环境)
# 这个环境主要用于可视化策略的效果,通常具有以下特点:
# 1. 较少的环境实例数(通常为1),方便观察
# 2. 默认开启渲染
# 3. 可能关闭某些随机化以进行确定性评估
gym.register(
id="Isaac-Navigation-Flat-Anymal-C-Play-v0",
entry_point="isaaclab.envs:ManagerBasedRLEnv",
disable_env_checker=True,
kwargs={
"env_cfg_entry_point": f"{__name__}.navigation_env_cfg:NavigationEnvCfg_PLAY",
"rsl_rl_cfg_entry_point": f"{agents.__name__}.rsl_rl_ppo_cfg:NavigationEnvPPORunnerCfg",
"skrl_cfg_entry_point": f"{agents.__name__}:skrl_flat_ppo_cfg.yaml",
},
)
环境配置
- 文件:config/anymal_c/navigation_env_cfg.py
- 理解:各个配置类的作用(Actions, Observations, Rewards, Commands, Terminations)
| 配置类 (Configuration Class) |
作用 (Function) |
关键点 (Key Points) |
| ActionsCfg |
定义 RL Agent 可输出的动作空间及执行方式。 |
1. pre_trained_policy_action: 采用分层控制,动作不是直接驱动电机,而是作为信号输入给预训练的低级行走策略。 |
2. low_level_decimation=4: 高级策略频率较低,每 4 个物理步决策一次。 |
|
|
| ObservationsCfg |
定义策略网络(Agent)的输入状态信息(State)。 |
1. pose_command: 核心输入,告知 Agent 当前的目标位置和方向。2. base_lin_vel & projected_gravity: 感知自身速度与姿态(平衡状态)。 |
| RewardsCfg |
定义奖励函数,指导 Agent 学习“好”的行为。 |
1. position_tracking: 正向奖励,距离目标越近得分越高(使用 tanh 平滑)。2. orientation_tracking: 负向奖励(惩罚),约束机器人朝向目标。 |
3. termination_penalty: 重罚 (-400),机器人摔倒或非法接触时给予巨大惩罚。 |
|
|
| CommandsCfg |
负责生成任务目标(Goal),如位置和航向。 |
1. UniformPose2dCommandCfg: 在 2D 平面上随机生成目标点。范围: 3m x 3m 区域内随机。 |
2. resampling_time_range=(8.0, 8.0): 每 8 秒重置一次新目标,训练连续适应能力。 |
|
|
| TerminationsCfg |
定义 Episode(一局游戏)何时结束。 |
1. base_contact: 失败判定,检测基座(躯干)是否触地,触地即视为摔倒/失败。 |
2. time_out: 超时强制结束。 |
|
|
| EventCfg |
定义环境重置(Reset)时的状态初始化和随机化。 |
1. reset_base: 虽然名为 reset,实际上包含域随机化。每次重置时,机器人的初始位置和朝向在小范围内随机扰动,防止过拟合。 |
预训练策略动作
- 文件:`mdp/pre_trained_policy_action.py
- 理解:层次化控制的实现原理
1. PreTrainedPolicyActionCfg (配置类)
这个类定义了构建层次化动作所需的参数,是静态配置。
| 参数 |
解释 |
asset_name |
要控制的机器人实体名称。 |
policy_path |
低级策略模型路径 (.pt 文件)。这是预先训练好、会走路的大脑。 |
low_level_decimation |
频率倍数。例如=4,意味着高级策略每思考1次,低级策略要执行4次动作。 |
low_level_actions |
低级策略原本的动作配置(如关节位置控制)。 |
low_level_observations |
低级策略需要的输入(Obs)配置。 |
2.PreTrainedPolicyAction
- 初始化 (
__init__)
作用:初始化动作项,加载神经网络模型,并建立观测数据的“重定向”机制。
- 加载模型:载入
.pt 预训练网络。
- 重映射输入:通过
lambda 将低级策略的观测(动作历史、速度指令)强制指向当前类缓存的变量,实现接管控制。