in robogym/envs/rearrange/datasets/envstates/random.py [0:0]
def _reset(self, env: MeshRearrangeEnv):
object_groups = MeshRearrangeEnv._sample_random_object_groups(env)
num_groups = len(object_groups)
(
meshes,
mesh_object_dataset_names,
mesh_object_ids,
mesh_scales,
) = self._sample_meshes(num_groups)
attrs_per_group = {
"material_args": MeshRearrangeEnv._sample_object_materials(env, num_groups),
"color": MeshRearrangeEnv._sample_object_colors(env, num_groups),
"scale": MeshRearrangeEnv._sample_object_size_scales(env, num_groups),
"mesh_files": meshes,
}
attrs_per_group["scale"] *= np.array(mesh_scales)
object_groups = MeshRearrangeEnv._set_group_attributes(
env, object_groups, attrs_per_group
)
# Be sure to recreate sim before randomizing position and rotation, because
# randomization algorithm required bounding box for the current mesh objects.
# In addition, object_groups should be deepcopied so that scale normalization inside
# _recreate_sim is not applied to the current variable.
MeshRearrangeEnv._set_object_groups(env, deepcopy(object_groups))
MeshRearrangeEnv._recreate_sim(env)
init_quats = self._sample_object_initial_rotations(env)
init_quats = self._post_process_quat(
init_quats, object_groups, mesh_object_dataset_names
)
# Note that environment object placement function should be called after object
# orientation is set. Therefore we first set object orientation quats to environment,
# and then call object placement function.
MeshRearrangeEnv._set_object_initial_rotations(env, init_quats)
init_pos, is_valid = MeshRearrangeEnv._generate_object_placements(env)
self.envstate = Envstate(
object_groups=object_groups,
object_dataset_names=mesh_object_dataset_names,
object_ids=mesh_object_ids,
init_pos=init_pos,
is_valid=is_valid,
init_quats=init_quats,
)