alfred / constants.py
ch-min-ys's picture
delete ff_planner
483f96c
from collections import OrderedDict
import os
########################################################################################################################
# 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 = True # 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 = 30
########################################################################################################################
# Data & Storage
save_path = DATA_SAVE_PATH
data_dict = OrderedDict() # dictionary for storing trajectory data to be dumped
########################################################################################################################
# Unity Hyperparameters
# BUILD_PATH = None
# BUILD_PATH = os.environ['ALFRED_ROOT']+'/builds/thor-Linux64-local/thor-Linux64-local'
# BUILD_PATH = '/home/user/twoong_laboratory/0504/ai2thor/unity/builds/thor-Linux64-local/thor-Linux64-local'
# BUILD_PATH = '/media/user/Data/0504/ai2thor/unity/builds/thor-Linux64-local/thor-Linux64-local'
BUILD_PATH = '/home/user/Desktop/builds/thor-Linux64-local/thor-Linux64-local'
X_DISPLAY = '1'
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 = {"Entire": range(1, 151),
"Splitted": range(201, 301)}
OBJECTS = [
"AirConditioner",
"AirPurifier",
"AlarmClock",
"Apple",
"ArmChair",
"Banana",
"BaseballBat",
"Basket",
"BasketBall",
"Bathtub",
"BathtubBasin",
"Bed",
"Book",
"Bottle",
"Bowl",
"Box",
"Bread",
"BreadSliced",
"ButterKnife",
"CD",
"Cabinet",
"Caculator",
"Candle",
"CannedFood",
"CellPhone",
"Chair",
"Cloth",
"CoffeeMachine",
"CoffeeTable",
"Comb",
"ComputerMouse",
"Controller",
"Cookie",
"CounterTop",
"CreditCard",
"Cup",
"CuttingBoard",
"Desk",
"DeskLamp",
"Desktop",
"DiningTable",
"DishSponge",
"Drawer",
"Dresser",
"DressingTable",
"Dumbbell",
"Egg",
"Eggplant",
"Fan",
"Faucet",
"FloorLamp",
"Flute",
"Footstool",
"Fork",
"Fridge",
"GarbageCan",
"Grape",
"Hammer",
"HandTowel",
"HandTowelHolder",
"Headband",
"Kettle",
"KeyChain",
"Keyboard",
"Knife",
"Ladle",
"Laptop",
"Lemon",
"Lettuce",
"Mango",
"Microwave",
"Mirror",
"Monitor",
"Mug",
"Newspaper",
"Onion",
"Ottoman",
"Pan",
"Peach",
"Pen",
"Pencil",
"PencilCase",
"PepperShaker",
"Pillow",
"Plate",
"Plum",
"Plunger",
"Pot",
"Potato",
"Pumpkin",
"RemoteControl",
"Safe",
"SaltShaker",
"Scissors",
"Shelf",
"ShelvingUnit",
"ShowerCurtain",
"ShowerHead",
"SideTable",
"Sink",
"SinkBasin",
"SoapBar",
"SoapBottle",
"Sofa",
"Spatula",
"Spoon",
"SprayBottle",
"Statue",
"Stool",
"StoveBurner",
"Strawberry",
"TVStand",
"Table",
"Tambourine",
"Television",
"TennisRacket",
"TissueBox",
"Toilet",
"ToiletPaper",
"Tomato",
"Towel",
"TowelHolder",
"Undefined",
"Vase",
"WashingMachine",
"Watch",
"WateringCan",
"Watermelon",
"WineBottle"
]
OBJECTS_WSLICED = sorted(OBJECTS +
["AppleSliced", "BreadSliced", "LettuceSliced", "EggCracked", "PotatoSliced", "TomatoSliced", "OnionSliced", "StrawberrySliced", "LemonSliced", "BananaSliced", "EggplantSliced"])
OBJECTS_LOWER_TO_UPPER = {obj.lower(): obj for obj in OBJECTS}
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',
'Bathtub',
'ArmChair',
'Toilet',
'Sofa',
'Ottoman',
'Dresser',
'LaundryHamper',
'Desk',
'Bed',
'Cart',
'TVStand',
'Toaster',
'DressingTable',
'Sink',
'Table'
}
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',
]
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)))
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'}
}
# 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'
OBJ_PARENTS['EggCracked'] = 'Egg'
OBJ_PARENTS['OnionSliced'] = 'Onion'
OBJ_PARENTS['StrawberrySliced'] = 'Strawberry'
OBJ_PARENTS['LemonSliced'] = 'Lemon'
OBJ_PARENTS['BananaSliced'] = 'Banana'
OBJ_PARENTS['EggplantSliced'] = 'Eggplant'
# 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)
# print(len(OBJECTS_WSLICED))
########################################################################################################################