Skip to main content
se3labs.sdk.eval.tasks

Predefined Evaluation Tasks

TaskRegistry is the central registry, keyed by the exact task IDs shown on the documentation site, plus the operator training tasks TRAINING-01 to TRAINING-04, which are not published there. 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.

Definition classes are named after their task IDs, such as RoboDojoReal20 for ROBODOJO-REAL-20; their semantic dataclasses add a suffix, RoboDojoReal20Parameters. These classes provide statically typed construction and parameter overrides. Every task defaults to 180 seconds. The policy controls the starting arm pose through initialize(); for this benchmark, return zero joint angles and open grippers.

TaskRegistry​

TaskRegistry = _TaskRegistry((RoboDojoReal03, RoboDojoReal05, RoboDojoReal13, RoboDojoReal17, RoboDojoReal20, RoboDojoReal21, RoboDojoReal28, RoboDojoReal34, RoboDojoReal35, RoboDojoReal39, Training01, Training02, Training03, Training04))

All predefined tasks, keyed by the canonical task IDs on the documentation site.

RoboDojoReal03​

class RoboDojoReal03(RoboDojoTask[RoboDojoReal03Parameters])

Attributes​

name = 'ROBODOJO-REAL-03'​#
description = 'Pack Objects Into Box'​#
instruction = "Place the car, shoe, toothbrush, and dual-face hammer into the open cardboard box. Point the car nose, shoe toe, toothbrush head, and hammer's yellow 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's yellow striking face define their fronts."​#
progress_rule = "An object is packed when it is fully inside the box and settled, and oriented when it also faces {direction}: car nose, shoe toe, toothbrush head, hammer's yellow striking face. The box may stay open."​#
milestones = ((0, 'No milestone below is reached.'), (5, 'A task object is grasped and lifted clear of the table.'), (15, 'One object is packed and the gripper is open.'), (30, 'Two objects are packed.'), (45, 'Three objects are packed.'), (60, 'All four objects are packed.'), (80, 'All four objects are packed and at least two are oriented.'), (100, 'All four objects are packed and oriented, and the box is within its initial 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('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('dual_face_hammer', Rectangle(0.26, 0.08), RandomPose(SE2(0.6, 0.33) @ Rectangle(1.12, 0.58)), label='Dual-face hammer')))​#

Methods​

sample_parameters(random: Random) -> RoboDojoReal03Parameters​#

RoboDojoReal05​

