def postconditions_met(self, state): ts = 2 s = 0 targets = self.get_targets() toggleables = get_objects_with_name_and_prop(targets['toggle'], 'toggleable', state.metadata) pickupables = get_objects_with_name_and_prop(targets['object'], 'pickupable', state.metadata) inventory_objects = state.metadata['inventoryObjects'] # check if object needs to be sliced if 'Sliced' in targets['object']: ts += 1 if 'Sliced' in [p['objectId'] for p in pickupables]: s += 1 # check if the right object is in hand if len(inventory_objects) > 0 and inventory_objects[0]['objectId'] in [ p['objectId'] for p in pickupables ]: s += 1 # check if the lamp is visible and turned on if np.any([t['isToggled'] and t['visible'] for t in toggleables]): s += 1 return s, ts
def postconditions_met(self, state): ts = 2 s = 0 targets = self.get_targets() receptacles = get_objects_with_name_and_prop(targets['parent'], 'receptacle', state.metadata) pickupables = get_objects_with_name_and_prop(targets['object'], 'pickupable', state.metadata) # check if object needs to be sliced if 'Sliced' in targets['object']: ts += 2 s += min([p['objectId'] for p in pickupables].count('Sliced'), 2) # placing each object counts as a postcondition s += min( np.max([ sum([ 1 if r['receptacleObjectIds'] is not None and p['objectId'] in r['receptacleObjectIds'] else 0 for p in pickupables ]) for r in receptacles ]), 2) return s, ts
def postconditions_met(self, state): ts = 3 s = 0 targets = self.get_targets() receptacles = get_objects_with_name_and_prop(targets['parent'], 'receptacle', state.metadata) pickupables = get_objects_with_name_and_prop(targets['object'], 'pickupable', state.metadata) movables = get_objects_with_name_and_prop(targets['mrecep'], 'pickupable', state.metadata) # check if object needs to be sliced if 'Sliced' in targets['object']: ts += 1 if len([p for p in pickupables if 'Sliced' in p['objectId']]) >= 1: s += 1 pickup_in_place = [p for p in pickupables for m in movables if 'receptacleObjectIds' in p and m['receptacleObjectIds'] is not None and p['objectId'] in m['receptacleObjectIds']] movable_in_place = [m for m in movables for r in receptacles if 'receptacleObjectIds' in r and r['receptacleObjectIds'] is not None and m['objectId'] in r['receptacleObjectIds']] # check if the object is in the final receptacle if len(pickup_in_place) > 0: s += 1 # check if the movable receptacle is in the final receptacle if len(movable_in_place) > 0: s += 1 # check if both the object and movable receptacle stack is in the final receptacle if np.any([np.any([p['objectId'] in m['receptacleObjectIds'] for p in pickupables]) and np.any([r['objectId'] in m['parentReceptacles'] for r in receptacles]) for m in movables if m['parentReceptacles'] is not None and m['receptacleObjectIds'] is not None]): s += 1 return s, ts
def postconditions_met(self, state): ts = 1 s = 0 targets = self.get_targets() receptacles = get_objects_with_name_and_prop(targets['parent'], 'receptacle', state.metadata) pickupables = get_objects_with_name_and_prop(targets['object'], 'pickupable', state.metadata) # check if object needs to be sliced if 'Sliced' in targets['object']: ts += 1 if 'Sliced' in [p['objectId'] for p in pickupables]: s += 1 if np.any([ np.any([ p['objectId'] in r['receptacleObjectIds'] for r in receptacles if r['receptacleObjectIds'] is not None ]) for p in pickupables ]): s += 1 return s, ts
def postconditions_met(self, state): ts = 3 s = 0 targets = self.get_targets() receptacles = get_objects_with_name_and_prop(targets['parent'], 'receptacle', state.metadata) pickupables = get_objects_with_name_and_prop(targets['object'], 'pickupable', state.metadata) if 'Sliced' in targets['object']: ts += 1 if len([p for p in pickupables if 'Sliced' in p['objectId']]) >= 1: s += 1 objs_in_place = [p['objectId'] for p in pickupables for r in receptacles if r['receptacleObjectIds'] is not None and p['objectId'] in r['receptacleObjectIds']] objs_cleaned = [p['objectId'] for p in pickupables if p['objectId'] in self.env.cleaned_objects] # check if object is in the receptacle if len(objs_in_place) > 0: s += 1 # check if some object was cleaned if len(objs_cleaned) > 0: s += 1 # check if the object is both in the receptacle and clean if np.any([obj_id in objs_cleaned for obj_id in objs_in_place]): s += 1 return s, ts