|
from typing import TYPE_CHECKING, Optional |
|
from numpy import ndarray |
|
|
|
if TYPE_CHECKING: |
|
from ding.envs import BaseEnv, BaseEnvManager |
|
|
|
|
|
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'): |
|
|
|
return env.sim.render(camera_name='track', height=128, width=128)[::-1] |
|
else: |
|
|
|
return env.render(mode=render_mode) |
|
|
|
|
|
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) |
|
|
|
|
|
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'): |
|
|
|
fps = 1 / env.model.opt.timestep |
|
elif hasattr(env, 'env') and 'video.frames_per_second' in env.env.metadata.keys(): |
|
|
|
fps = env.env.metadata['video.frames_per_second'] |
|
else: |
|
|
|
fps = 30 |
|
return fps |
|
|
|
|
|
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: |
|
|
|
gym_env = env_manager.env_ref._env |
|
return get_env_fps(gym_env) |
|
except: |
|
return 30 |
|
|