class RoboDojoReal05(RoboDojoTask[RoboDojoReal05Parameters])

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 hangs when it hangs securely by its handle on its assigned peg; a mug resting on the base or table does not hang.'​#
milestones = ((0, 'No milestone below is reached.'), (10, 'A mug is grasped and lifted clear of the table.'), (25, "A held mug's handle reaches its assigned peg."), (50, 'One mug hangs and the gripper is open.'), (100, 'Both mugs hang 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) -> RoboDojoReal05Parameters​#

RoboDojoReal13​

class RoboDojoReal13(RoboDojoTask[RoboDojoReal13Parameters])

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, 'A cup is lifted clear of the table.'), (15, '{cover_order[0]} is covered first by an upright cup.'), (25, 'Then {cover_order[1]} is covered second.'), (35, 'Then {cover_order[2]} is covered third; all three blocks are covered.'), (55, 'Then {uncover_order[0]} was uncovered first; the other two stay covered.'), (75, '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) -> RoboDojoReal13Parameters​#

RoboDojoReal17​

class RoboDojoReal17(RoboDojoTask[RoboDojoReal17Parameters])

Attributes​

layout = LayoutSpec(objects=(LayoutObject('left_button', Circle(0.04), SE2(0.4, 0.3), label='Left count button'), LayoutObject('middle_button', Circle(0.04), SE2(0.6, 0.3), label='Middle count button'), LayoutObject('confirm_button', Circle(0.04), SE2(0.8, 0.3), label='Confirm button'), LayoutObject('left_card', Rectangle(0.05, 0.07), SE2(0.4, 0.12)), LayoutObject('middle_card', Rectangle(0.05, 0.07), SE2(0.6, 0.12))))​#
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.'), (10, 'The first press is on the {count_first} count button.'), (30, 'The {count_first} count button was pressed exactly {n_first} times with no other press.'), (45, 'Then the right confirm button was pressed once.'), (75, 'Then the {count_second} count button was pressed exactly {n_second} times with no other press.'), (100, 'Then the right confirm button was pressed once, 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) -> RoboDojoReal17Parameters​#

RoboDojoReal20​

class RoboDojoReal20(RoboDojoTask[RoboDojoReal20Parameters])

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.'), (15, 'The adapter is grasped and lifted clear of the table.'), (35, "The adapter's prongs touch the face of outlet {outlet}."), (60, 'The prongs are partly inside outlet {outlet}.'), (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) -> RoboDojoReal20Parameters​#

RoboDojoReal21​

class RoboDojoReal21(RoboDojoTask[RoboDojoReal21Parameters])

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 is seated when it stands upright in well {well_1} or {well_2}, seated to the marked depth.'​#
milestones = ((0, 'No milestone below is reached.'), (10, 'A tube is grasped and lifted clear of its holder.'), (25, "A held tube's tip enters well {well_1} or {well_2}."), (50, 'One tube is seated and the gripper is open.'), (100, 'Both tubes are seated 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) -> RoboDojoReal21Parameters​#

RoboDojoReal28​

class RoboDojoReal28(RoboDojoTask[TaskParameters])

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 = 'An object is grouped when it is in a bin with only objects of its own category: writing tools (black pen, white pen), toy vehicle (race car), camera equipment (camera, two mounts). A bin counts when it holds every object of one category and nothing else. Any category may use any bin.'​#
milestones = ((0, 'No milestone below is reached.'), (10, 'One object is grouped and the gripper is open.'), (25, 'One bin counts.'), (50, '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​#

RoboDojoReal34​

class RoboDojoReal34(RoboDojoTask[TaskParameters])

Attributes​

name = 'ROBODOJO-REAL-34'​#
description = 'Play Stacking Toy'​#
instruction = 'Place each stacking piece on the table onto the peg holding the matching piece: blue triangle, green square, orange square, and red square.'​#
reset_instruction = 'Seat one starter piece on each peg: purple circle, blue triangle, green square, orange square, red square. Place one more blue triangle, green square, orange square, and red square at the sampled poses.'​#
progress_rule = 'A piece is seated when it is on the peg holding the matching starter piece and seated on that stack; starter pieces must stay on their pegs.'​#
milestones = ((0, 'No milestone below is reached.'), (5, 'A loose piece is grasped and lifted clear of the table.'), (15, 'A held piece is carried to the peg board.'), (30, 'One piece is seated and the gripper is open.'), (50, 'Two pieces are seated.'), (75, 'Three pieces are seated.'), (100, 'All four pieces are seated. 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('blue_triangle', 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', Rectangle(0.045, 0.045), RandomPose(SE2(0.6, 0.33) @ Rectangle(1.12, 0.58)), label='Green square (peg 3)'), LayoutObject('orange_square', Rectangle(0.045, 0.045), RandomPose(SE2(0.6, 0.33) @ Rectangle(1.12, 0.58)), label='Orange square (peg 4)'), LayoutObject('red_square', 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​#

RoboDojoReal35​

class RoboDojoReal35(RoboDojoTask[TaskParameters])

Attributes​

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.'​#
milestones = ((0, 'No milestone below is reached.'), (10, 'The ruler is grasped.'), (25, 'The ruler pushes a cube, and no cube was ever lifted above the no-lift height.'), (50, 'Two cubes rest flush against the same ruler edge with faces parallel within tolerance, and no cube was ever lifted above the no-lift height.'), (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​

sample_parameters(random: Random) -> TaskParameters​#

RoboDojoReal39​

class RoboDojoReal39(RoboDojoTask[RoboDojoReal39Parameters])

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 = 'An object is sorted when it is in its instructed bin. 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.'), (5, 'One object is in its instructed bin and the gripper is open.'), (15, 'Two objects are in their instructed bins.'), (25, 'Three objects are in their instructed bins.'), (40, 'One category counts.'), (70, '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) -> RoboDojoReal39Parameters​#
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.

RoboDojoReal03Parameters​

RoboDojoReal03Parameters(direction: Direction)

Attributes​

direction: Direction​#

RoboDojoReal05Parameters​

RoboDojoReal05Parameters(peg_white: Peg, peg_pink: Peg)

Attributes​

peg_white: Peg​#
peg_pink: Peg​#

RoboDojoReal13Parameters​

RoboDojoReal13Parameters(
cover_order: tuple[Color, Color, Color],
uncover_order: tuple[Color, Color, Color],
)

Attributes​

cover_order: tuple[Color, Color, Color]​#
uncover_order: tuple[Color, Color, Color]​#

RoboDojoReal17Parameters​

RoboDojoReal17Parameters(
count_first: Button,
count_second: Button,
n_first: Count,
n_second: Count,
)

Attributes​

count_first: Button​#
count_second: Button​#
n_first: Count​#
n_second: Count​#

RoboDojoReal20Parameters​

RoboDojoReal20Parameters(outlet: Peg)

Attributes​

outlet: Peg​#

RoboDojoReal21Parameters​

RoboDojoReal21Parameters(well_1: Well, well_2: Well)

Attributes​

well_1: Well​#
well_2: Well​#

RoboDojoReal39Parameters​

RoboDojoReal39Parameters(
left_category: Category,
middle_category: Category,
right_category: Category,
)

Attributes​

left_category: Category​#
middle_category: Category​#
right_category: Category​#

Training01​

class Training01(_TrainingTask)

Attributes​

name = 'TRAINING-01'​#
description = 'Basic Pick and Place'​#
instruction = 'Pick up the block and place it inside the marked square.'​#
reset_instruction = "Put the block and the marked square somewhere new on the table, away from last episode's spots."​#
milestones = _success('The block is fully inside the square and the gripper is open and clear of it.')​#

Training02​

class Training02(_Training[Training02Parameters])

Attributes​

name = 'TRAINING-02'​#
description = 'Sort Parts'​#
instruction = 'Read the labels on the three bins and sort the six parts according to those labels.'​#
reset_instruction = 'Mix the two bolts, two nuts and two washers in the tray. Keep the bins in place and label them {left_label} on the left, {middle_label} in the middle and {right_label} on the right.'​#
milestones = _success('All six parts are fully inside the bins their labels name, and the tray is empty.')​#

Methods​

sample_parameters(random: Random) -> Training02Parameters​#

Training03​

class Training03(_TrainingTask)

Attributes​

name = 'TRAINING-03'​#
description = 'Fold a Shirt'​#
instruction = 'Fold the T-shirt into a neat rectangle with the sleeves folded inside.'​#
reset_instruction = 'Lay the T-shirt flat on the table, front up, with the sleeves spread out.'​#
milestones = _success('The shirt is folded into a neat rectangle with the sleeves inside, and no part of it hangs off the table.')​#

Training04​

class Training04(_TrainingTask)

Attributes​

name = 'TRAINING-04'​#
description = 'Lock and Key'​#
instruction = 'Hold the padlock with one arm, then insert the key with the other and turn it until the shackle opens.'​#
reset_instruction = "Close the padlock's shackle and lay the padlock and its key apart on the table."​#
milestones = _success('The shackle is open.')​#

Training02Parameters​

Training02Parameters(left_label: Part, middle_label: Part, right_label: Part)

Attributes​

left_label: Part​#
middle_label: Part​#
right_label: Part​#