微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

改变Openai Mujoco的半猎豹质量

如何解决改变Openai Mujoco的半猎豹质量

我想要做的是改变Halfcheetah的头“ body_mass [7]”,它可以改变它,但不会使头变大。如果我在xml file中更改其质量,它将正确渲染。 缺少什么吗?

这是使用openai gym渲染mujoco的Halfcheetah的代码

import gym
import os
import numpy as np
from gym import utils
from gym.envs.mujoco import mujoco_env


class HalfCheetahEnv(mujoco_env.MujocoEnv,utils.EzPickle):
    def __init__(self):
        self.prev_qpos = None
        dir_path = os.path.dirname(os.path.realpath(__file__))
        MODEL_PATH = '%s/assets/half_cheetah.xml' % dir_path
        mujoco_env.MujocoEnv.__init__(self,MODEL_PATH,5)
        utils.EzPickle.__init__(self)

    def step(self,action):
        xposbefore = self.sim.data.qpos[0]
        self.do_simulation(action,self.frame_skip)
        xposafter = self.sim.data.qpos[0]
        ob = self._get_obs()
        reward_ctrl = - 0.1 * np.square(action).sum()
        reward_run = (xposafter - xposbefore)/self.dt
        reward = reward_ctrl + reward_run
        done = False
        return ob,reward,done,{}

    def _get_obs(self):
        return np.concatenate([
            self.sim.data.qpos.flat[1:],self.sim.data.qvel.flat,])

    def reset_model(self):
        qpos = self.init_qpos + self.np_random.uniform(low=-.1,high=.1,size=self.model.nq)
        qvel = self.init_qvel + self.np_random.randn(self.model.nv) * .1
        self.set_state(qpos,qvel)
        return self._get_obs()

    def viewer_setup(self):
        self.viewer.cam.distance = self.model.stat.extent * 0.5

    def change_env(self):
        self.model.body_mass[7] = 1.5
        self.model.dof_damping[7] = 1.5


if __name__ == "__main__":

    env = HalfCheetahEnv()
    env.reset()
    env.change_env()

    while True:
        env.render()
        print(env.model.body_mass)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。