in robogym/wrappers/cube.py [0:0]
def _set_field(self, sim):
cube_geom_idxs = [sim.model.geom_name2id("cube:middle")]
if "cube:top" in sim.model.geom_names:
cube_geom_idxs += [
sim.model.geom_name2id(name) for name in ["cube:top", "cube:bottom"]
]
random_state = self.unwrapped._random_state
scale = random_state.uniform(
self._cube_size_range[0], self._cube_size_range[1], size=[1]
)
val = self._orig_value["cube_size"] * scale
for cube_geom_idx in cube_geom_idxs:
sim.model.geom_size[cube_geom_idx] = val
# For face cube, we have to move bodies for rescaling to work.
if "cube:top" in sim.model.body_names:
for name in ["cube:top", "cube:bottom"]:
idx = sim.model.body_name2id(name)
sim.model.body_pos[idx] = self._orig_value[name] * scale
return OrderedDict([("cube_size", val.copy())])