in habitat/tasks/rearrange/rearrange_sim.py [0:0]
def reconfigure(self, config: Config):
ep_info = config["ep_info"][0]
self.instance_handle_to_ref_handle = ep_info["info"]["object_labels"]
config["SCENE"] = ep_info["scene_id"]
super().reconfigure(config)
self.ref_handle_to_rigid_obj_id = {}
self.ep_info = ep_info
self._try_acquire_context()
if self.prev_scene_id != ep_info["scene_id"]:
self.grasp_mgr.reconfigure()
# add and initialize the robot
ao_mgr = self.get_articulated_object_manager()
if self.robot.sim_obj is not None and self.robot.sim_obj.is_alive:
ao_mgr.remove_object_by_id(self.robot.sim_obj.object_id)
self.robot.reconfigure()
self._prev_obj_names = None
self.grasp_mgr.reset()
# Only remove and re-add objects if we have a new set of objects.
obj_names = [x[0] for x in ep_info["rigid_objs"]]
should_add_objects = self._prev_obj_names != obj_names
self._prev_obj_names = obj_names
self._clear_objects(should_add_objects)
self.prev_scene_id = ep_info["scene_id"]
self._viz_templates: Dict[float, int] = {}
# Set the default articulated object joint state.
for ao, set_joint_state in self._start_art_states.items():
ao.clear_joint_states()
ao.joint_positions = set_joint_state
# Load specified articulated object states from episode config
self._set_ao_states_from_ep(ep_info)
use_arm_start = self._orig_robot_js_start + (
self.habitat_config.get("ROBOT_JOINT_START_NOISE", 0.0)
* np.random.randn(self._orig_robot_js_start.shape[0])
)
self.robot.params.arm_init_params = use_arm_start
self.robot.reset()
# consume a fixed position from SIMUALTOR.AGENT_0 if configured
if self.habitat_config.AGENT_0.IS_SET_START_STATE:
self.robot.base_pos = mn.Vector3(
self.habitat_config.AGENT_0.START_POSITION
)
agent_rot = self.habitat_config.AGENT_0.START_ROTATION
self.robot.sim_obj.rotation = mn.Quaternion(
mn.Vector3(agent_rot[:3]), agent_rot[3]
)
if "RENDER_CAMERA_OFFSET" in self.habitat_config:
self.robot.params.cameras[
"robot_third"
].cam_offset_pos = mn.Vector3(
self.habitat_config.RENDER_CAMERA_OFFSET
)
if "RENDER_CAMERA_LOOKAT" in self.habitat_config:
self.robot.params.cameras[
"robot_third"
].cam_look_at_pos = mn.Vector3(
self.habitat_config.RENDER_CAMERA_LOOKAT
)
# add episode clutter objects additional to base scene objects
self._add_objs(ep_info, should_add_objects)
self.add_markers(ep_info)
# auto-sleep rigid objects as optimization
if self._auto_sleep:
self.sleep_all_objects()
# recompute the NavMesh once the scene is loaded
# NOTE: because ReplicaCADv3_sc scenes, for example, have STATIC objects with no accompanying NavMesh files
self._recompute_navmesh()
# Get the starting positions of the target objects.
rom = self.get_rigid_object_manager()
scene_pos = self.get_scene_pos()
self.target_start_pos = np.array(
[
scene_pos[
self.scene_obj_ids.index(
rom.get_object_by_handle(t_handle).object_id
)
]
for t_handle, _ in self.ep_info["targets"].items()
]
)
if self.first_setup:
self.first_setup = False
ik_arm_urdf = self.habitat_config.get("IK_ARM_URDF", None)
if ik_arm_urdf is not None and self._is_pb_installed:
self._ik_helper = IkHelper(
self.habitat_config.IK_ARM_URDF,
np.array(self.robot.params.arm_init_params),
)
# Capture the starting art states
self._start_art_states = {
ao: ao.joint_positions for ao in self.art_objs
}