通过VScode查找功能,各种摸索,大体上了解了一些自己搭建环境的流程
首先,上步骤:
模型名称:pusher3dof
这里搭的是基于mujoco_py的环境,所以,模型文件放这里:
/gym/envs/mujoco/pusher3dof.py
然后注册:
/gym/env/init.py:
注册表提供了函数的入口
最后在mujoco的初始化文件加一行:
试一下:
看上去没啥问题了
加一个环境不难,但是写一个环境,就没这么容易了。。。
基于pusher3dof.py写一点我的理解吧:
这里的mujoco_env
是所有基于mujoco引擎的项目都共用的一个东西,我们找到源码,打开看一下:
可以看到,大多是关于渲染的内容,中间有一行:methods to override
就是说,别的我都写好了,你别动,只要你动这俩函数就行了。
那么ok,回到自己的pusher里来:
除了要我们override的东西之外,还有什么呢?
有一个特别重要的东西,就是step函数
step函数就对应一些人说的,物理模型。前面都在提mujoco,提渲染,那么这里提供的就是这个环境与外界交互的规则。
当输入了action a,我应该回应一些什么。这里就看有什么具体需求了,代码长,就不截上来了。
viewer_setup大致设定了一下相机的位置
get_color生成一个随机的颜色
reset_model将场景初始化
_get_obs返回场景的一些重要参数,比如位置,速度什么的。在reset或step最后调用。
基于mujoco的环境大概就是这个写法。
关于step怎么写,环境的各类参数要怎么获取,怎么修改,应该去看mujoco_py提供了哪些接口了。这里建议直接去扒mujoco的源码,github下载就行。self相当于一个mujoco_py的对象。
一个今天折腾了很久的小地方:
被注释的那几行,不可以直接整体将self.sim.model.geom_rgba&self.sim.model.geom_pos赋值。它俩是unwritable的。
但是呢,一个一个访问,一个一个改是ok的。
后面踩到什么坑了在续吧
over