0 前言
官方文档:https://isaac-sim.github.io/IsaacLab/main/source/api/lab_rl/isaaclab_rl.html#module-isaaclab_rl.skrl
https://skrl.readthedocs.io/en/latest/intro/getting_started.html
在本节中,您将学习如何使用 skrl 库的各种组件来创建强化学习任务。
运行该程序:
- 进入安装 isaac lab 时创建的conda虚拟环境
- 在该环境下进入 isaac sim文件夹中运行
source setup_conda_env.sh
- 终端中输入
./isaaclab.sh -p scripts/reinforcement_learning/skrll/train.py --task "Isaac-Cartpole-Direct-v0"
运行你的代码,进行训练。
1 gym注册环境
import gymnasium as gym # 导入Gymnasium库
# 在Gymnasium中注册名为"Isaac-Cartpole-Direct-v0"的自定义环境
gym.register(
# 环境ID:唯一标识符,遵循Gym命名规范(通常包含版本号v0)
id="Isaac-Cartpole-Direct-v0",
# entry_point:指定环境类的入口位置
# f"{__name__} 表示当前模块(文件),cartpole_env是模块内的类定义文件
entry_point=f"{__name__}.cartpole_env:CartpoleEnv",
# 禁用Gym内置的环境检查器(适用于特殊环境或加速初始化)
disable_env_checker=True,
# 传递给环境构造函数的额外参数(字典形式)
kwargs={
# 环境配置类的导入路径(指向CartpoleEnvCfg类)
"env_cfg_entry_point": f"{__name__}.cartpole_env:CartpoleEnvCfg",
# RL Games库的PPO算法配置文件路径(YAML格式)
# agents是包含配置文件的子模块,rl_games_ppo_cfg.yaml是配置文件
"rl_games_cfg_entry_point": f"{agents.__name__}:rl_games_ppo_cfg.yaml",
# RSL-RL库的PPO算法配置类路径
# rsl_rl_ppo_cfg是模块,CartpolePPORunnerCfg是配置类
"rsl_rl_cfg_entry_point": f"{agents.__name__}.rsl_rl_ppo_cfg:CartpolePPORunnerCfg",
# SKRL库的PPO算法配置文件路径(YAML格式)
"skrl_cfg_entry_point": f"{agents.__name__}:skrl_ppo_cfg.yaml",
# Stable Baselines3库的PPO算法配置文件路径
"sb3_cfg_entry_point": f"{agents.__name__}:sb3_ppo_cfg.yaml",
},
)
2 SKRL Wrapper 包装器
skrl
即可以通过包装器创建环境,也可以直接调用skrl
库的API创建环境:
## 使用包装器
from isaaclab_rl.skrl import SkrlVecEnvWrapper
env = SkrlVecEnvWrapper(env, ml_framework="torch") # or ml_framework="jax"
## 使用skrl库
from skrl.envs.torch.wrappers import wrap_env # for PyTorch, or...
from skrl.envs.jax.wrappers import wrap_env # for JAX
env = wrap_env(env, wrapper="isaaclab")
在skrl
的官网中能看到更多的内容:
由于SKRL Wrapper非常简单,实际上只是把整个包封装好拿来用,因此下述内容是单纯针对skrl
的。
3 SKRL
首先我们先来看一下scripts/reinforcement_learning/skrll/train.py
中创建强化学习环境并进行训练部分的代码:
# 创建Isaac Gym环境实例
# args_cli.task: 通过命令行参数指定的任务名称(如"Cartpole-v1")
# cfg=env_cfg: 传入预先定义的环境配置参数(如观测/动作空间设置、奖励函数等)
# render_mode: 若args_cli.video为True则启用RGB数组渲染(用于录制视频),否则不渲染以提升性能
env = gym.make(args_cli.task, cfg=env_cfg, render_mode="rgb_array" if args_cli.video else None)
# 使用Skrl库的向量环境包装器对原始环境进行封装
# 目的:将Isaac Gym环境适配到skrl的训练框架中
env = SkrlVecEnvWrapper(env, ml_framework=args_cli.ml_framework) # same as: `wrap_env(env, wrapper="auto")`
# 创建skrl训练运行器实例,用于管理整个训练流程
# https://skrl.readthedocs.io/en/latest/api/utils/runner.html
runner = Runner(env, agent_cfg)
# 读取模型
if resume_path:
print(f"[INFO] Loading model checkpoint from: {resume_path}")
runner.agent.load(resume_path)
# 启动训练流程
runner.run()
关于skrl训练运行器的更详细内容请参考:https://skrl.readthedocs.io/en/latest/api/utils/runner.html
可以通关官方案例了解更多:https://skrl.readthedocs.io/en/latest/intro/examples.html