gym界面修改

资料: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:breakenv.close()  # 关闭环境
  • 从上面这个代码可以看出,渲染应该是跟env.render()有关。这个函数在gyn的mujoco文件夹中有环境基类,地址在/gym/gym/envs/mujoco/mujoco_env.py。这个基类中调用了_get_viewer(),函数如下:
   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.viewerreturn self.viewer

  • 这个函数中主要是调用了mujoco_py的函数MjViewer(),这个是mujoco自己的那个python库,也就是不光图像,整个gym中的mujoco模块实际上都只是创建了对应调用的接口。
  • 我这个MjViewer类所在的位置在anaconda3/envs/RL/lib/python3.9/site-packages/mujoco_py/mjviewer.py,这个类里调用了_create_full_overlay()函数,类似于self.add_overlay(const.GRID_TOPLEFT, "Toggle geomgroup visibility", "0-4")就是创建模块文本的函数。
  • 添加self.add_overlay(const.GRID_BOTTOMRIGHT, "pos0", "%.f" % self.sim.data.qpos[0])即可在界面上添加文本,效果如下:
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/615286.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【PG-1】PostgreSQL体系结构概述

1. PostgreSQL体系结构概述 代码结构 其中,backend是后端核心代码,包括右边的几个dir: access:处理数据访问方法和索引的代码。 bootstrap:数据库初始化相关的代码。 catalog:系统目录(如表和索引的元数据…

Errors were encountered while processing: /var/cuda-repo-ubuntu2004-12-0-local

问题描述 mac10-SYS-7048GR-TR:~$ sudo apt-get -y install cuda Reading package lists... Done Building dependency tree Reading state information... Done cuda is already the newest version (12.0.0-1). You might want to run apt --fix-broken install to co…

区块链游戏:探索未来的可能性与挑战

区块链游戏是一种将区块链技术应用于游戏领域的创新产品,它为游戏行业带来了全新的模式和可能性。本文将深入探讨区块链游戏的优点、挑战和未来趋势,帮助读者了解这一新兴领域。 一、区块链游戏的优点 1. 公平性:区块链技术保证了游戏中的物…

应急响应-CS流量分析心跳指令特征提取

知识点 战后-流量分析-CS 一、演示案例-流量分析-CS-HTTP/S协议-基础特征&源码特征 HTTP 1、基础特征:解密心跳请求 https://blog.didierstevens.com/didier-stevens-suite/ python 1768.py xxxx.vir2、请求特征: URL路径 下发指令 UA头&…

(笔记)KEIL经常碰到的错误(持续整理)

KEIL常碰到的错误 一、ERROR报错1、Build时报错 Error: L6218E2、Build时报错 error 653、Default Compiler Version 54、core_cm3.h(1213): error: unknown type name inline 二、调试与仿真1、keil5软件仿真没有实时波形2、调试模式时,程序前没有灰块3、Periphera…

微信小程序地图开发总结-规划路线

这是我做出来的自动规划效果,比较潦草 功能勉勉强强算是实现了的 在微信小程序中使用腾讯地图服务 虽然map组件使我们可以很方便的使用地图,但是map组件只提供了最基本的地图显示功能,同时,微信小程序提供的关于地图的API也只是提…

1.汉诺塔问题

C力扣 汉诺塔 class Solution { public:void hanota(vector<int>& a, vector<int>& b, vector<int>& c) {dfs(a,b,c,a.size());}void dfs(vector<int>& a, vector<int>& b, vector<int>& c,int n){if(n1){c.push…

CSS基础+基本选择器和复合选择器(如果想知道CSS的基础+基本选择器和复合选择器知识点,那么只看这一篇就足够了!)

前言&#xff1a;在我们学习完了html之后&#xff0c;我们就要开始学习三大件中的第二件—CSS&#xff0c;CSS 可以控制多重网页的样式和布局&#xff0c;也就是将我们写好的html代码加上一层华丽的衣裳&#xff0c;使网页变得更加精美。 ✨✨✨这里是秋刀鱼不做梦的BLOG ✨✨✨…

软考中级--网络工程师-计算机基础与理论第二节无线基础知识

IEEE802.11 规定了多种 WLAN 通信标准&#xff0c;其中&#xff08; &#xff09;与其他标准采用的频段不同&#xff0c;因而不能兼容。 A IEEE802.11a B IEEE802.11b C IEEE802.11g D IEEE802.11n 试题答案 正确答案&#xff1a; A 答案解析 IEEE 802.11a规定采用5GHz的 ISM频…

多态——C++

这里写目录标题 衔接继承总结继承和组合白箱复用黑箱复用 多态的概念多态的定义以及实现虚函数重写的两个例外协变面试题析构函数的重写 finalvoerride重载隐藏(重定义)重写(覆盖)抽象类什么是抽象类&#xff1f; 实现继承和接口继承多态的原理虚函数表 那多态的调用是怎么实现…

2024年mathorcup数学建模思路及论文助攻

题目C题 物流网络分拣中心货量预测及人员排班 电商物流网络在订单履约中由多个环节组成&#xff0c;图1是一个简化的物流网络示意图。其中&#xff0c;分拣中心作为网络的中间环节&#xff0c;需要将包裹按照不同流向进行分拣并发往下一个场地&#xff0c;最终使包裹到达消费者…

崩溃了news.163.com(求解)

崩溃了news.163.com&#xff08;求解&#xff09; 今天在测试学习的BeautifulSoup的时候&#xff0c;找到了news.163.com网易云新闻网&#xff0c;发现它的内容是加载在html里的&#xff0c;再尝试使用bs4获取下面这部分内容的时候。 分析过程&#xff1a; ​ 1.第一次怀疑自…