se3labs.sdk.eval.tasksPredefined Evaluation Tasks
TaskRegistry is the central registry, keyed by the exact task IDs shown on the
documentation site. TaskRegistry.get_task("ROBODOJO-REAL-20") constructs a definition;
TaskRegistry.get_job("ROBODOJO-REAL-20", policy=policy, seed=42, episodes=20) samples
a ready-to-submit JobRequest.
All definitions use PascalCase task names, such as PlugInCharger;
their semantic dataclasses use the matching name, PlugInChargerParameters.
These classes provide statically typed construction and parameter overrides.
All ten tasks default to 180 seconds. The policy controls the starting arm pose
through initialize(); for this benchmark, return zero joint angles and open grippers.
Press By Number requires measured geometry; Align Blocks requires calibrated
tolerances. Pass these constructor arguments through either registry method.
TaskRegistry
TaskRegistry = _TaskRegistry((PackObjectsIntoBox, HangMugs, CoverBlocks, PressByNumber, PlugInCharger, InsertTubes, ClassifyObjects, PlayStackingToy, AlignBlocks, ClassifyObjectsByLanguage))
All predefined tasks, keyed by the canonical task IDs on the documentation site.
PackObjectsIntoBox
class PackObjectsIntoBox(RoboDojoTask[PackObjectsIntoBoxParameters])
Attributes
name = 'ROBODOJO-REAL-03'#description = 'Pack Objects Into Box'#instruction = 'Place the car, shoe, toothbrush, and hammer into the open cardboard box. Point the car nose, shoe toe, toothbrush head, and hammer striking face to the {direction}.'#reset_instruction = 'Place all four objects outside the open box at the sampled poses; keep the attached lid clear. The car nose, shoe toe, toothbrush head, and hammer striking face define their fronts.'#progress_rule = 'An object counts when it is fully inside the box, settled, and facing {direction}: car nose, shoe toe, toothbrush head, hammer striking face. The box may stay open but must remain within its initial footprint.'#milestones = ((0, 'No milestone below is reached.'), (10, 'One object counts and the gripper is open.'), (25, 'Two objects count.'), (50, 'Three objects count.'), (100, 'All four objects count. Both arms are back at origin.'))#metrics = (Metrics.binned('failed_grasps', 'Grasps that close on or around a task object without lifting it clear of the table.'), Metrics.binned('drops', 'Held objects that fall before they are released at a target.'), Metrics.binned('re_placements', 'Objects picked up or pushed again after being released in the box.'), Metrics.binary('box_displaced', 'Did the box leave its initial footprint at any time?'))#layout = LayoutSpec(objects=(LayoutObject('open_cardboard_box', Rectangle(0.36, 0.22), RandomPose(SE2(0.6, 0.145) @ Rectangle(0.72, 0.23), yaw=Uniform(-20 * pi / 180, 20 * pi / 180)), label='Open cardboard box'), LayoutObject('orange_toy_car', Rectangle(0.12, 0.06), RandomPose(SE2(0.6, 0.33) @ Rectangle(1.12, 0.58)), label='Orange toy car'), LayoutObject('red_shoe', Rectangle(0.27, 0.1), RandomPose(SE2(0.6, 0.33) @ Rectangle(1.12, 0.58)), label='Red shoe'), LayoutObject('blue_electric_toothbrush', Rectangle(0.19, 0.03), RandomPose(SE2(0.6, 0.33) @ Rectangle(1.12, 0.58)), label='Blue electric toothbrush'), LayoutObject('claw_hammer', Rectangle(0.32, 0.04), RandomPose(SE2(0.6, 0.33) @ Rectangle(1.12, 0.58)), label='Claw hammer')))#
Methods
sample_parameters(random: Random) -> PackObjectsIntoBoxParameters#
HangMugs
class HangMugs(RoboDojoTask[HangMugsParameters])
Attributes
name = 'ROBODOJO-REAL-05'#description = 'Hang Mugs'#instruction = 'Hang the white mug on peg {peg_white} and the pink mug on peg {peg_pink} of the wooden mug tree, by their handles.'#reset_instruction = 'Place the upright rack and both empty mugs at the sampled poses, with handles along their local +x arrows. Number pegs by tip height, lowest to highest; white uses {peg_white}, pink uses {peg_pink}.'#progress_rule = 'A mug counts when it hangs securely by its handle on its assigned peg; a mug resting on the base or table does not count.'#milestones = ((0, 'No milestone below is reached.'), (40, 'One mug counts and the gripper is open.'), (100, 'Both mugs count and the rack is upright. Both arms are back at origin.'))#metrics = (Metrics.binned('failed_grasps', 'Grasps that close on or around a task object without lifting it clear of the table.'), Metrics.binned('drops', 'Held objects that fall before they are released at a target.'), Metrics.binned('missed_hangs', 'Attempts where a handle reaches a peg but the mug does not end up hanging from it.'), Metrics.binary('rack_disturbed', 'Did the rack tip or slide at any time?'))#layout = LayoutSpec(objects=(LayoutObject('wooden_mug_tree_six_pegs', Circle(0.08), RandomPose(SE2(0.6, 0.17) @ Rectangle(0.8, 0.26)), label='Wooden mug tree, six pegs'), LayoutObject('white_mug', Circle(0.045), RandomPose(SE2(0.6, 0.33) @ Rectangle(1.12, 0.58)), label='White mug'), LayoutObject('pink_mug', Circle(0.045), RandomPose(SE2(0.6, 0.33) @ Rectangle(1.12, 0.58)), label='Pink mug')))#
Methods
sample_parameters(random: Random) -> HangMugsParameters#
CoverBlocks
class CoverBlocks(RoboDojoTask[CoverBlocksParameters])
Attributes
name = 'ROBODOJO-REAL-13'#description = 'Cover Blocks'#instruction = 'Cover the blocks in the order {cover_order[0]}, {cover_order[1]}, {cover_order[2]} and remember their colors. Then uncover them in this order: {uncover_order[0]}, {uncover_order[1]}, {uncover_order[2]}.'#reset_instruction = 'Place each uncovered block at its sampled pose with its yellow cup 12 cm in front in table coordinates. Keep cups upright and the three blocks visible.'#milestones = ((0, 'No milestone below is reached.'), (5, 'All three blocks were covered by upright cups, in the order {cover_order[0]}, {cover_order[1]}, {cover_order[2]}.'), (15, 'Then {uncover_order[0]} was uncovered first; the other two stay covered.'), (30, 'Then {uncover_order[1]} was uncovered second; {uncover_order[2]} stays covered.'), (100, 'Then {uncover_order[2]} was uncovered third, and every cup is upright. Both arms are back at origin.'))#metrics = (Metrics.binned('wrong_cups_lifted', 'Lifts of a cup that does not hide the next color in the uncover order.'), Metrics.binned('cups_knocked_over', 'Cups that end up on their side or upside down at any time.'), Metrics.binned('blocks_displaced', 'Blocks pushed off their starting spot.'))#layout = LayoutSpec(objects=(LayoutObject('green_block', Rectangle(0.03, 0.03), RandomPose(SE2(0.6, 0.12) @ Rectangle(0.96, 0.16)), label='Green block'), LayoutObject('light_blue_block', Rectangle(0.03, 0.03), RandomPose(SE2(0.6, 0.12) @ Rectangle(0.96, 0.16)), label='Light-blue block'), LayoutObject('dark_blue_block', Rectangle(0.03, 0.03), RandomPose(SE2(0.6, 0.12) @ Rectangle(0.96, 0.16)), label='Dark-blue block'), LayoutObject('yellow_cup_1', Circle(0.045), RelativePose('green_block', SE2(0.0, 0.12), Frame.TABLE), label='Yellow cup'), LayoutObject('yellow_cup_2', Circle(0.045), RelativePose('light_blue_block', SE2(0.0, 0.12), Frame.TABLE), label='Yellow cup'), LayoutObject('yellow_cup_3', Circle(0.045), RelativePose('dark_blue_block', SE2(0.0, 0.12), Frame.TABLE), label='Yellow cup')))#
Methods
sample_parameters(random: Random) -> CoverBlocksParameters#
PressByNumber
Supply measured button/card footprints and poses.
The layout must contain left_button, middle_button,
confirm_button, left_card, and middle_card.
Attributes
layout#name = 'ROBODOJO-REAL-17'#description = 'Press By Number'#instruction = 'Press the {count_first} count button {n_first} times, press the right dark-blue confirm button, press the {count_second} count button {n_second} times, press the right dark-blue confirm button again.'#reset_instruction = 'Reset the counters; keep buttons green, cyan, dark blue from left to right. Put card {n_first} above the {count_first} button and card {n_second} above the {count_second} button; the right button confirms.'#milestones = ((0, 'No milestone below is reached.'), (100, 'The presses were exactly {count_first} ×{n_first} → right confirm → {count_second} ×{n_second} → right confirm, with no extra, missing, or out-of-order press. Both arms are back at origin.'))#metrics = (Metrics.count('first_count_presses', 'Registered presses of the {count_first} count button; target {n_first}.'), Metrics.count('second_count_presses', 'Registered presses of the {count_second} count button; target {n_second}.'), Metrics.count('confirm_presses', 'Registered presses of the right confirm button; target 2.'), Metrics.binary('order_kept', 'Did every press follow {count_first} → confirm → {count_second} → confirm?'))#
Methods
sample_parameters(random: Random) -> PressByNumberParameters#
PlugInCharger
class PlugInCharger(RoboDojoTask[PlugInChargerParameters])
Attributes
name = 'ROBODOJO-REAL-20'#description = 'Plug In Charger'#instruction = 'Insert the white USB power adapter fully into outlet {outlet} of the disconnected power strip.'#reset_instruction = 'Keep the strip unplugged and de-energized, with its cord clear; place the adapter prongs up. Number outlets 1–6 from the switch end, target {outlet}; mark the allowed strip footprint before the episode.'#milestones = ((0, 'No milestone below is reached.'), (100, "The adapter is seated flush and upright in outlet {outlet}, no prong is exposed beyond the strip's normal fit, and the strip is within its allowed footprint. Both arms are back at origin."))#metrics = (Metrics.binned('failed_grasps', 'Grasps that close on or around a task object without lifting it clear of the table.'), Metrics.binned('drops', 'Held objects that fall before they are released at a target.'), Metrics.binned('insertion_attempts', 'Times the prongs touch the strip face before the final insertion.'), Metrics.binary('strip_displaced', 'Did the strip leave its allowed footprint at any time?'))#layout = LayoutSpec(objects=(LayoutObject('power_strip_six_outlets_unplugged', Rectangle(0.36, 0.05), RandomPose(SE2(0.6, 0.17) @ Rectangle(0.8, 0.26), yaw=Uniform(-60 * pi / 180, 60 * pi / 180)), label='Power strip, six outlets, unplugged'), LayoutObject('white_usb_adapter', Rectangle(0.03, 0.035), RandomPose(SE2(0.6, 0.33) @ Rectangle(1.12, 0.58)), label='White USB adapter')))#
Methods
sample_parameters(random: Random) -> PlugInChargerParameters#
InsertTubes
class InsertTubes(RoboDojoTask[InsertTubesParameters])
Attributes
name = 'ROBODOJO-REAL-21'#description = 'Insert Tubes'#instruction = 'Insert both capped tubes, one by one, into wells {well_1} and {well_2} of the orange rack.'#reset_instruction = 'Place both capped tubes outside the rack. Number the eight tube wells left to right, back row first; mark wells {well_1} and {well_2}, the seating depth, and the allowed rack footprint.'#progress_rule = 'A tube counts when it stands upright in well {well_1} or {well_2}, seated to the marked depth.'#milestones = ((0, 'No milestone below is reached.'), (50, 'One tube counts and the gripper is open.'), (100, 'Both tubes count and the rack is within its allowed footprint. Both arms are back at origin.'))#metrics = (Metrics.binned('failed_grasps', 'Grasps that close on or around a task object without lifting it clear of the table.'), Metrics.binned('drops', 'Held objects that fall before they are released at a target.'), Metrics.binned('missed_insertions', 'Times a tube tip contacts the rack without entering a target well.'), Metrics.binned('tubes_dislodged', 'Inserted tubes pulled out or knocked over afterwards.'))#layout = LayoutSpec(objects=(LayoutObject('orange_tube_rack_eight_tube_wells', Rectangle(0.22, 0.09), RandomPose(SE2(0.6, 0.15) @ Rectangle(0.8, 0.22), yaw=Uniform(-20 * pi / 180, 20 * pi / 180)), label='Orange tube rack, eight tube wells'), LayoutObject('capped_tube_1', Rectangle(0.11, 0.03), RandomPose(SE2(0.6, 0.33) @ Rectangle(1.12, 0.58)), label='Capped tube'), LayoutObject('capped_tube_2', Rectangle(0.11, 0.03), RandomPose(SE2(0.6, 0.33) @ Rectangle(1.12, 0.58)), label='Capped tube')))#
Methods
sample_parameters(random: Random) -> InsertTubesParameters#
ClassifyObjects
Attributes
name = 'ROBODOJO-REAL-28'#description = 'Classify Objects'#instruction = 'Sort the objects by category into the three bins. Keep all writing tools together, the toy vehicle in its own bin, and all camera equipment together. Any category may use any bin.'#reset_instruction = 'Empty the three bins and place all six objects outside them at the sampled poses. Writing tools: two pens; toy vehicle: race car; camera equipment: camera and two mounts.'#progress_rule = 'A bin counts when it holds every object of one category and nothing else: writing tools (black pen, white pen), toy vehicle (race car), camera equipment (camera, two mounts). Any category may use any bin.'#milestones = ((0, 'No milestone below is reached.'), (15, 'One bin counts and the gripper is open.'), (40, 'Two bins count.'), (100, 'All three bins count and all six objects are settled. Both arms are back at origin.'))#metrics = (Metrics.binned('failed_grasps', 'Grasps that close on or around a task object without lifting it clear of the table.'), Metrics.binned('drops', 'Held objects that fall before they are released at a target.'), Metrics.binned('wrong_bin_placements', 'Objects released into a bin holding a different category.'), Metrics.binned('objects_moved_out', 'Objects taken out of a bin after being released there.'))#layout = LayoutSpec(objects=(LayoutObject('orange_bin', Rectangle(0.16, 0.11), RandomPose(SE2(0.6, 0.15) @ Rectangle(1.0, 0.22), yaw=Uniform(-10 * pi / 180, 10 * pi / 180)), label='Orange bin'), LayoutObject('blue_bin', Rectangle(0.16, 0.11), RandomPose(SE2(0.6, 0.15) @ Rectangle(1.0, 0.22), yaw=Uniform(-10 * pi / 180, 10 * pi / 180)), label='Blue bin'), LayoutObject('green_bin', Rectangle(0.16, 0.11), RandomPose(SE2(0.6, 0.15) @ Rectangle(1.0, 0.22), yaw=Uniform(-10 * pi / 180, 10 * pi / 180)), label='Green bin'), LayoutObject('black_pen', Rectangle(0.15, 0.012), RandomPose(SE2(0.6, 0.33) @ Rectangle(1.12, 0.58)), label='Black pen (writing tool)'), LayoutObject('white_pen', Rectangle(0.15, 0.012), RandomPose(SE2(0.6, 0.33) @ Rectangle(1.12, 0.58)), label='White pen (writing tool)'), LayoutObject('wooden_race_car', Rectangle(0.05, 0.09), RandomPose(SE2(0.6, 0.33) @ Rectangle(1.12, 0.58)), label='Wooden race car (toy vehicle)'), LayoutObject('action_camera', Rectangle(0.06, 0.045), RandomPose(SE2(0.6, 0.33) @ Rectangle(1.12, 0.58)), label='Action camera (camera equipment)'), LayoutObject('camera_mount_1', Rectangle(0.04, 0.06), RandomPose(SE2(0.6, 0.33) @ Rectangle(1.12, 0.58)), label='Camera mount (camera equipment)'), LayoutObject('camera_mount_2', Rectangle(0.04, 0.06), RandomPose(SE2(0.6, 0.33) @ Rectangle(1.12, 0.58)), label='Camera mount (camera equipment)')))#
Methods
sample_parameters(random: Random) -> TaskParameters#
PlayStackingToy
Attributes
name = 'ROBODOJO-REAL-34'#description = 'Play Stacking Toy'#instruction = 'Place every stacking piece onto the matching peg: purple circle, blue triangle, green square, orange square, and red square. Complete all five peg groups.'#reset_instruction = 'Empty all five pegs and scatter all fifteen pieces at the sampled poses. Peg groups are purple circle ×1, blue triangle ×2, green square ×3, orange square ×4, red square ×5.'#progress_rule = 'A peg group counts when all of its pieces are on the matching peg and seated on the base or stack: purple circle (1), blue triangles (2), green squares (3), orange squares (4), red squares (5).'#milestones = ((0, 'No milestone below is reached.'), (10, 'One group counts and the gripper is open.'), (25, 'Two groups count.'), (45, 'Three groups count.'), (70, 'Four groups count.'), (100, 'All five groups count. Both arms are back at origin.'))#metrics = (Metrics.binned('failed_grasps', 'Grasps that close on or around a task object without lifting it clear of the table.'), Metrics.binned('drops', 'Held objects that fall before they are released at a target.'), Metrics.binned('missed_insertions', 'Times a piece contacts a peg tip without sliding onto it.'), Metrics.binned('wrong_peg_pieces', 'Pieces released onto a peg of another group.'))#layout = LayoutSpec(objects=(LayoutObject('five_peg_base', Rectangle(0.22, 0.05), RandomPose(SE2(0.6, 0.14) @ Rectangle(0.8, 0.2), yaw=Uniform(-20 * pi / 180, 20 * pi / 180)), label='Five-peg base'), LayoutObject('purple_circle', Circle(0.025), RandomPose(SE2(0.6, 0.33) @ Rectangle(1.12, 0.58)), label='Purple circle (peg 1)'), LayoutObject('blue_triangle_1', Polygon(((0, -0.02886751345948129), (0.025, 0.014433756729740645), (-0.025, 0.014433756729740645))), RandomPose(SE2(0.6, 0.33) @ Rectangle(1.12, 0.58)), label='Blue triangle (peg 2)'), LayoutObject('blue_triangle_2', Polygon(((0, -0.02886751345948129), (0.025, 0.014433756729740645), (-0.025, 0.014433756729740645))), RandomPose(SE2(0.6, 0.33) @ Rectangle(1.12, 0.58)), label='Blue triangle (peg 2)'), LayoutObject('green_square_1', Rectangle(0.045, 0.045), RandomPose(SE2(0.6, 0.33) @ Rectangle(1.12, 0.58)), label='Green square (peg 3)'), LayoutObject('green_square_2', Rectangle(0.045, 0.045), RandomPose(SE2(0.6, 0.33) @ Rectangle(1.12, 0.58)), label='Green square (peg 3)'), LayoutObject('green_square_3', Rectangle(0.045, 0.045), RandomPose(SE2(0.6, 0.33) @ Rectangle(1.12, 0.58)), label='Green square (peg 3)'), LayoutObject('orange_square_1', Rectangle(0.045, 0.045), RandomPose(SE2(0.6, 0.33) @ Rectangle(1.12, 0.58)), label='Orange square (peg 4)'), LayoutObject('orange_square_2', Rectangle(0.045, 0.045), RandomPose(SE2(0.6, 0.33) @ Rectangle(1.12, 0.58)), label='Orange square (peg 4)'), LayoutObject('orange_square_3', Rectangle(0.045, 0.045), RandomPose(SE2(0.6, 0.33) @ Rectangle(1.12, 0.58)), label='Orange square (peg 4)'), LayoutObject('orange_square_4', Rectangle(0.045, 0.045), RandomPose(SE2(0.6, 0.33) @ Rectangle(1.12, 0.58)), label='Orange square (peg 4)'), LayoutObject('red_square_1', Rectangle(0.05, 0.05), RandomPose(SE2(0.6, 0.33) @ Rectangle(1.12, 0.58)), label='Red square (peg 5)'), LayoutObject('red_square_2', Rectangle(0.05, 0.05), RandomPose(SE2(0.6, 0.33) @ Rectangle(1.12, 0.58)), label='Red square (peg 5)'), LayoutObject('red_square_3', Rectangle(0.05, 0.05), RandomPose(SE2(0.6, 0.33) @ Rectangle(1.12, 0.58)), label='Red square (peg 5)'), LayoutObject('red_square_4', Rectangle(0.05, 0.05), RandomPose(SE2(0.6, 0.33) @ Rectangle(1.12, 0.58)), label='Red square (peg 5)'), LayoutObject('red_square_5', Rectangle(0.05, 0.05), RandomPose(SE2(0.6, 0.33) @ Rectangle(1.12, 0.58)), label='Red square (peg 5)')))#
Methods
sample_parameters(random: Random) -> TaskParameters#
AlignBlocks
AlignBlocks(*, collinearity_m: float, yaw_radians: float, no_lift_m: float)
Alignment tolerances must be calibrated once and shared across policies.
Attributes
collinearity_m#yaw_radians#no_lift_m#progress_rule#name = 'ROBODOJO-REAL-35'#description = 'Align Blocks'#instruction = 'Without picking up any cube, use the clear ruler to push the three purple cubes into one straight, aligned row.'#reset_instruction = 'Place the ruler and three cubes at the sampled poses; the cubes start out of line. Record the configured alignment and no-lift tolerances before the episode.'#milestones = ((0, 'No milestone below is reached.'), (100, 'The three cube centers are collinear and their faces parallel within tolerance, and no cube was ever lifted above the no-lift height. Both arms are back at origin.'))#metrics = (Metrics.binned('ruler_regrasps', 'Times the ruler is released and grasped again.'), Metrics.binned('cube_lifts', 'Times a cube rises above the no-lift height.'), Metrics.binned('cubes_off_the_line', 'Cubes outside the collinearity or yaw tolerance at the end.', ('0', '1', '2', '3')))#layout = LayoutSpec(objects=(LayoutObject('cube_1', Rectangle(0.03, 0.03), RandomPose(SE2(0.6, 0.33) @ Rectangle(1.12, 0.58)), label='Purple cube'), LayoutObject('cube_2', Rectangle(0.03, 0.03), RandomPose(SE2(0.6, 0.33) @ Rectangle(1.12, 0.58)), label='Purple cube'), LayoutObject('cube_3', Rectangle(0.03, 0.03), RandomPose(SE2(0.6, 0.33) @ Rectangle(1.12, 0.58)), label='Purple cube'), LayoutObject('ruler', Rectangle(0.3, 0.025), RandomPose(SE2(0.6, 0.33) @ Rectangle(1.12, 0.58)), label='Clear ruler')))#
Methods
task(parameters: TaskParameters, max_rollout_time: float) -> Task_Spec#sample_parameters(random: Random) -> TaskParameters#
ClassifyObjectsByLanguage
class ClassifyObjectsByLanguage(RoboDojoTask[ClassifyObjectsByLanguageParameters])
Attributes
name = 'ROBODOJO-REAL-39'#description = 'Classify Objects By Language'#instruction = 'Put the {left_category} into the left blue bin, the {middle_category} into the middle orange bin, and the {right_category} into the right yellow bin.'#reset_instruction = 'Empty the bins; keep blue left, orange middle, yellow right. Place all eight objects outside them: three toy peppers, two figurines, and three watches.'#progress_rule = 'A category counts when all of its objects are in the instructed bin and that bin holds nothing else.'#milestones = ((0, 'No milestone below is reached.'), (10, 'One category counts and the gripper is open.'), (40, 'Two categories count.'), (100, 'All three categories count and all eight objects are assigned. Both arms are back at origin.'))#metrics = (Metrics.binned('failed_grasps', 'Grasps that close on or around a task object without lifting it clear of the table.'), Metrics.binned('drops', 'Held objects that fall before they are released at a target.'), Metrics.binned('wrong_bin_placements', 'Objects released into a bin other than the instructed one.'), Metrics.binned('objects_moved_out', 'Objects taken out of a bin after being released there.'))#layout = LayoutSpec(objects=(LayoutObject('blue_bin', Rectangle(0.17, 0.11), RandomPose(SE2(0.24, 0.14) @ Rectangle(0.36, 0.2), yaw=Uniform(-10 * pi / 180, 10 * pi / 180)), label='Blue bin (left)'), LayoutObject('orange_bin', Rectangle(0.17, 0.11), RandomPose(SE2(0.6, 0.14) @ Rectangle(0.36, 0.2), yaw=Uniform(-10 * pi / 180, 10 * pi / 180)), label='Orange bin (middle)'), LayoutObject('yellow_bin', Rectangle(0.17, 0.11), RandomPose(SE2(0.96, 0.14) @ Rectangle(0.36, 0.2), yaw=Uniform(-10 * pi / 180, 10 * pi / 180)), label='Yellow bin (right)'), LayoutObject('red_bell_pepper', Circle(0.04), RandomPose(SE2(0.6, 0.33) @ Rectangle(1.12, 0.58)), label='Red bell pepper (toy peppers)'), LayoutObject('green_bell_pepper', Circle(0.04), RandomPose(SE2(0.6, 0.33) @ Rectangle(1.12, 0.58)), label='Green bell pepper (toy peppers)'), LayoutObject('yellow_bell_pepper', Circle(0.04), RandomPose(SE2(0.6, 0.33) @ Rectangle(1.12, 0.58)), label='Yellow bell pepper (toy peppers)'), LayoutObject('figurine_1', Circle(0.0125), RandomPose(SE2(0.6, 0.33) @ Rectangle(1.12, 0.58)), label='Figurine (figurines)'), LayoutObject('figurine_2', Circle(0.0125), RandomPose(SE2(0.6, 0.33) @ Rectangle(1.12, 0.58)), label='Figurine (figurines)'), LayoutObject('red_band_watch', Rectangle(0.12, 0.035), RandomPose(SE2(0.6, 0.33) @ Rectangle(1.12, 0.58)), label='Red-band watch (watches)'), LayoutObject('yellow_band_watch', Rectangle(0.12, 0.035), RandomPose(SE2(0.6, 0.33) @ Rectangle(1.12, 0.58)), label='Yellow-band watch (watches)'), LayoutObject('black_smartwatch', Rectangle(0.12, 0.035), RandomPose(SE2(0.6, 0.33) @ Rectangle(1.12, 0.58)), label='Black smartwatch (watches)')))#
Methods
sample_parameters(random: Random) -> ClassifyObjectsByLanguageParameters#sample_set(seed: int, *, episodes: int, max_rollout_time: float | None = None) -> tuple[Task_Spec, ...]#-
Shuffle complete six-assignment cycles; counts differ by at most one.
PackObjectsIntoBoxParameters
PackObjectsIntoBoxParameters(direction: Direction)
Attributes
direction: Direction#
HangMugsParameters
HangMugsParameters(peg_white: Peg, peg_pink: Peg)
Attributes
CoverBlocksParameters
CoverBlocksParameters(
cover_order: tuple[Color, Color, Color],
uncover_order: tuple[Color, Color, Color],
)
Attributes
PressByNumberParameters
PressByNumberParameters(
count_first: Button,
count_second: Button,
n_first: Count,
n_second: Count,
)
Attributes
PlugInChargerParameters
PlugInChargerParameters(outlet: Peg)
Attributes
outlet: Peg#
InsertTubesParameters
InsertTubesParameters(well_1: Well, well_2: Well)
Attributes
ClassifyObjectsByLanguageParameters
ClassifyObjectsByLanguageParameters(
left_category: Category,
middle_category: Category,
right_category: Category,
)