赞
踩
资料:https://blog.csdn.net/weixin_46178278/article/details/135962782
在gym环境中使用mujoco的时候,有一个很难受的地方,界面上没有实时显示动作空间和状态空间状态的地方。
gym自己原始带的环境是用pygame画的图,所以在定义环境类的那里会重载render()函数,那里可以修改界面。可是mujoco的gym环境中没有render()函数,猜测可能是因为这个图像是从mujoco的仿真器中自己生成的。
依据之前用pygame的经验,这种界面应该是图像和文字分开渲染的,也就是在图像边界上的三个方块应该是通过一个封装好的模块,通过不同行的字符串生成的。如果能找到这部分代码就能在上面添加需要的数据,就会有一个在界面上显示数据的代码
import gym #定义环境名字 env = gym.make('daolibai_test',render_mode='human') # 创建Humanoid环境实例 observation = env.reset() # 重置环境并获取初始观测 for _ in range(10000): # 执行1000个步骤 env.render() # 渲染环境图像 action = env.action_space.sample() # 从动作空间中随机采样一个动作 next_observation, reward, terminated,done, info = env.step(action) # 执行动作并获取下一个观测、奖励等信息 # print(_) # print(action) if done: break env.close() # 关闭环境
def _get_viewer( self, mode ) -> Union["mujoco_py.MjViewer", "mujoco_py.MjRenderContextOffscreen"]: self.viewer = self._viewers.get(mode) if self.viewer is None: if mode == "human": self.viewer = mujoco_py.MjViewer(self.sim) elif mode in {"rgb_array", "depth_array"}: self.viewer = mujoco_py.MjRenderContextOffscreen(self.sim, -1) else: raise AttributeError( f"Unknown mode: {mode}, expected modes: {self.metadata['render_modes']}" ) self.viewer_setup() self._viewers[mode] = self.viewer return self.viewer
,
self.add_overlay(const.GRID_TOPLEFT, "Toggle geomgroup visibility", "0-4")
就是创建模块文本的函数。self.add_overlay(const.GRID_BOTTOMRIGHT, "pos0", "%.f" % self.sim.data.qpos[0])
即可在界面上添加文本,效果如下:Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。