def main(random_selection=False, headless=False, short_exec=False):
"""
Demo to use the raycasting-based sampler to load objects onTop and/or inside another
Loads a cabinet, a microwave open on top of it, and two plates with apples on top, one inside and one on top of the cabinet
Then loads a bookcase and cracker boxes inside of it
"""
og.log.info(f"Demo {__file__}\n " + "*" * 80 + "\n Description:\n" + main.__doc__ + "*" * 80)
# Create the scene config to load -- empty scene
cfg = {
"scene": {
"type": "Scene",
},
}
# Define objects we want to sample at runtime
microwave_cfg = dict(
type="DatasetObject",
name="microwave",
category="microwave",
model="hjjxmi",
)
cabinet_cfg = dict(
type="DatasetObject",
name="cabinet",
category="bottom_cabinet",
model="songes",
)
plate_cfgs = [
dict(
type="DatasetObject",
name=f"plate{i}",
category="plate",
model="iawoof",
scale=0.6,
# bounding_box=th.tensor([0.20, 0.20, 0.02]),
)
for i in range(2)
]
apple_cfgs = [
dict(
type="DatasetObject",
name=f"apple{i}",
category="apple",
model="agveuv",
)
for i in range(2)
]
bookcase_cfg = dict(
type="DatasetObject",
name="bookcase",
category="bookcase",
model="gsksby",
)
box_cfgs = [
dict(
type="DatasetObject",
name=f"box{i}",
category="box_of_crackers",
model="cmdigf",
)
for i in range(5)
]
# Compose objects cfg
objects_cfg = [
microwave_cfg,
cabinet_cfg,
*plate_cfgs,
*apple_cfgs,
bookcase_cfg,
*box_cfgs,
]
# Update their spawn positions so they don't collide immediately
for i, obj_cfg in enumerate(objects_cfg):
obj_cfg["position"] = [100 + i, 100 + i, 100 + i]
cfg["objects"] = objects_cfg
# Create the environment
env = og.Environment(configs=cfg)
env.step([])
# Sample microwave and boxes
sample_boxes_on_bookcase(env)
sample_microwave_plates_apples(env)
max_steps = 100 if short_exec else -1
step = 0
while step != max_steps:
env.step(th.empty(0))
step += 1
# Always close environment at the end
og.shutdown()