import numpy as np from perception_utils import detect objects = ['green block', 'yellow line'] # Query: ee. ee = detect('ee')[0] ret_val = ee objects = ['drawer', 'blue block', 'yellow block'] # Query: topmost handle. handles = detect('drawer handle') # topmost so sort by z, take the last one handles = sorted(handles, key=lambda x: x.position[2]) top_handle = handles[-1] ret_val = top_handle objects = ['yellow block', 'pink block', 'brown line', 'pink block'] # Query: second to the left block. blocks = detect('block') # second to the left so sort by y, take the second one blocks = sorted(blocks, key=lambda x: x.position[1]) second_left_block = blocks[1] ret_val = second_left_block objects = ['blue line', 'pink line', 'green block'] # Query: table. table = detect('table')[0] ret_val = table objects = ['green line', 'drawer', 'yellow block'] # Query: second to the bottom handle. handles = detect('drawer handle') # second to the bottom so sort by z, take the second one handles = sorted(handles, key=lambda x: x.position[2]) second_bottom_handle = handles[1] ret_val = second_bottom_handle objects = ['brown line', 'brown block'] # Query: brown line. brown_line = detect('brown line')[0] ret_val = brown_line objects = ['green block', 'brown block', 'yellow line'] # Query: block. block = detect('green block')[0] ret_val = block objects = ['pink block', 'pink line', 'blue block'] # Query: block closest to the pink line. blocks = detect('block') pink_line = detect('pink line')[0] closest_block = min(blocks, key=lambda x: np.linalg.norm(x.position - pink_line.position)) ret_val = closest_block objects = ['blue block', 'blue line', 'green block', 'pink block', 'brown block'] # Query: the block that is on top of the blue block. blocks = detect('block') blue_block = detect('blue block')[0] # find the block that is on top of the blue block for block in blocks: if block.position[2] > blue_block.position[2]: ret_val = block break objects = ['drawer'] # Query: top drawer handle. handles = detect('drawer handle') # top drawer handle so sort by z, take the last one handles = sorted(handles, key=lambda x: x.position[2]) top_handle = handles[-1] ret_val = top_handle