-
Notifications
You must be signed in to change notification settings - Fork 8.7k
Closed
Labels
Description
Hi all,
What I'm trying to do is to change halfcheetah's head "body_mass[7]" as it does when I change its mass in the xml file half_cheetah.xml.
I've been looking aroung and found how to but it doesn't increase the head size. Is there something I'm doing wrong?
import gym
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
MODEL_PATH = 'half_cheetah.xml'
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)