Wrapping
This library works with a common API to interact with the following RL environments:
OpenAI Gym / Farama Gymnasium (single and vectorized environments)
NVIDIA Isaac Gym (preview 2, 3 and 4)
To operate with them and to support interoperability between these non-compatible interfaces, a wrapping mechanism is provided as shown in the diagram below
Basic usage
1# import the environment wrapper and loader
2from skrl.envs.torch import wrap_env
3from skrl.envs.torch import load_omniverse_isaacgym_env
4
5# load the environment
6env = load_omniverse_isaacgym_env(task_name="Cartpole")
7
8# wrap the environment
9env = wrap_env(env) # or 'env = wrap_env(env, wrapper="omniverse-isaacgym")'
1# import the environment wrapper and loader
2from skrl.envs.torch import wrap_env
3from skrl.envs.torch import load_omniverse_isaacgym_env
4
5# load the multi-threaded environment
6env = load_omniverse_isaacgym_env(task_name="Cartpole", multi_threaded=True, timeout=30)
7
8# wrap the environment
9env = wrap_env(env) # or 'env = wrap_env(env, wrapper="omniverse-isaacgym")'
1# import the environment wrapper and loader
2from skrl.envs.torch import wrap_env
3from skrl.envs.torch import load_isaac_orbit_env
4
5# load the environment
6env = load_isaac_orbit_env(task_name="Isaac-Cartpole-v0")
7
8# wrap the environment
9env = wrap_env(env) # or 'env = wrap_env(env, wrapper="isaac-orbit")'
1import isaacgymenvs
2
3# import the environment wrapper
4from skrl.envs.torch import wrap_env
5
6# create/load the environment using the easy-to-use API from NVIDIA
7env = isaacgymenvs.make(seed=0,
8 task="Cartpole",
9 num_envs=512,
10 sim_device="cuda:0",
11 rl_device="cuda:0",
12 graphics_device_id=0,
13 headless=False)
14
15# wrap the environment
16env = wrap_env(env) # or 'env = wrap_env(env, wrapper="isaacgym-preview4")'
1# import the environment wrapper and loader
2from skrl.envs.torch import wrap_env
3from skrl.envs.torch import load_isaacgym_env_preview4
4
5# load the environment
6env = load_isaacgym_env_preview4(task_name="Cartpole")
7
8# wrap the environment
9env = wrap_env(env) # or 'env = wrap_env(env, wrapper="isaacgym-preview4")'
1# import the environment wrapper and loader
2from skrl.envs.torch import wrap_env
3from skrl.envs.torch import load_isaacgym_env_preview3
4
5# load the environment
6env = load_isaacgym_env_preview3(task_name="Cartpole")
7
8# wrap the environment
9env = wrap_env(env) # or 'env = wrap_env(env, wrapper="isaacgym-preview3")'
1# import the environment wrapper and loader
2from skrl.envs.torch import wrap_env
3from skrl.envs.torch import load_isaacgym_env_preview2
4
5# load the environment
6env = load_isaacgym_env_preview2(task_name="Cartpole")
7
8# wrap the environment
9env = wrap_env(env) # or 'env = wrap_env(env, wrapper="isaacgym-preview2")'
1# import the environment wrapper and gym
2from skrl.envs.torch import wrap_env
3import gym
4
5# load environment
6env = gym.make('Pendulum-v1')
7
8# wrap the environment
9env = wrap_env(env) # or 'env = wrap_env(env, wrapper="gym")'
Visit the Gym documentation (Vector) for more information about the creation and usage of vectorized environments
1# import the environment wrapper and gym
2from skrl.envs.torch import wrap_env
3import gym
4
5# load a vectorized environment
6env = gym.vector.make("Pendulum-v1", num_envs=10, asynchronous=False)
7
8# wrap the environment
9env = wrap_env(env) # or 'env = wrap_env(env, wrapper="gym")'
1# import the environment wrapper and gymnasium
2from skrl.envs.torch import wrap_env
3import gymnasium as gym
4
5# load environment
6env = gym.make('Pendulum-v1')
7
8# wrap the environment
9env = wrap_env(env) # or 'env = wrap_env(env, wrapper="gymnasium")'
Visit the Gymnasium documentation (Vector) for more information about the creation and usage of vectorized environments
1# import the environment wrapper and gymnasium
2from skrl.envs.torch import wrap_env
3import gymnasium as gym
4
5# load a vectorized environment
6env = gym.vector.make("Pendulum-v1", num_envs=10, asynchronous=False)
7
8# wrap the environment
9env = wrap_env(env) # or 'env = wrap_env(env, wrapper="gymnasium")'
1# import the environment wrapper and the deepmind suite
2from skrl.envs.torch import wrap_env
3from dm_control import suite
4
5# load environment
6env = suite.load(domain_name="cartpole", task_name="swingup")
7
8# wrap the environment
9env = wrap_env(env) # or 'env = wrap_env(env, wrapper="dm")'
1# import the environment wrapper and robosuite
2from skrl.envs.torch import wrap_env
3import robosuite
4from robosuite.controllers import load_controller_config
5
6# load environment
7controller_config = load_controller_config(default_controller="OSC_POSE")
8env = robosuite.make("TwoArmLift",
9 robots=["Sawyer", "Panda"], # load a Sawyer robot and a Panda robot
10 gripper_types="default", # use default grippers per robot arm
11 controller_configs=controller_config, # each arm is controlled using OSC
12 env_configuration="single-arm-opposed", # (two-arm envs only) arms face each other
13 has_renderer=True, # on-screen rendering
14 render_camera="frontview", # visualize the "frontview" camera
15 has_offscreen_renderer=False, # no off-screen rendering
16 control_freq=20, # 20 hz control for applied actions
17 horizon=200, # each episode terminates after 200 steps
18 use_object_obs=True, # provide object observations to agent
19 use_camera_obs=False, # don't provide image observations to agent
20 reward_shaping=True) # use a dense reward signal for learning
21
22# wrap the environment
23env = wrap_env(env) # or 'env = wrap_env(env, wrapper="robosuite")'
API
- skrl.envs.torch.wrappers.wrap_env(env: Any, wrapper: str = 'auto', verbose: bool = True) skrl.envs.torch.wrappers.Wrapper
Wrap an environment to use a common interface
Example:
>>> from skrl.envs.torch import wrap_env >>> >>> # assuming that there is an environment called "env" >>> env = wrap_env(env)
- Parameters
env (gym.Env, gymnasium.Env, dm_env.Environment or VecTask) – The environment to be wrapped
wrapper (str, optional) –
The type of wrapper to use (default: “auto”). If
"auto"
, the wrapper will be automatically selected based on the environment class. The supported wrappers are described in the following table:Environment
Wrapper tag
OpenAI Gym
"gym"
Gymnasium
"gymnasium"
DeepMind
"dm"
Robosuite
"robosuite"
Isaac Gym preview 2
"isaacgym-preview2"
Isaac Gym preview 3
"isaacgym-preview3"
Isaac Gym preview 4
"isaacgym-preview4"
Omniverse Isaac Gym
"omniverse-isaacgym"
Isaac Sim (orbit)
"isaac-orbit"
verbose (bool, optional) – Whether to print the wrapper type (default: True)
- Raises
ValueError – Unknow wrapper type
- Returns
Wrapped environment
- Return type
Internal API
- class skrl.envs.torch.wrappers.Wrapper(env: Any)
Bases:
object
- __init__(env: Any) None
Base wrapper class for RL environments
- Parameters
env (Any supported RL environment) – The environment to wrap
- property device
The device used by the environment
If the wrapped environment does not have the
device
property, the value of this property will be"cuda:0"
or"cpu"
depending on the device availability
- property action_space: gym.spaces.space.Space
Action space
- close() None
Close the environment
- Raises
NotImplementedError – Not implemented
- property num_envs: int
Number of environments
If the wrapped environment does not have the
num_envs
property, it will be set to 1
- property observation_space: gym.spaces.space.Space
Observation space
- render(*args, **kwargs) None
Render the environment
- Raises
NotImplementedError – Not implemented
- reset() Tuple[torch.Tensor, Any]
Reset the environment
- Raises
NotImplementedError – Not implemented
- Returns
Observation, info
- Return type
torch.Tensor and any other info
- property state_space: gym.spaces.space.Space
State space
If the wrapped environment does not have the
state_space
property, the value of theobservation_space
property will be used
- step(actions: torch.Tensor) Tuple[torch.Tensor, torch.Tensor, torch.Tensor, torch.Tensor, Any]
Perform a step in the environment
- Parameters
actions (torch.Tensor) – The actions to perform
- Raises
NotImplementedError – Not implemented
- Returns
Observation, reward, terminated, truncated, info
- Return type
tuple of torch.Tensor and any other info
- class skrl.envs.torch.wrappers.OmniverseIsaacGymWrapper(env: Any)
Bases:
skrl.envs.torch.wrappers.Wrapper
- __init__(env: Any) None
Omniverse Isaac Gym environment wrapper
- Parameters
env (Any supported Omniverse Isaac Gym environment) – The environment to wrap
- reset() Tuple[torch.Tensor, Any]
Reset the environment
- Returns
Observation, info
- Return type
torch.Tensor and any other info
- run(trainer: Optional[omni.isaac.gym.vec_env.vec_env_mt.TrainerMT] = None) None
Run the simulation in the main thread
This method is valid only for the Omniverse Isaac Gym multi-threaded environments
- Parameters
trainer (omni.isaac.gym.vec_env.vec_env_mt.TrainerMT, optional) – Trainer which should implement a
run
method that initiates the RL loop on a new thread
- step(actions: torch.Tensor) Tuple[torch.Tensor, torch.Tensor, torch.Tensor, torch.Tensor, Any]
Perform a step in the environment
- Parameters
actions (torch.Tensor) – The actions to perform
- Returns
Observation, reward, terminated, truncated, info
- Return type
tuple of torch.Tensor and any other info
- class skrl.envs.torch.wrappers.IsaacOrbitWrapper(env: Any)
Bases:
skrl.envs.torch.wrappers.Wrapper
- __init__(env: Any) None
Isaac Orbit environment wrapper
- Parameters
env (Any supported Isaac Orbit environment) – The environment to wrap
- reset() Tuple[torch.Tensor, Any]
Reset the environment
- Returns
Observation, info
- Return type
torch.Tensor and any other info
- step(actions: torch.Tensor) Tuple[torch.Tensor, torch.Tensor, torch.Tensor, torch.Tensor, Any]
Perform a step in the environment
- Parameters
actions (torch.Tensor) – The actions to perform
- Returns
Observation, reward, terminated, truncated, info
- Return type
tuple of torch.Tensor and any other info
- class skrl.envs.torch.wrappers.IsaacGymPreview3Wrapper(env: Any)
Bases:
skrl.envs.torch.wrappers.Wrapper
- __init__(env: Any) None
Isaac Gym environment (preview 3) wrapper
- Parameters
env (Any supported Isaac Gym environment (preview 3) environment) – The environment to wrap
- reset() Tuple[torch.Tensor, Any]
Reset the environment
- Returns
Observation, info
- Return type
torch.Tensor and any other info
- step(actions: torch.Tensor) Tuple[torch.Tensor, torch.Tensor, torch.Tensor, torch.Tensor, Any]
Perform a step in the environment
- Parameters
actions (torch.Tensor) – The actions to perform
- Returns
Observation, reward, terminated, truncated, info
- Return type
tuple of torch.Tensor and any other info
- class skrl.envs.torch.wrappers.IsaacGymPreview2Wrapper(env: Any)
Bases:
skrl.envs.torch.wrappers.Wrapper
- __init__(env: Any) None
Isaac Gym environment (preview 2) wrapper
- Parameters
env (Any supported Isaac Gym environment (preview 2) environment) – The environment to wrap
- reset() Tuple[torch.Tensor, Any]
Reset the environment
- Returns
Observation, info
- Return type
torch.Tensor and any other info
- step(actions: torch.Tensor) Tuple[torch.Tensor, torch.Tensor, torch.Tensor, torch.Tensor, Any]
Perform a step in the environment
- Parameters
actions (torch.Tensor) – The actions to perform
- Returns
Observation, reward, terminated, truncated, info
- Return type
tuple of torch.Tensor and any other info
- class skrl.envs.torch.wrappers.GymWrapper(env: Any)
Bases:
skrl.envs.torch.wrappers.Wrapper
- __init__(env: Any) None
OpenAI Gym environment wrapper
- Parameters
env (Any supported OpenAI Gym environment) – The environment to wrap
- property action_space: gym.spaces.space.Space
Action space
- property observation_space: gym.spaces.space.Space
Observation space
- reset() Tuple[torch.Tensor, Any]
Reset the environment
- Returns
Observation, info
- Return type
torch.Tensor and any other info
- property state_space: gym.spaces.space.Space
State space
An alias for the
observation_space
property
- step(actions: torch.Tensor) Tuple[torch.Tensor, torch.Tensor, torch.Tensor, torch.Tensor, Any]
Perform a step in the environment
- Parameters
actions (torch.Tensor) – The actions to perform
- Returns
Observation, reward, terminated, truncated, info
- Return type
tuple of torch.Tensor and any other info
- class skrl.envs.torch.wrappers.GymnasiumWrapper(env: Any)
Bases:
skrl.envs.torch.wrappers.Wrapper
- __init__(env: Any) None
Gymnasium environment wrapper
- Parameters
env (Any supported Gymnasium environment) – The environment to wrap
- property action_space: gymnasium.spaces.space.Space
Action space
- property observation_space: gymnasium.spaces.space.Space
Observation space
- reset() Tuple[torch.Tensor, Any]
Reset the environment
- Returns
Observation, info
- Return type
torch.Tensor and any other info
- property state_space: gymnasium.spaces.space.Space
State space
An alias for the
observation_space
property
- step(actions: torch.Tensor) Tuple[torch.Tensor, torch.Tensor, torch.Tensor, torch.Tensor, Any]
Perform a step in the environment
- Parameters
actions (torch.Tensor) – The actions to perform
- Returns
Observation, reward, terminated, truncated, info
- Return type
tuple of torch.Tensor and any other info
- class skrl.envs.torch.wrappers.DeepMindWrapper(env: Any)
Bases:
skrl.envs.torch.wrappers.Wrapper
- __init__(env: Any) None
DeepMind environment wrapper
- Parameters
env (Any supported DeepMind environment) – The environment to wrap
- _observation_to_tensor(observation: Any, spec: Optional[Any] = None) torch.Tensor
Convert the DeepMind observation to a flat tensor
- Parameters
observation (Any supported DeepMind observation) – The DeepMind observation to convert to a tensor
- Raises
ValueError if the observation spec type is not supported
- Returns
The observation as a flat tensor
- Return type
- _spec_to_space(spec: Any) gym.spaces.space.Space
Convert the DeepMind spec to a Gym space
- Parameters
spec (Any supported DeepMind spec) – The DeepMind spec to convert
- Raises
ValueError if the spec type is not supported
- Returns
The Gym space
- Return type
gym.Space
- _tensor_to_action(actions: torch.Tensor) Any
Convert the action to the DeepMind expected format
- Parameters
actions (torch.Tensor) – The actions to perform
- Raises
ValueError – If the action space type is not supported
- Returns
The action in the DeepMind expected format
- Return type
Any supported DeepMind action
- property action_space: gym.spaces.space.Space
Action space
- property observation_space: gym.spaces.space.Space
Observation space
- render(*args, **kwargs) None
Render the environment
OpenCV is used to render the environment. Install OpenCV with
pip install opencv-python
- reset() Tuple[torch.Tensor, Any]
Reset the environment
- Returns
The state of the environment
- Return type
- property state_space: gym.spaces.space.Space
State space
An alias for the
observation_space
property
- step(actions: torch.Tensor) Tuple[torch.Tensor, torch.Tensor, torch.Tensor, torch.Tensor, Any]
Perform a step in the environment
- Parameters
actions (torch.Tensor) – The actions to perform
- Returns
Observation, reward, terminated, truncated, info
- Return type
tuple of torch.Tensor and any other info
- class skrl.envs.torch.wrappers.RobosuiteWrapper(env: Any)
Bases:
skrl.envs.torch.wrappers.Wrapper
- __init__(env: Any) None
Robosuite environment wrapper
- Parameters
env (Any supported robosuite environment) – The environment to wrap
- _observation_to_tensor(observation: Any, spec: Optional[Any] = None) torch.Tensor
Convert the observation to a flat tensor
- Parameters
observation (Any supported observation) – The observation to convert to a tensor
- Raises
ValueError if the observation spec type is not supported
- Returns
The observation as a flat tensor
- Return type
- _spec_to_space(spec: Any) gym.spaces.space.Space
Convert the robosuite spec to a Gym space
- Parameters
spec (Any supported robosuite spec) – The robosuite spec to convert
- Raises
ValueError if the spec type is not supported
- Returns
The Gym space
- Return type
gym.Space
- _tensor_to_action(actions: torch.Tensor) Any
Convert the action to the robosuite expected format
- Parameters
actions (torch.Tensor) – The actions to perform
- Raises
ValueError – If the action space type is not supported
- Returns
The action in the robosuite expected format
- Return type
Any supported robosuite action
- property action_space: gym.spaces.space.Space
Action space
- property observation_space: gym.spaces.space.Space
Observation space
- reset() Tuple[torch.Tensor, Any]
Reset the environment
- Returns
The state of the environment
- Return type
- property state_space: gym.spaces.space.Space
State space
An alias for the
observation_space
property
- step(actions: torch.Tensor) Tuple[torch.Tensor, torch.Tensor, torch.Tensor, torch.Tensor, Any]
Perform a step in the environment
- Parameters
actions (torch.Tensor) – The actions to perform
- Returns
Observation, reward, terminated, truncated, info
- Return type
tuple of torch.Tensor and any other info