|
|
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 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
from collections import OrderedDict |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
MAX_NUM_OF_OBJ_INSTANCES = 3 |
|
|
PICKUP_REPEAT_MAX = 4 |
|
|
RECEPTACLE_SPARSE_POINTS = 50 |
|
|
RECEPTACLE_EMPTY_POINTS = 200 |
|
|
|
|
|
MIN_VISIBLE_RATIO = 0.0011 |
|
|
PLANNER_MAX_STEPS = 100 |
|
|
MAX_EPISODE_LENGTH = 1000 |
|
|
|
|
|
FORCED_SAMPLING = False |
|
|
PRUNE_UNREACHABLE_POINTS = False |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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" |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
BEFORE = 0 |
|
|
MIDDLE = 1 |
|
|
AFTER = 2 |
|
|
|
|
|
|
|
|
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] |
|
|
} |
|
|
|
|
|
|
|
|
VIDEO_FRAME_RATE = 5 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
save_path = DATA_SAVE_PATH |
|
|
data_dict = OrderedDict() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
TRAIN_SCENE_NUMBERS = list(range(7, 31)) |
|
|
TRAIN_SCENE_NUMBERS.extend(list(range(207, 231))) |
|
|
TRAIN_SCENE_NUMBERS.extend(list(range(307, 331))) |
|
|
TRAIN_SCENE_NUMBERS.extend(list(range(407, 431))) |
|
|
|
|
|
TEST_SCENE_NUMBERS = list(range(1, 7)) |
|
|
TEST_SCENE_NUMBERS.extend(list(range(201, 207))) |
|
|
TEST_SCENE_NUMBERS.extend(list(range(301, 307))) |
|
|
TEST_SCENE_NUMBERS.extend(list(range(401, 407))) |
|
|
|
|
|
SCENE_NUMBERS = TRAIN_SCENE_NUMBERS + TEST_SCENE_NUMBERS |
|
|
|
|
|
|
|
|
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) |
|
|
|
|
|
|
|
|
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))) |
|
|
|
|
|
|
|
|
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' |
|
|
|
|
|
|
|
|
|
|
|
FORCED_HORIZON_OBJS = { |
|
|
('FloorLamp', None): 0, |
|
|
('Fridge', 18): 30, |
|
|
('Toilet', None): 15, |
|
|
} |
|
|
|
|
|
|
|
|
FORCED_OPEN_STATE_ON_PICKUP = { |
|
|
'Laptop': False, |
|
|
} |
|
|
|
|
|
|
|
|
OPENABLE_CLASS_LIST = ['Fridge', 'Cabinet', 'Microwave', 'Drawer', 'Safe', 'Box'] |
|
|
OPENABLE_CLASS_SET = set(OPENABLE_CLASS_LIST) |
|
|
|
|
|
|
|
|
|