Skip to content

Changing halfcheetah's body_mass #2037

@rgap

Description

@rgap

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)

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions