alfred / util.py
ch-min-ys's picture
delete ff_planner
483f96c
import numpy as np
SCREEN_WIDTH = 300
SCREEN_HEIGHT = 300
FOV = 90
FOCAL_LENGTH = SCREEN_HEIGHT / (2 * np.tan(FOV / 2 * np.pi / 180))
def get_rotation_matrix(pose):
assert(pose[2] in {0, 1, 2, 3}), 'rotation was %s' % str(pose[2])
sin_x = np.sin(-pose[3] * np.pi / 180)
cos_x = np.cos(-pose[3] * np.pi / 180)
x_rotation = np.matrix([
[1, 0, 0],
[0, cos_x, -sin_x],
[0, sin_x, cos_x]], dtype=np.float32)
sin_y = np.sin((-pose[2] % 4) * 90 * np.pi / 180)
cos_y = np.cos((-pose[2] % 4) * 90 * np.pi / 180)
y_rotation = np.matrix([
[cos_y, 0, sin_y],
[0, 1, 0],
[-sin_y, 0, cos_y]], dtype=np.float32)
rotation_matrix = np.matmul(x_rotation, y_rotation)
return rotation_matrix
def depth_to_world_coordinates(depth, pose, camera_height):
############################################################################
pose = list(pose)
pose[2] = pose[2] // 90
pose = tuple(pose)
############################################################################
x_points = np.arange(-SCREEN_WIDTH / 2, SCREEN_WIDTH / 2, dtype=depth.dtype)
x_vals = (depth * x_points / FOCAL_LENGTH)
y_points = np.arange(SCREEN_HEIGHT / 2, -SCREEN_HEIGHT / 2, -1, dtype=depth.dtype)
y_vals = (depth.T * y_points / FOCAL_LENGTH).T
z_vals = depth
xyz = np.stack((x_vals, y_vals, z_vals), axis=2) / (1000 * 0.25)
rotation_matrix = np.linalg.inv(get_rotation_matrix(pose))
xyz = np.array(np.dot(rotation_matrix, xyz.reshape(-1, 3).T).T).reshape(
SCREEN_HEIGHT, SCREEN_WIDTH, 3)
xzy = xyz[:, :, [0, 2, 1]]
xzy += np.array([pose[0], pose[1], camera_height])
return xzy
############################# ALFWorld ##################################
from collections import OrderedDict
########################################################################################################################
# General Settings
DEBUG = True
EVAL = False
LOG_FILE = 'logs_gen'
RECORD_VIDEO_IMAGES = True
RECORD_SMOOTHING_FACTOR = 1
DATA_SAVE_PATH = "dataset/new_trajectories"
OPEN_LOOP = True
FULL_OBSERVABLE_STATE = True
########################################################################################################################
# Generation Ablations
MAX_NUM_OF_OBJ_INSTANCES = 3 # when randomly initializing the scene, create duplicate instance up to this number
PICKUP_REPEAT_MAX = 4 # how many of the target pickup object to generate in [1, MAX] (randomly chosen)
RECEPTACLE_SPARSE_POINTS = 50 # increment for how many points to leave free for sparsely populated receptacles
RECEPTACLE_EMPTY_POINTS = 200 # increment for how many points to leave free for empty receptacles
MIN_VISIBLE_RATIO = 0.0011 # minimum area ratio (with respect to image size) of visible object
PLANNER_MAX_STEPS = 100 # if the generated plan is more than these steps, discard the traj
MAX_EPISODE_LENGTH = 1000 # maximum number of API steps allowed per trajectory
FORCED_SAMPLING = False # set True for debugging instead of proper sampling
PRUNE_UNREACHABLE_POINTS = False # prune navigation points that were deemed unreachable by the proprocessing script
########################################################################################################################
# Goals
GOALS = ["pick_and_place_simple",
"pick_two_obj_and_place",
"look_at_obj_in_light",
"pick_clean_then_place_in_recep",
"pick_heat_then_place_in_recep",
"pick_cool_then_place_in_recep",
"pick_and_place_with_movable_recep"]
GOALS_VALID = {"pick_and_place_simple": {"Kitchen", "LivingRoom", "Bathroom", "Bedroom"},
"pick_two_obj_and_place": {"Kitchen", "LivingRoom", "Bathroom", "Bedroom"},
"look_at_obj_in_light": {"LivingRoom", "Bedroom"},
"pick_clean_then_place_in_recep": {"Kitchen", "Bathroom"},
"pick_heat_then_place_in_recep": {"Kitchen"},
"pick_cool_then_place_in_recep": {"Kitchen"},
"pick_and_place_with_movable_recep": {"Kitchen", "LivingRoom", "Bedroom"}}
pddl_goal_type = "pick_and_place_simple" # default goal type
########################################################################################################################
# Video Settings
# filler frame IDs
BEFORE = 0
MIDDLE = 1
AFTER = 2
# number of image frames to save before and after executing the specified action
SAVE_FRAME_BEFORE_AND_AFTER_COUNTS = {
'OpenObject': [2, 0, 2],
'CloseObject': [2, 0, 2],
'PickupObject': [5, 0, 10],
'PutObject': [5, 0, 10],
'CleanObject': [3, 0, 5],
'HeatObject': [3, 0, 5],
'CoolObject': [3, 30, 5],
'ToggleObjectOn': [3, 0, 15],
'ToggleObjectOff': [1, 0, 5],
'SliceObject': [3, 0, 7]
}
# FPS
VIDEO_FRAME_RATE = 5
########################################################################################################################
# Data & Storage
save_path = DATA_SAVE_PATH
data_dict = OrderedDict() # dictionary for storing trajectory data to be dumped
########################################################################################################################
# Unity Hyperparameters
BUILD_PATH = None
X_DISPLAY = '0'
AGENT_STEP_SIZE = 0.25
AGENT_HORIZON_ADJ = 15
AGENT_ROTATE_ADJ = 90
CAMERA_HEIGHT_OFFSET = 0.75
VISIBILITY_DISTANCE = 1.5
HORIZON_GRANULARITY = 15
RENDER_IMAGE = True
RENDER_DEPTH_IMAGE = True
RENDER_CLASS_IMAGE = True
RENDER_OBJECT_IMAGE = True
MAX_DEPTH = 5000
STEPS_AHEAD = 5
SCENE_PADDING = STEPS_AHEAD * 3
SCREEN_WIDTH = DETECTION_SCREEN_WIDTH = 300
SCREEN_HEIGHT = DETECTION_SCREEN_HEIGHT = 300
MIN_VISIBLE_PIXELS = 10
# (400) / (600*600) ~ 0.13% area of image
# int(MIN_VISIBLE_RATIO * float(DETECTION_SCREEN_WIDTH) * float(DETECTION_SCREEN_HEIGHT))
# MIN_VISIBLE_PIXELS = int(MIN_VISIBLE_RATIO * float(DETECTION_SCREEN_WIDTH) * float(
# DETECTION_SCREEN_HEIGHT)) # (400) / (600*600) ~ 0.13% area of image
########################################################################################################################
# Scenes and Objects
TRAIN_SCENE_NUMBERS = list(range(7, 31)) # Train Kitchens (24/30)
TRAIN_SCENE_NUMBERS.extend(list(range(207, 231))) # Train Living Rooms (24/30)
TRAIN_SCENE_NUMBERS.extend(list(range(307, 331))) # Train Bedrooms (24/30)
TRAIN_SCENE_NUMBERS.extend(list(range(407, 431))) # Train Bathrooms (24/30)
TEST_SCENE_NUMBERS = list(range(1, 7)) # Test Kitchens (6/30)
TEST_SCENE_NUMBERS.extend(list(range(201, 207))) # Test Living Rooms (6/30)
TEST_SCENE_NUMBERS.extend(list(range(301, 307))) # Test Bedrooms (6/30)
TEST_SCENE_NUMBERS.extend(list(range(401, 407))) # Test Bathrooms (6/30)
SCENE_NUMBERS = TRAIN_SCENE_NUMBERS + TEST_SCENE_NUMBERS
# Scene types.
SCENE_TYPE = {"Kitchen": range(1, 31),
"LivingRoom": range(201, 231),
"Bedroom": range(301, 331),
"Bathroom": range(401, 431)}
OBJECTS = [
'AlarmClock',
'Apple',
'ArmChair',
'BaseballBat',
'BasketBall',
'Bathtub',
'BathtubBasin',
'Bed',
'Blinds',
'Book',
'Boots',
'Bowl',
'Box',
'Bread',
'ButterKnife',
'Cabinet',
'Candle',
'Cart',
'CD',
'CellPhone',
'Chair',
'Cloth',
'CoffeeMachine',
'CounterTop',
'CreditCard',
'Cup',
'Curtains',
'Desk',
'DeskLamp',
'DishSponge',
'Drawer',
'Dresser',
'Egg',
'FloorLamp',
'Footstool',
'Fork',
'Fridge',
'GarbageCan',
'Glassbottle',
'HandTowel',
'HandTowelHolder',
'HousePlant',
'Kettle',
'KeyChain',
'Knife',
'Ladle',
'Laptop',
'LaundryHamper',
'LaundryHamperLid',
'Lettuce',
'LightSwitch',
'Microwave',
'Mirror',
'Mug',
'Newspaper',
'Ottoman',
'Painting',
'Pan',
'PaperTowel',
'PaperTowelRoll',
'Pen',
'Pencil',
'PepperShaker',
'Pillow',
'Plate',
'Plunger',
'Poster',
'Pot',
'Potato',
'RemoteControl',
'Safe',
'SaltShaker',
'ScrubBrush',
'Shelf',
'ShowerDoor',
'ShowerGlass',
'Sink',
'SinkBasin',
'SoapBar',
'SoapBottle',
'Sofa',
'Spatula',
'Spoon',
'SprayBottle',
'Statue',
'StoveBurner',
'StoveKnob',
'DiningTable',
'CoffeeTable',
'SideTable',
'TeddyBear',
'Television',
'TennisRacket',
'TissueBox',
'Toaster',
'Toilet',
'ToiletPaper',
'ToiletPaperHanger',
'ToiletPaperRoll',
'Tomato',
'Towel',
'TowelHolder',
'TVStand',
'Vase',
'Watch',
'WateringCan',
'Window',
'WineBottle',
]
OBJECTS_WSLICED = sorted(OBJECTS +
['AppleSliced', 'BreadSliced', 'LettuceSliced', 'PotatoSliced', 'TomatoSliced'] +
['Faucet'])
OBJECTS_LOWER_TO_UPPER = {obj.lower(): obj for obj in OBJECTS}
OBJECTS_SINGULAR = [
'alarmclock',
'apple',
'armchair',
'baseballbat',
'basketball',
'bathtub',
'bathtubbasin',
'bed',
'blinds',
'book',
'boots',
'bowl',
'box',
'bread',
'butterknife',
'cabinet',
'candle',
'cart',
'cd',
'cellphone',
'chair',
'cloth',
'coffeemachine',
'countertop',
'creditcard',
'cup',
'curtains',
'desk',
'desklamp',
'dishsponge',
'drawer',
'dresser',
'egg',
'floorlamp',
'footstool',
'fork',
'fridge',
'garbagecan',
'glassbottle',
'handtowel',
'handtowelholder',
'houseplant',
'kettle',
'keychain',
'knife',
'ladle',
'laptop',
'laundryhamper',
'laundryhamperlid',
'lettuce',
'lightswitch',
'microwave',
'mirror',
'mug',
'newspaper',
'ottoman',
'painting',
'pan',
'papertowel',
'papertowelroll',
'pen',
'pencil',
'peppershaker',
'pillow',
'plate',
'plunger',
'poster',
'pot',
'potato',
'remotecontrol',
'safe',
'saltshaker',
'scrubbrush',
'shelf',
'showerdoor',
'showerglass',
'sink',
'sinkbasin',
'soapbar',
'soapbottle',
'sofa',
'spatula',
'spoon',
'spraybottle',
'statue',
'stoveburner',
'stoveknob',
'diningtable',
'coffeetable',
'sidetable'
'teddybear',
'television',
'tennisracket',
'tissuebox',
'toaster',
'toilet',
'toiletpaper',
'toiletpaperhanger',
'toiletpaperroll',
'tomato',
'towel',
'towelholder',
'tvstand',
'vase',
'watch',
'wateringcan',
'window',
'winebottle',
]
OBJECTS_PLURAL = [
'alarmclocks',
'apples',
'armchairs',
'baseballbats',
'basketballs',
'bathtubs',
'bathtubbasins',
'beds',
'blinds',
'books',
'boots',
'bottles',
'bowls',
'boxes',
'bread',
'butterknives',
'cabinets',
'candles',
'carts',
'cds',
'cellphones',
'chairs',
'cloths',
'coffeemachines',
'countertops',
'creditcards',
'cups',
'curtains',
'desks',
'desklamps',
'dishsponges',
'drawers',
'dressers',
'eggs',
'floorlamps',
'footstools',
'forks',
'fridges',
'garbagecans',
'glassbottles',
'handtowels',
'handtowelholders',
'houseplants',
'kettles',
'keychains',
'knives',
'ladles',
'laptops',
'laundryhampers',
'laundryhamperlids',
'lettuces',
'lightswitches',
'microwaves',
'mirrors',
'mugs',
'newspapers',
'ottomans',
'paintings',
'pans',
'papertowels',
'papertowelrolls',
'pens',
'pencils',
'peppershakers',
'pillows',
'plates',
'plungers',
'posters',
'pots',
'potatoes',
'remotecontrollers',
'safes',
'saltshakers',
'scrubbrushes',
'shelves',
'showerdoors',
'showerglassess',
'sinks',
'sinkbasins',
'soapbars',
'soapbottles',
'sofas',
'spatulas',
'spoons',
'spraybottles',
'statues',
'stoveburners',
'stoveknobs',
'diningtables',
'coffeetables',
'sidetable',
'teddybears',
'televisions',
'tennisrackets',
'tissueboxes',
'toasters',
'toilets',
'toiletpapers',
'toiletpaperhangers',
'toiletpaperrolls',
'tomatoes',
'towels',
'towelholders',
'tvstands',
'vases',
'watches',
'wateringcans',
'windows',
'winebottles',
]
MOVABLE_RECEPTACLES = [
'Bowl',
'Box',
'Cup',
'Mug',
'Plate',
'Pan',
'Pot',
]
MOVABLE_RECEPTACLES_SET = set(MOVABLE_RECEPTACLES)
OBJECTS_SET = set(OBJECTS) | MOVABLE_RECEPTACLES_SET
OBJECT_CLASS_TO_ID = {obj: ii for (ii, obj) in enumerate(OBJECTS)}
RECEPTACLES = {
'BathtubBasin',
'Bowl',
'Cup',
'Drawer',
'Mug',
'Plate',
'Shelf',
'SinkBasin',
'Box',
'Cabinet',
'CoffeeMachine',
'CounterTop',
'Fridge',
'GarbageCan',
'HandTowelHolder',
'Microwave',
'PaintingHanger',
'Pan',
'Pot',
'StoveBurner',
'DiningTable',
'CoffeeTable',
'SideTable',
'ToiletPaperHanger',
'TowelHolder',
'Safe',
'BathtubBasin',
'ArmChair',
'Toilet',
'Sofa',
'Ottoman',
'Dresser',
'LaundryHamper',
'Desk',
'Bed',
'Cart',
'TVStand',
'Toaster',
}
NON_RECEPTACLES = OBJECTS_SET - RECEPTACLES
NUM_RECEPTACLES = len(RECEPTACLES)
NUM_CLASSES = len(OBJECTS)
# For generating questions
QUESTION_OBJECT_CLASS_LIST = [
'Spoon',
'Potato',
'Fork',
'Plate',
'Egg',
'Tomato',
'Bowl',
'Lettuce',
'Apple',
'Knife',
'Container',
'Bread',
'Mug',
]
VAL_RECEPTACLE_OBJECTS = {
'Pot': {'Apple',
'AppleSliced',
'ButterKnife',
'DishSponge',
'Egg',
'Fork',
'Knife',
'Ladle',
'Lettuce',
'LettuceSliced',
'Potato',
'PotatoSliced',
'Spatula',
'Spoon',
'Tomato',
'TomatoSliced'},
'Pan': {'Apple',
'AppleSliced',
'ButterKnife',
'DishSponge',
'Egg',
'Fork',
'Knife',
'Ladle',
'Lettuce',
'LettuceSliced',
'Potato',
'PotatoSliced',
'Spatula',
'Spoon',
'Tomato',
'TomatoSliced'},
'Bowl': {'Apple',
'AppleSliced',
'ButterKnife',
'DishSponge',
'Egg',
'Fork',
'Knife',
'Ladle',
'Lettuce',
'LettuceSliced',
'Potato',
'PotatoSliced',
'Spatula',
'Spoon',
'Tomato',
'TomatoSliced',
'Candle',
'CD',
'CellPhone',
'Cloth',
'CreditCard',
'DishSponge',
'KeyChain',
'Mug',
'PaperTowel',
'Pen',
'Pencil',
'RemoteControl',
'Watch'},
'CoffeeMachine': {'Mug'},
'Microwave': {'Apple',
'AppleSliced',
'Bowl',
'Bread',
'BreadSliced',
'Cup',
'Egg',
'Glassbottle',
'Mug',
'Plate',
'Potato',
'PotatoSliced',
'Tomato',
'TomatoSliced'},
'StoveBurner': {'Kettle',
'Pan',
'Pot'},
'Fridge': {'Apple',
'AppleSliced',
'Bowl',
'Bread',
'BreadSliced',
'Cup',
'Egg',
'Glassbottle',
'Lettuce',
'LettuceSliced',
'Mug',
'Pan',
'Plate',
'Pot',
'Potato',
'PotatoSliced',
'Tomato',
'TomatoSliced',
'WineBottle'},
'Mug': {'ButterKnife',
'Fork',
'Knife',
'Pen',
'Pencil',
'Spoon',
'KeyChain',
'Watch'},
'Plate': {'Apple',
'AppleSliced',
'ButterKnife',
'DishSponge',
'Egg',
'Fork',
'Knife',
'Ladle',
'Lettuce',
'LettuceSliced',
'Mug',
'Potato',
'PotatoSliced',
'Spatula',
'Spoon',
'Tomato',
'TomatoSliced',
'AlarmClock',
'Book',
'Candle',
'CD',
'CellPhone',
'Cloth',
'CreditCard',
'DishSponge',
'Glassbottle',
'KeyChain',
'Mug',
'PaperTowel',
'Pen',
'Pencil',
'TissueBox',
'Watch'},
'Cup': {'ButterKnife',
'Fork',
'Spoon'},
'Sofa': {'BasketBall',
'Book',
'Box',
'CellPhone',
'Cloth',
'CreditCard',
'KeyChain',
'Laptop',
'Newspaper',
'Pillow',
'RemoteControl'},
'ArmChair': {'BasketBall',
'Book',
'Box',
'CellPhone',
'Cloth',
'CreditCard',
'KeyChain',
'Laptop',
'Newspaper',
'Pillow',
'RemoteControl'},
'Box': {'AlarmClock',
'Book',
'Candle',
'CD',
'CellPhone',
'Cloth',
'CreditCard',
'DishSponge',
'Glassbottle',
'KeyChain',
'Mug',
'PaperTowel',
'Pen',
'Pencil',
'RemoteControl',
'Statue',
'TissueBox',
'Vase',
'Watch'},
'Ottoman': {'BasketBall',
'Book',
'Box',
'CellPhone',
'Cloth',
'CreditCard',
'KeyChain',
'Laptop',
'Newspaper',
'Pillow',
'RemoteControl'},
'Dresser': {'AlarmClock',
'BasketBall',
'Book',
'Bowl',
'Box',
'Candle',
'CD',
'CellPhone',
'Cloth',
'CreditCard',
'Cup',
'Glassbottle',
'KeyChain',
'Laptop',
'Mug',
'Newspaper',
'Pen',
'Pencil',
'Plate',
'RemoteControl',
'SprayBottle',
'Statue',
'TennisRacket',
'TissueBox',
'ToiletPaper',
'ToiletPaperRoll',
'Vase',
'Watch',
'WateringCan',
'WineBottle'},
'LaundryHamper': {'Cloth'},
'Desk': {'AlarmClock',
'BasketBall',
'Book',
'Bowl',
'Box',
'Candle',
'CD',
'CellPhone',
'Cloth',
'CreditCard',
'Cup',
'Glassbottle',
'KeyChain',
'Laptop',
'Mug',
'Newspaper',
'Pen',
'Pencil',
'Plate',
'RemoteControl',
'SoapBottle',
'SprayBottle',
'Statue',
'TennisRacket',
'TissueBox',
'ToiletPaper',
'ToiletPaperRoll',
'Vase',
'Watch',
'WateringCan',
'WineBottle'},
'Bed': {'BaseballBat',
'BasketBall',
'Book',
'CellPhone',
'Laptop',
'Newspaper',
'Pillow',
'TennisRacket'},
'Toilet': {'Candle',
'Cloth',
'DishSponge',
'Newspaper',
'PaperTowel',
'SoapBar',
'SoapBottle',
'SprayBottle',
'TissueBox',
'ToiletPaper',
'ToiletPaperRoll',
'HandTowel'},
'ToiletPaperHanger': {'ToiletPaper',
'ToiletPaperRoll'},
'TowelHolder': {'Towel'},
'HandTowelHolder': {'HandTowel'},
'Cart': {'Candle',
'Cloth',
'DishSponge',
'Mug',
'PaperTowel',
'Plunger',
'SoapBar',
'SoapBottle',
'SprayBottle',
'Statue',
'TissueBox',
'ToiletPaper',
'ToiletPaperRoll',
'Vase',
'HandTowel'},
'BathtubBasin': {'Cloth',
'DishSponge',
'SoapBar',
'HandTowel'},
'SinkBasin': {'Apple',
'AppleSliced',
'Bowl',
'ButterKnife',
'Cloth',
'Cup',
'DishSponge',
'Egg',
'Glassbottle',
'Fork',
'Kettle',
'Knife',
'Ladle',
'Lettuce',
'LettuceSliced',
'Mug',
'Pan',
'Plate',
'Pot',
'Potato',
'PotatoSliced',
'SoapBar',
'Spatula',
'Spoon',
'Tomato',
'TomatoSliced',
'HandTowel'},
'Cabinet': {'Book',
'Bowl',
'Box',
'Candle',
'CD',
'Cloth',
'Cup',
'DishSponge',
'Glassbottle',
'Kettle',
'Ladle',
'Mug',
'Newspaper',
'Pan',
'PepperShaker',
'Plate',
'Plunger',
'Pot',
'SaltShaker',
'SoapBar',
'SoapBottle',
'SprayBottle',
'TissueBox',
'ToiletPaper',
'ToiletPaperRoll',
'Vase',
'WateringCan',
'WineBottle',
'HandTowel'},
'TableTop': {'AlarmClock',
'Apple',
'AppleSliced',
'BaseballBat',
'BasketBall',
'Book',
'Bowl',
'Box',
'Bread',
'BreadSliced',
'ButterKnife',
'Candle',
'CD',
'CellPhone',
'Cloth',
'CreditCard',
'Cup',
'DishSponge',
'Glassbottle',
'Egg',
'Fork',
'Kettle',
'KeyChain',
'Knife',
'Ladle',
'Laptop',
'Lettuce',
'LettuceSliced',
'Mug',
'Newspaper',
'Pan',
'PaperTowel',
'Pen',
'Pencil',
'PepperShaker',
'Plate',
'Pot',
'Potato',
'PotatoSliced',
'RemoteControl',
'SaltShaker',
'SoapBar',
'SoapBottle',
'Spatula',
'Spoon',
'SprayBottle',
'Statue',
'TennisRacket',
'TissueBox',
'ToiletPaper',
'ToiletPaperRoll',
'Tomato',
'TomatoSliced',
'Vase',
'Watch',
'WateringCan',
'WineBottle',
'HandTowel'},
'CounterTop': {'AlarmClock',
'Apple',
'AppleSliced',
'BaseballBat',
'BasketBall',
'Book',
'Bowl',
'Box',
'Bread',
'BreadSliced',
'ButterKnife',
'Candle',
'CD',
'CellPhone',
'Cloth',
'CreditCard',
'Cup',
'DishSponge',
'Egg',
'Glassbottle',
'Fork',
'Kettle',
'KeyChain',
'Knife',
'Ladle',
'Laptop',
'Lettuce',
'LettuceSliced',
'Mug',
'Newspaper',
'Pan',
'PaperTowel',
'Pen',
'Pencil',
'PepperShaker',
'Plate',
'Pot',
'Potato',
'PotatoSliced',
'RemoteControl',
'SaltShaker',
'SoapBar',
'SoapBottle',
'Spatula',
'Spoon',
'SprayBottle',
'Statue',
'TennisRacket',
'TissueBox',
'ToiletPaper',
'ToiletPaperRoll',
'Tomato',
'TomatoSliced',
'Vase',
'Watch',
'WateringCan',
'WineBottle',
'HandTowel'},
'Shelf': {'AlarmClock',
'Book',
'Bowl',
'Box',
'Candle',
'CD',
'CellPhone',
'Cloth',
'CreditCard',
'Cup',
'DishSponge',
'Glassbottle',
'Kettle',
'KeyChain',
'Mug',
'Newspaper',
'PaperTowel',
'Pen',
'Pencil',
'PepperShaker',
'Plate',
'Pot',
'RemoteControl',
'SaltShaker',
'SoapBar',
'SoapBottle',
'SprayBottle',
'Statue',
'TissueBox',
'ToiletPaper',
'ToiletPaperRoll',
'Vase',
'Watch',
'WateringCan',
'WineBottle',
'HandTowel'},
'Drawer': {'Book',
'ButterKnife',
'Candle',
'CD',
'CellPhone',
'Cloth',
'CreditCard',
'DishSponge',
'Fork',
'KeyChain',
'Knife',
'Ladle',
'Newspaper',
'Pen',
'Pencil',
'PepperShaker',
'RemoteControl',
'SaltShaker',
'SoapBar',
'SoapBottle',
'Spatula',
'Spoon',
'SprayBottle',
'TissueBox',
'ToiletPaper',
'ToiletPaperRoll',
'Watch',
'WateringCan',
'HandTowel'},
'GarbageCan': {'Apple',
'AppleSliced',
'Bread',
'BreadSliced',
'CD',
'Cloth',
'DishSponge',
'Egg',
'Lettuce',
'LettuceSliced',
'Newspaper',
'PaperTowel',
'Pen',
'Pencil',
'Potato',
'PotatoSliced',
'SoapBar',
'SoapBottle',
'SprayBottle',
'TissueBox',
'ToiletPaper',
'ToiletPaperRoll',
'Tomato',
'TomatoSliced',
'WineBottle',
'HandTowel'},
'Safe': {'CD',
'CellPhone',
'CreditCard',
'KeyChain',
'Statue',
'Vase',
'Watch'},
'TVStand': {'TissueBox'},
'Toaster': {'BreadSliced'},
}
VAL_RECEPTACLE_OBJECTS['DiningTable'] = VAL_RECEPTACLE_OBJECTS['TableTop']
VAL_RECEPTACLE_OBJECTS['CoffeeTable'] = VAL_RECEPTACLE_OBJECTS['TableTop']
VAL_RECEPTACLE_OBJECTS['SideTable'] = VAL_RECEPTACLE_OBJECTS['TableTop']
del VAL_RECEPTACLE_OBJECTS['TableTop']
NON_RECEPTACLES_SET = (OBJECTS_SET - set(VAL_RECEPTACLE_OBJECTS.keys())) | set(MOVABLE_RECEPTACLES)
VAL_ACTION_OBJECTS = {
'Heatable': {'Apple',
'AppleSliced',
'Bread',
'BreadSliced',
'Cup',
'Egg',
'Mug',
'Plate',
'Potato',
'PotatoSliced',
'Tomato',
'TomatoSliced'},
'Coolable': {'Apple',
'AppleSliced',
'Bowl',
'Bread',
'BreadSliced',
'Cup',
'Egg',
'Lettuce',
'LettuceSliced',
'Mug',
'Pan',
'Plate',
'Pot',
'Potato',
'PotatoSliced',
'Tomato',
'TomatoSliced',
'WineBottle'},
'Cleanable': {'Apple',
'AppleSliced',
'Bowl',
'ButterKnife',
'Cloth',
'Cup',
'DishSponge',
'Egg',
'Fork',
'Kettle',
'Knife',
'Ladle',
'Lettuce',
'LettuceSliced',
'Mug',
'Pan',
'Plate',
'Pot',
'Potato',
'PotatoSliced',
'SoapBar',
'Spatula',
'Spoon',
'Tomato',
'TomatoSliced'},
'Toggleable': {'DeskLamp',
'FloorLamp'},
'Sliceable': {'Apple',
'Bread',
'Egg',
'Lettuce',
'Potato',
'Tomato'}
}
RECEPTACLES_SB = set(RECEPTACLES) | {'Sink', 'Bathtub'}
OBJECTS_DETECTOR = (set(OBJECTS_WSLICED) - set(RECEPTACLES_SB)) | set(MOVABLE_RECEPTACLES)
OBJECTS_DETECTOR -= {'Blinds', 'Boots', 'Cart', 'Chair', 'Curtains', 'Footstool', 'Mirror', 'LightSwtich', 'Painting', 'Poster', 'ShowerGlass', 'Window'}
STATIC_RECEPTACLES = set(RECEPTACLES_SB) - set(MOVABLE_RECEPTACLES)
OBJECTS_DETECTOR = sorted(list(OBJECTS_DETECTOR))
STATIC_RECEPTACLES = sorted(list(STATIC_RECEPTACLES))
ALL_DETECTOR = sorted(list(set(OBJECTS_DETECTOR) | set(STATIC_RECEPTACLES)))
# object parents
OBJ_PARENTS = {obj: obj for obj in OBJECTS}
OBJ_PARENTS['AppleSliced'] = 'Apple'
OBJ_PARENTS['BreadSliced'] = 'Bread'
OBJ_PARENTS['LettuceSliced'] = 'Lettuce'
OBJ_PARENTS['PotatoSliced'] = 'Potato'
OBJ_PARENTS['TomatoSliced'] = 'Tomato'
# force a different horizon view for objects of (type, location). If the location is None, force this horizon for all
# objects of that type.
FORCED_HORIZON_OBJS = {
('FloorLamp', None): 0,
('Fridge', 18): 30,
('Toilet', None): 15,
}
# openable objects with fixed states for transport.
FORCED_OPEN_STATE_ON_PICKUP = {
'Laptop': False,
}
# list of openable classes.
OPENABLE_CLASS_LIST = ['Fridge', 'Cabinet', 'Microwave', 'Drawer', 'Safe', 'Box']
OPENABLE_CLASS_SET = set(OPENABLE_CLASS_LIST)
########################################################################################################################