Source code for ding.utils.render_helper
from typing import TYPE_CHECKING, Optional
from numpy import ndarray
if TYPE_CHECKING:
from ding.envs import BaseEnv, BaseEnvManager
[docs]def render_env(env, render_mode: Optional[str] = 'rgb_array') -> "ndarray":
"""
Overview:
Render the environment's current frame.
Arguments:
- env (:obj:`gym.Env`): DI-engine env instance.
- render_mode (:obj:`str`): Render mode.
Returns:
- frame (:obj:`numpy.ndarray`): [H * W * C]
"""
if hasattr(env, 'sim'):
# mujoco: mujoco frame is unside-down by default
return env.sim.render(camera_name='track', height=128, width=128)[::-1]
else:
# other envs
return env.render(mode=render_mode)
[docs]def render(env: "BaseEnv", render_mode: Optional[str] = 'rgb_array') -> "ndarray":
"""
Overview:
Render the environment's current frame.
Arguments:
- env (:obj:`BaseEnv`): DI-engine env instance.
- render_mode (:obj:`str`): Render mode.
Returns:
- frame (:obj:`numpy.ndarray`): [H * W * C]
"""
gym_env = env._env
return render_env(gym_env, render_mode=render_mode)
[docs]def get_env_fps(env) -> "int":
"""
Overview:
Get the environment's fps.
Arguments:
- env (:obj:`gym.Env`): DI-engine env instance.
Returns:
- fps (:obj:`int`).
"""
if hasattr(env, 'model'):
# mujoco
fps = 1 / env.model.opt.timestep
elif hasattr(env, 'env') and 'video.frames_per_second' in env.env.metadata.keys():
# classic control
fps = env.env.metadata['video.frames_per_second']
else:
# atari and other envs
fps = 30
return fps
[docs]def fps(env_manager: "BaseEnvManager") -> "int":
"""
Overview:
Render the environment's fps.
Arguments:
- env (:obj:`BaseEnvManager`): DI-engine env manager instance.
Returns:
- fps (:obj:`int`).
"""
try:
# env_ref is a ding gym environment
gym_env = env_manager.env_ref._env
return get_env_fps(gym_env)
except:
return 30