I got an error at class UnimalHeightObs(gym.ObservationWrapper), def observation(self, obs): from hfield.py
File "/home/bak/Projects/metamorph/metamorph/envs/wrappers/hfield.py", line 211, in observation
obs["torso_height"] = round(z_pos - 1, 3)
TypeError: 'str' object does not support item assignment
The def observation(self, obs): is called from class UnimalEnv(gym.Env): in unimal.py. Though the obs is a dictionary and has 'proprioceptive', 'edges' keys at the end of def reset(self):, obs is just a str 'proprioceptive' at def observation(self, obs): class UnimalHeightObs(gym.ObservationWrapper).
From the viewpoint of the train loop, the error occurs when the code creates (or initializes) the world environment. At ppo.py, obs cannot create at def train(self):.
To solve above issue, I added self.obs_temp = obs at def reset(self): at def reset(self): class UnimalEnv(gym.Env): and obs = self.obs_temp at class UnimalHeightObs(gym.ObservationWrapper), def observation(self, obs):to preserve obs information.
class UnimalEnv(gym.Env):
"""Superclass for all Unimal tasks."""
...........
...........
###########################################################################
# Reset sim
###########################################################################
def reset(self):
if self.sim is None or cfg.ENV.NEW_SIM_ON_RESET:
self.sim = self._get_sim()
else:
self.sim.reset()
self.step_count = 0
if self.viewer is not None:
self.viewer.update_sim(self.sim)
obs = self.reset_model()
self._set_action_space()
# This is just a temp initialization, the final obs space will depend
# on SelectKeysWrapper
self.observation_space = spu.convert_obs_to_space(obs)
self.metadata["video.frames_per_second"] = int(np.round(1.0 / self.dt))
self.obs_temp = obs ### what I added
return obs
class UnimalHeightObs(gym.ObservationWrapper):
def __init__(self, env):
super().__init__(env)
self.observation_space = spu.update_obs_space(env, {"torso_height": (1,)})
def observation(self, obs):
obs = self.obs_temp ### what I added
x_pos, y_pos, z_pos = self.sim.data.get_body_xpos("torso/0")
........
........
After that, I got an error like below.
Process ForkProcess-3:
Traceback (most recent call last):
File "/home/bak/Projects/metamorph/metamorph/envs/vec_env/subproc_vec_env.py", line 27, in worker
remote.send([env.reset() for env in envs])
File "/home/bak/Projects/metamorph/metamorph/envs/vec_env/subproc_vec_env.py", line 27, in <listcomp>
remote.send([env.reset() for env in envs])
File "/home/bak/Projects/metamorph/metamorph/envs/wrappers/multi_env_wrapper.py", line 40, in reset
obs = self._env.reset()
File "/home/bak/Projects/metamorph/metamorph/algos/ppo/envs.py", line 187, in reset
observation = super(RecordEpisodeStatistics, self).reset(**kwargs)
File "/home/bak/anaconda3/envs/metamorph/lib/python3.8/site-packages/gym/core.py", line 323, in reset
return self.env.reset(**kwargs)
File "/home/bak/Projects/metamorph/metamorph/algos/ppo/envs.py", line 169, in reset
return self.env.reset(**kwargs)
File "/home/bak/anaconda3/envs/metamorph/lib/python3.8/site-packages/gym/wrappers/time_limit.py", line 68, in reset
return self.env.reset(**kwargs)
File "/home/bak/anaconda3/envs/metamorph/lib/python3.8/site-packages/gym/wrappers/order_enforcing.py", line 42, in reset
return self.env.reset(**kwargs)
File "/home/bak/anaconda3/envs/metamorph/lib/python3.8/site-packages/gym/wrappers/env_checker.py", line 47, in reset
return self.env.reset(**kwargs)
File "/home/bak/anaconda3/envs/metamorph/lib/python3.8/site-packages/gym/core.py", line 379, in reset
obs, info = self.env.reset(**kwargs)
ValueError: too many values to unpack (expected 2)
How can I fix these problems and check the result of your experiments?
I used Anaconda environment with mujoco-2.1.0 rather than Docker due to using free version of mujoco and using mujoco-py. Unfortunately, using mujoco after 2.1.0 does not support mujoco-py due to it has its own python binding.
I got an error at
class UnimalHeightObs(gym.ObservationWrapper),def observation(self, obs):from hfield.pyThe
def observation(self, obs):is called fromclass UnimalEnv(gym.Env):in unimal.py. Though theobsis a dictionary and has'proprioceptive','edges'keys at the end ofdef reset(self):,obsis just astr'proprioceptive'atdef observation(self, obs):class UnimalHeightObs(gym.ObservationWrapper).From the viewpoint of the train loop, the error occurs when the code creates (or initializes) the world environment. At
ppo.py,obscannot create atdef train(self):.To solve above issue, I added
self.obs_temp = obsatdef reset(self):atdef reset(self):class UnimalEnv(gym.Env):andobs = self.obs_tempatclass UnimalHeightObs(gym.ObservationWrapper),def observation(self, obs):to preserveobsinformation.After that, I got an error like below.
How can I fix these problems and check the result of your experiments?
I used Anaconda environment with
mujoco-2.1.0rather than Docker due to using free version of mujoco and usingmujoco-py. Unfortunately, using mujoco after 2.1.0 does not supportmujoco-pydue to it has its own python binding.