def _load_model(self): """ Loads an xml model, puts it in self.model """ super()._load_model() # Adjust base pose accordingly xpos = self.robots[0].robot_model.base_xpos_offset["table"](self.table_full_size[0]) self.robots[0].robot_model.set_base_xpos(xpos) # load model for table top workspace mujoco_arena = TableArena( table_full_size=self.table_full_size, table_offset=self.table_offset, ) # Arena always gets set to zero origin mujoco_arena.set_origin([0, 0, 0]) # Modify default agentview camera mujoco_arena.set_camera( camera_name="agentview", pos=[0.5986131746834771, -4.392035683362857e-09, 1.5903500240372423], quat=[0.6380177736282349, 0.3048497438430786, 0.30484986305236816, 0.6380177736282349] ) # initialize objects of interest self.door = DoorObject( name="Door", friction=0.0, damping=0.1, lock=self.use_latch, ) # Create placement initializer if self.placement_initializer is not None: self.placement_initializer.reset() self.placement_initializer.add_objects(self.door) else: self.placement_initializer = UniformRandomSampler( name="ObjectSampler", mujoco_objects=self.door, x_range=[0.07, 0.09], y_range=[-0.01, 0.01], rotation=(-np.pi / 2. - 0.25, -np.pi / 2.), rotation_axis='z', ensure_object_boundary_in_range=False, ensure_valid_placement=True, reference_pos=self.table_offset, ) # task includes arena, robot, and objects of interest self.model = ManipulationTask( mujoco_arena=mujoco_arena, mujoco_robots=[robot.robot_model for robot in self.robots], mujoco_objects=self.door, )
def _load_model(self): """ Loads an xml model, puts it in self.model """ super()._load_model() # Adjust base pose(s) accordingly if self.env_configuration == "bimanual": xpos = self.robots[0].robot_model.base_xpos_offset["table"]( self.table_full_size[0]) self.robots[0].robot_model.set_base_xpos(xpos) else: if self.env_configuration == "single-arm-opposed": # Set up robots facing towards each other by rotating them from their default position for robot, rotation, offset in zip(self.robots, (np.pi / 2, -np.pi / 2), (-0.25, 0.25)): xpos = robot.robot_model.base_xpos_offset["table"]( self.table_full_size[0]) rot = np.array((0, 0, rotation)) xpos = T.euler2mat(rot) @ np.array(xpos) xpos += np.array((0, offset, 0)) robot.robot_model.set_base_xpos(xpos) robot.robot_model.set_base_ori(rot) else: # "single-arm-parallel" configuration setting # Set up robots parallel to each other but offset from the center for robot, offset in zip(self.robots, (-0.6, 0.6)): xpos = robot.robot_model.base_xpos_offset["table"]( self.table_full_size[0]) xpos = np.array(xpos) + np.array((0, offset, 0)) robot.robot_model.set_base_xpos(xpos) # load model for table top workspace mujoco_arena = TableArena(table_full_size=self.table_true_size, table_friction=self.table_friction, table_offset=self.table_offset) # Arena always gets set to zero origin mujoco_arena.set_origin([0, 0, 0]) # Modify default agentview camera mujoco_arena.set_camera(camera_name="agentview", pos=[ 0.8894354364730311, -3.481824231498976e-08, 1.7383813133506494 ], quat=[ 0.6530981063842773, 0.2710406184196472, 0.27104079723358154, 0.6530979871749878 ]) # initialize objects of interest self.hammer = HammerObject(name="hammer") # Create placement initializer if self.placement_initializer is not None: self.placement_initializer.reset() self.placement_initializer.add_objects(self.hammer) else: # Set rotation about y-axis if hammer starts on table else rotate about z if it starts in gripper rotation_axis = 'y' if self.prehensile else 'z' self.placement_initializer = UniformRandomSampler( name="ObjectSampler", mujoco_objects=self.hammer, x_range=[-0.1, 0.1], y_range=[-0.05, 0.05], rotation=None, rotation_axis=rotation_axis, ensure_object_boundary_in_range=False, ensure_valid_placement=True, reference_pos=self.table_offset, ) # task includes arena, robot, and objects of interest self.model = ManipulationTask( mujoco_arena=mujoco_arena, mujoco_robots=[robot.robot_model for robot in self.robots], mujoco_objects=self.hammer, )