大家好,我素洪小帅~

GymWrapperrobosuite 库中的一个包装类,它的作用是使 RoboSuite 环境与OpenAI Gym接口兼容。具体来说,它对环境进行封装,以便能够与Gym的标准接口(如 reset()step() 等)无缝集成。熟悉gym任务编程的宝贝可以用它来包装robosuite环境以后,使用gym的接口来写代码了.

1.类定义与继承:

class GymWrapper(robosuite.wrappers.wrapper.Wrapper, gymnasium.core.Env):
  • GymWrapper 继承了两个基类:
    • robosuite.wrappers.wrapper.Wrapper:这是 RoboSuite 环境的包装类,提供了包装功能。
    • gymnasium.core.Env:这是 Gym 环境的基类,定义了与环境交互的核心接口。

2.构造函数:

def __init__(self, env, keys=None):
  • 作用:初始化 GymWrapper 对象。
  • 参数
    • env:这是要包装的底层 Gym 环境。
    • keys:可选参数,用于指定在观察空间中保留哪些键(如果需要)。

3.方法:

1. compute_reward(self, achieved_goal, desired_goal, info)

def compute_reward(self, achieved_goal, desired_goal, info):
    # 兼容 Gym 接口的虚拟方法,直接返回环境奖励
    return float(self.reward)
  • 作用:计算奖励,但在这个方法中,它仅返回环境中的奖励,而不使用 achieved_goaldesired_goalinfo 参数。

  • 参数

    • achieved_goaldesired_goalinfo:这些参数在这里没有使用,通常在具有目标导向的环境中才会用到(如机器人控制任务)。
  • 返回值:返回环境中的奖励,类型为 float

2. reset(self, seed=None, options=None)

def reset(self, seed=None, options=None):
    # 扩展 env 的 reset 方法,返回扁平化的观察空间(np.ndarray)而不是robosuite的OrderedDict
    return self.env.reset(seed=seed, options=options)
  • 作用:扩展了底层环境的 reset 方法,返回的观察空间是扁平化的 NumPy 数组,而不是通常的 OrderedDict

  • 参数

    • seed:用于设置环境的随机种子。
    • options:可选,允许在重置时指定额外的选项。
  • 返回值

    • 一个 2 元组:
      • np.array:扁平化的环境观察空间。
      • dict:一个空字典,作为标准的 Gym 返回格式。

3. step(self, action)

def step(self, action):
    # 扩展 step() 方法,返回扁平化的观察空间
    return self.env.step(action)
  • 作用:这个方法扩展了环境的 step 方法,接受一个动作,并返回执行该动作后的环境状态,特别是返回扁平化的观察空间。

  • 参数

    • action (np.array):在环境中采取的动作。
  • 返回值

    • 一个 5 元组:
      • np.array:扁平化的观察空间。
      • float:执行动作后的奖励。
      • bool:是否因为环境达到终止状态而结束当前 episode。
      • bool:是否因为外部定义的条件而结束当前 episode。
      • dict:附加的环境信息(如诊断信息)。

robosuite.wrappers.wrapper.Wrapper 继承的方法:

  • __getattr__(self, attr):这是一个后备方法,允许 wrapper 处理原始环境不明确的任何方法调用。

  • observation_spec(self):返回环境的观察空间规范,通常是一个描述观察空间结构和类型的 OrderedDict

  • render(self, **kwargs):包装环境的 render 方法,支持渲染,并将额外的参数传递给底层环境的 render 函数。

robosuite.wrappers.wrapper.Wrapper 继承的类属性:

  • action_dim:返回环境动作空间的维度。

  • action_spec:返回一个元组,包含动作空间的最小值(低)和最大值(高)。

  • unwrapped:返回未经包装的环境,即去除了所有包装的环境实例。

gymnasium.core.Env 继承的方法:

  • __enter__(self)__exit__(self):这两个方法支持环境的 with 语句上下文管理器。

  • close(self):关闭环境,释放资源(如渲染窗口、数据库或 HTTP 连接)。如果环境已经关闭,再次调用 close 不会有任何效果,也不会抛出错误。

  • get_wrapper_attr(self, name)has_wrapper_attr(self, name)set_wrapper_attr(self, name, value):这些方法用于与环境的属性进行交互,检查或设置特定的 wrapper 属性。

gymnasium.core.Env 继承的只读属性:

  • np_random_seed:返回环境的随机数生成器的当前种子。如果未设置,将返回一个随机数种子。

  • np_random:返回环境内部的随机数生成器实例,通常是 np.random.Generator 的实例。

4.示例代码

import robosuite
from robosuite.wrappers.gym_wrapper import GymWrapper
import numpy as np

env = robosuite.make(
    env_name="Lift",  # 选择一个任务
    robots="Panda",
    has_renderer=False,  # 启用渲染器
    control_freq=20,  # 控制频率
    has_offscreen_renderer=False,
    use_camera_obs=False,
)

env = GymWrapper(env)

env.reset()

for i in range(1000):
    action = np.random.randn(*env.action_spec[0].shape) * 0.1
    obs,reward,done,truncated,info = env.step(action)  # take action in the environment
    break
env.close()  # 关闭环境
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