lirui commited on
Commit
6f233da
1 Parent(s): 114ef2f
prompts/data/base_assets.json ADDED
@@ -0,0 +1,52 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "stacking": [
3
+ "stacking/block.urdf",
4
+ "stacking/stand.urdf"
5
+ ],
6
+ "corner": [
7
+ "corner/corner-template.urdf"
8
+ ],
9
+ "ball": [
10
+ "ball/ball-template.urdf",
11
+ "ball/ball.urdf"
12
+ ],
13
+ "sphere": [
14
+ "sphere/sphere.urdf",
15
+ "sphere/sphere-template.urdf"
16
+ ],
17
+ "zone": [
18
+ "zone/zone.urdf",
19
+ "zone/zone.obj"
20
+ ],
21
+ "block": [
22
+ "block/block.urdf",
23
+ "block/block_for_anchors.urdf",
24
+ "block/small.urdf"
25
+ ],
26
+ "pallet": [
27
+ "pallet/pallet.urdf",
28
+ "pallet/pallet.obj"
29
+ ],
30
+ "cylinder": [
31
+ "cylinder/cylinder-template.urdf"
32
+ ],
33
+ "container": [
34
+ "container/container-template.urdf"
35
+ ],
36
+ "bowl": [
37
+ "bowl/bowl.urdf"
38
+ ],
39
+ "square": [
40
+ "square/square-template.urdf"
41
+ ],
42
+ "box": [
43
+ "box/box-template.urdf"
44
+ ],
45
+ "line": [
46
+ "line/line-template.urdf"
47
+ ],
48
+ "insertion": [
49
+ "insertion/ell.urdf",
50
+ "insertion/fixture.urdf"
51
+ ]
52
+ }
prompts/data/base_task_codes.json ADDED
@@ -0,0 +1 @@
 
 
1
+ ["align_box_corner.py", "align_rope.py", "assembling_kits.py", "block_insertion.py", "manipulating_rope.py", "packing_boxes.py", "align_rope.py", "packing_boxes_pairs.py", "palletizing_boxes.py", "place_red_in_green.py", "put_block_in_bowl.py", "separating_piles.py", "stack_block_pyramid.py", "sweeping_piles.py", "towers_of_hanoi.py"]
prompts/data/base_tasks.json ADDED
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "sweeping-piles": {"assets-used": ["zone/zone.urdf", "block/small.urdf"],
3
+ "task-description": "Push piles of small objects into a target goal zone marked on the tabletop.",
4
+ "task-name": "sweeping-piles"},
5
+ "place-red-in-green": {"assets-used": ["bowl/bowl.urdf", "stacking/block.urdf"],
6
+ "task-description": "pick up the red blocks and place them into the green bowls amidst other objects.",
7
+ "task-name": "place-red-in-green"},
8
+ "align-box-corner": {"assets-used": ["box/box-template.urdf", "corner/corner-template.urdf"],
9
+ "task-description": "pick up the randomly sized box and align one of its corners to the L-shaped marker on the tabletop..",
10
+ "task-name": "align-box-corner"},
11
+ "stack-block-pyramid": {"assets-used": ["stacking/stand.urdf", "stacking/block.urdf"],
12
+ "task-description": "sequentially stack 6 blocks into a pyramid of 3-2-1 with rainbow colored ordering.",
13
+ "task-name": "stack-block-pyramid"},
14
+ "palletizing-boxes": {"assets-used": ["pallet/pallet.urdf", "box/box-template.urdf"],
15
+ "task-description": "pick up homogeneous fixed-sized boxes and stack them in transposed layers on the pallet.",
16
+ "task-name": "palletizing-boxes"},
17
+ "assembling-kits": {"assets-used": ["kitting/kit.urdf", "kitting/object-template.urdf"],
18
+ "task-description": "pick up different objects and arrange them on a board marked with corresponding silhouettes.",
19
+ "task-name": "assembling-kits"},
20
+ "packing-boxes": {"assets-used": ["container/container-template.urdf", "box/box-template.urdf"],
21
+ "task-description": "pick up randomly sized boxes and place them tightly into a container.",
22
+ "task-name": "packing-boxes"},
23
+ "sweeping-piles": {"assets-used": ["zone/zone.urdf", "block/small.urdf"],
24
+ "task-description": "push piles of small objects into a target goal zone marked on the tabletop.",
25
+ "task-name": "sweeping-piles"},
26
+ "manipulating-rope": {"assets-used": ["square/square-template.urdf"],
27
+ "task-description": "rearrange a deformable rope such that it connects the two endpoints of a 3-sided square.",
28
+ "task-name": "manipulating-rope"},
29
+ "align-rope": {"assets-used": ["square/square-template.urdf"],
30
+ "task-description": "manipulate a deformable rope to connect its end-points between two corners of a 3-sided square.",
31
+ "task-name": "align-rope"}
32
+ }
prompts/data/generated_assets.json ADDED
@@ -0,0 +1,2 @@
 
 
 
1
+ {
2
+ }
prompts/data/generated_task_codes.json ADDED
@@ -0,0 +1,140 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ [
2
+ "build_wheel.py",
3
+ "rainbow_stack.py",
4
+ "push-piles_into_letter.py",
5
+ "connect_boxes_with_rope.py",
6
+ "build_car.py",
7
+ "manipulating_two_ropes.py",
8
+ "insert_sphere_into_container.py",
9
+ "insert_cylinder_in_container.py",
10
+ "build_bridge.py",
11
+ "insert_ell_in_fixture.py",
12
+ "build_block_tower_on_pallet.py",
13
+ "color_coordinated_tower.py",
14
+ "stack_blocks_in_container.py",
15
+ "mix_piles.py",
16
+ "insert_blocks_into_fixture.py",
17
+ "color_coordinated_block_tower.py",
18
+ "color_structured_block_tower.py",
19
+ "stack_color_coordinated_blocks.py",
20
+ "assemble_single_car.py",
21
+ "sort_and_stack_clr_blocks.py",
22
+ "create_pyramid_blocks_and_container.py",
23
+ "Four_corner_pyramid_challenge.py",
24
+ "colorful_block_tower_on_cylinder_base.py",
25
+ "align_cylinders_in_square.py",
26
+ "corner_block_challenge.py",
27
+ "construct_corner_blocks.py",
28
+ "corner_sort_cylinders.py",
29
+ "sorting_blocks_into_pallets.py",
30
+ "sort_and_assemble_block_castle.py",
31
+ "vertical_insertion_blocks.py",
32
+ "color_coordinated_sphere_insertion.py",
33
+ "block_pyramid_with_limited_space.py",
34
+ "build_cylinder_structure.py",
35
+ "insert_blocks_lineup.py",
36
+ "color_specific_container_fill.py",
37
+ "multicolor_block_bridge.py",
38
+ "pyramid_blocks_assemble.py",
39
+ "triangle_block_arrangement.py",
40
+ "place_ball_in_elevated_bowl.py",
41
+ "align_balls_in_colored_zones.py",
42
+ "color_coordinated_cylinder_tower.py",
43
+ "symmetric_block_bridge_construction.py",
44
+ "sphere_align_stand.py",
45
+ "construct_colorful_arch.py",
46
+ "color_sorted_container_stack.py",
47
+ "align_spheres_in_colored_zones.py",
48
+ "sort_insert_color_coordinated_blocks.py",
49
+ "color_ordered_insertion.py",
50
+ "color_coordinated_cylinders_in_boxes.py",
51
+ "color_coordinated_insertion.py",
52
+ "cylinder_stand_alignment.py",
53
+ "color_coordinated_container_sorting.py",
54
+ "color_sorted_block_race.py",
55
+ "multi_level_block_construction.py",
56
+ "color_linked_ball_bowl_ordering.py",
57
+ "color_blocks_in_cylinder_maze.py",
58
+ "create_pyramid_with_color_coded_ells.py",
59
+ "move_piles_along_line.py",
60
+ "color_ordered_blocks_on_pallet.py",
61
+ "color_ordered_container_arrangement.py",
62
+ "multi_level_pyramid_construction.py",
63
+ "align_balls_in_colored_boxes.py",
64
+ "color_coordinated_pyramid_in_container.py",
65
+ "colored_balls_sorting_in_corner.py",
66
+ "color_coordinated_ball_insertion.py",
67
+ "color_sequenced_pyramid_packing.py",
68
+ "color_block_ball_goal.py",
69
+ "ball_sorting_with_blocks_barrier.py",
70
+ "color_matched_blocks_insertion.py",
71
+ "color_coordinated_block_bridge.py",
72
+ "insert_red_block_into_cylinder.py",
73
+ "color_sequential_ball_container_sorting.py",
74
+ "color_coordinated_cylinder_pyramid.py",
75
+ "cylinder_sorting_with_zone.py",
76
+ "color_coordinated_ball_placement.py",
77
+ "sweep_and_sort_blocks.py",
78
+ "align_cylinders_in_zones.py",
79
+ "sphere_container_color_match.py",
80
+ "insertion_and_color_sorting.py",
81
+ "color_coordinated_cylinder_stack.py",
82
+ "color_coordinated_container_insertion.py",
83
+ "color_coordinated_insertion_in_container.py",
84
+ "insert_ell_along_square_path.py",
85
+ "color_ordered_insertion_with_blocking_boxes.py",
86
+ "color_coordinated_box_ball_matching.py",
87
+ "color_coordinated_pallet_pyramid.py",
88
+ "color_coordinated_ball_insertion_in_boxes.py",
89
+ "cylinder_balancing_and_placement.py",
90
+ "align_spheres_in_boxes.py",
91
+ "color_coordinated_sphere_and_cylinder_assembly.py",
92
+ "color_coordinated_cylinder_bowl_sorting.py",
93
+ "sequential_block_insertion.py",
94
+ "sequential_insertion_and_stacking.py",
95
+ "color_coordinated_block_shifting.py",
96
+ "color_coordinated_cylinder_placement_on_pallet.py",
97
+ "guided_block_path.py",
98
+ "color_ordered_insertion_with_obstacles.py",
99
+ "color_matched_block_transfer.py",
100
+ "mixed_color_block_barrier_insertion.py",
101
+ "ball_in_bowl_obstacle_course.py",
102
+ "color_coordinated_bowl_ball_pyramid.py",
103
+ "color_coordinated_arch_construction.py",
104
+ "color_coordinated_zone_arrangement.py",
105
+ "color_coordinated_cylinder_stand_assembly.py",
106
+ "color_coordinated_cylinder_stand_in_line.py",
107
+ "color_coordinated_pyramid_construction.py",
108
+ "color_coordinated_ball_stacking.py",
109
+ "color_coded_blocks_on_corner.py",
110
+ "insertion_in_color_sequenced_zones.py",
111
+ "precise_block_placement_in_container.py",
112
+ "color_coordinated_bowl_stacking.py",
113
+ "color_coordinated_zone_stacking.py",
114
+ "color_cued_ball_insertion.py",
115
+ "color_coordinated_insertion_through_box_barrier.py",
116
+ "color_coordinated_insertion_and_stacking.py",
117
+ "color_coordinated_cylinder_ball_match.py",
118
+ "multi_level_insertion_and_zone_matching.py",
119
+ "multi_color_block_sequence_insertion.py",
120
+ "ball_tower_in_zones.py",
121
+ "color_coordinated_container_pyramid.py",
122
+ "corner_blocks_insertion.py",
123
+ "color_coordinated_insertion_in_cylinders.py",
124
+ "color_coordinated_block_transport.py",
125
+ "color_cued_ball_corner_sorting.py",
126
+ "color_coordinated_insertion_and_corner_pyramid.py",
127
+ "color_coordinated_sphere_and_cylinder_stack.py",
128
+ "color_coordinated_blocks_in_cylindrical_maze.py",
129
+ "color_coordinated_cylinder_relay.py",
130
+ "color_coordinated_cylinder_maze.py",
131
+ "insertion_path_obstacle_course.py",
132
+ "color_coordinated_sphere_and_bowl_match.py",
133
+ "color_coordinated_pallet_insertion.py",
134
+ "color_coordinated_insertion_and_stack.py",
135
+ "cylinder_ring_stack.py",
136
+ "color_coordinated_sphere_on_pallet_pyramid.py",
137
+ "color_coordinated_stacked_block_bowls.py",
138
+ "color_sequenced_sphere_placement.py",
139
+ "color_sequence_loading_pallet.py"
140
+ ]
prompts/data/generated_tasks.json ADDED
@@ -0,0 +1,1139 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "insert-sphere-into-container": {
3
+ "task-name": "insert-sphere-into-container",
4
+ "task-description": "Pick up a blue sphere and place it into an open container.",
5
+ "assets-used": [
6
+ "sphere/sphere.urdf",
7
+ "container/container-template.urdf"
8
+ ]
9
+ },
10
+ "cylinder-container-sorting": {
11
+ "task-name": "cylinder-container-sorting",
12
+ "task-description": "Pick up cylindrical blocks of three different colors (red, green, and blue) and place them into three separate containers of matching color.",
13
+ "assets-used": [
14
+ "cylinder/cylinder-template.urdf",
15
+ "container/container-template.urdf"
16
+ ]
17
+ },
18
+ "insert-cylinder-in-container": {
19
+ "task-name": "insert-cylinder-in-container",
20
+ "task-description": "Pick up a blue cylindrical block and place it into an empty container.",
21
+ "assets-used": [
22
+ "cylinder/cylinder-template.urdf",
23
+ "container/container-template.urdf"
24
+ ]
25
+ },
26
+ "build-car": {
27
+ "task-name": "build-car",
28
+ "task-description": "Construct a simple car structure using blocks and cylinders.",
29
+ "assets-used": [
30
+ "block/block.urdf",
31
+ "ball/ball-template.urdf"
32
+ ]
33
+ },
34
+ "build-bridge": {
35
+ "task-name": "build-bridge",
36
+ "task-description": "Construct a bridge using two yellow blocks and three blue blocks. Firstly, place the two yellow blocks on each of the two bases parallel to each other with a fair amount of space in between. Then, place the blue block horizontally on top of the yellow blocks.",
37
+ "assets-used": [
38
+ "block/block.urdf",
39
+ "ball/ball-template.urdf"
40
+ ]
41
+ },
42
+ "build-wheel": {
43
+ "task-name": "build-wheel",
44
+ "task-description": "Construct a wheel using blocks and a sphere. First, position eight blocks in a circular layout on the tabletop. Each block should be touching its two neighbors and colored in alternating red and blue. Then place a green sphere in the center of the circular layout, completing the wheel.",
45
+ "assets-used": [
46
+ "block/block.urdf",
47
+ "sphere/sphere.urdf"
48
+ ]
49
+ },
50
+ "build-two-circles": {
51
+ "task-name": "build-two-circles",
52
+ "task-description": "construct two distinct circles on the tabletop using 6 red and 6 blue blocks",
53
+ "assets-used": [
54
+ "block/block.urdf"
55
+ ]
56
+ },
57
+ "manipulating-two-ropes": {
58
+ "task-name": "manipulating-two-ropes",
59
+ "task-description": "rearrange the red and blue deformable ropes such that it connects the two endpoints of a 3-sided square of corresponding color.",
60
+ "assets-used": [
61
+ "square/square-template.urdf"
62
+ ]
63
+ },
64
+ "insert-ell-in-fixture": {
65
+ "task-name": "insert-ell-in-fixture",
66
+ "task-description": "Pick up an Ell shaped block and insert it into a fixture on the tabletop.",
67
+ "assets-used": [
68
+ "insertion/ell.urdf",
69
+ "insertion/fixture.urdf"
70
+ ]
71
+ },
72
+ "build-block-tower-on-pallet": {
73
+ "task-name": "build-block-tower-on-pallet",
74
+ "task-description": "Pick up six blocks in two colors (three red and three blue) and stack them in alternating colors on the pallet. The tower should start with a red block at the bottom.",
75
+ "assets-used": [
76
+ "block/block.urdf",
77
+ "pallet/pallet.urdf"
78
+ ]
79
+ },
80
+ "color-coordinated-tower": {
81
+ "task-name": "color-coordinated-tower",
82
+ "task-description": "Pick up blocks of five different colors (red, blue, green, yellow, and orange) and stack them on a pallet in the specific sequence. The bottom of the tower should start with a red block followed by a blue, green, yellow and finally an orange block at the top.",
83
+ "assets-used": [
84
+ "block/block.urdf",
85
+ "pallet/pallet.urdf"
86
+ ]
87
+ },
88
+ "stack-blocks-in-container": {
89
+ "task-name": "stack-blocks-in-container",
90
+ "task-description": "Pick up five blocks of different colors (red, blue, green, yellow, and orange) and stack them in a container in a specific sequence. The bottom of the stack should start with a red block followed by a blue, green, yellow and finally an orange block at the top.",
91
+ "assets-used": [
92
+ "block/block.urdf",
93
+ "container/container-template.urdf"
94
+ ]
95
+ },
96
+ "insert-blocks-into-fixture": {
97
+ "task-name": "insert-blocks-into-fixture",
98
+ "task-description": "Pick up four colored blocks (red, blue, green, and yellow) and insert them one-by-one into a fixture on the tabletop. The order of insertion starts with the red block, followed by the blue, green, and lastly the yellow block.",
99
+ "assets-used": [
100
+ "block/block.urdf",
101
+ "insertion/fixture.urdf"
102
+ ]
103
+ },
104
+ "color-coordinated-block-tower": {
105
+ "task-name": "color-coordinated-block-tower",
106
+ "task-description": "On a tabletop, there are fifteen blocks of three different colors (five red, five blue, and five green). The task is to pick up these blocks and stack them onto three different stands on the table, creating three different towers. Each stand should have a tower of the same color blocks with five blocks each. The blocks in each tower should be stacked in a way that the block on top is slightly displaced in relation to the block underneath, creating a spiral-like effect. The challenge lies in the color-based sorting, precise placement for achieving the spiral effect and careful stacking of the blocks to avoid toppling.",
107
+ "assets-used": [
108
+ "block/block.urdf",
109
+ "stacking/stand.urdf"
110
+ ]
111
+ },
112
+ "color-structured-block-tower": {
113
+ "task-name": "color-structured-block-tower",
114
+ "task-description": "Construct a tower using six blocks: two red, two blue, and two green. The tower should be built in the order of a red block at the base, followed by a blue, then green, then red, blue and green at the top.",
115
+ "assets-used": [
116
+ "block/block.urdf"
117
+ ]
118
+ },
119
+ "stack-color-coordinated-blocks": {
120
+ "task-name": "stack-color-coordinated-blocks",
121
+ "task-description": "Pick up six blocks of different colors (red, blue, green, yellow, orange, and purple) and stack them on a pallet in two separate stacks. The first stack should be red at the bottom, blue in the middle, and green at top. The second stack should be yellow at the bottom, orange in the middle, and purple at the top.",
122
+ "assets-used": [
123
+ "box/box-template.urdf",
124
+ "pallet/pallet.urdf"
125
+ ]
126
+ },
127
+ "assemble-single-car": {
128
+ "task-name": "assemble-single-car",
129
+ "task-description": "Build a mini car using a large blue box as the body, a smaller red box on top as the roof, and two tiny green boxes on the sides as wheels.",
130
+ "assets-used": [
131
+ "box/box-template.urdf"
132
+ ]
133
+ },
134
+ "sort-and-stack-clr-blocks": {
135
+ "task-name": "sort-and-stack-clr-blocks",
136
+ "task-description": "Pick up four blocks of different colors (red, blue, green, yellow) and place them into separate corners of a pallet. After sorting, stack them in a specific sequence on top of the pallet. The bottom of the stack should start with a green block followed by a blue, then red, and finally a yellow block at the top.",
137
+ "assets-used": [
138
+ "block/block.urdf",
139
+ "pallet/pallet.urdf"
140
+ ]
141
+ },
142
+ "create-pyramid-blocks-and-container": {
143
+ "task-name": "create-pyramid-blocks-and-container",
144
+ "task-description": "Create a pyramid structure using six blocks of three different colors (two red, two green, and two blue) inside a container. The first layer of the pyramid should consist of the two green and one blue block. The second layer should be the two red blocks, and the last block which is the top of the pyramid should be the remaining blue block.",
145
+ "assets-used": [
146
+ "container/container-template.urdf",
147
+ "block/block.urdf"
148
+ ]
149
+ },
150
+ "Four-corner-pyramid-challenge": {
151
+ "task-name": "Four-corner-pyramid-challenge",
152
+ "task-description": "A tabletop is partitioned into four different zones using the 'zone/zone.urdf' asset. In each zone, there are four blocks of different colors (red, blue, green, and yellow). The task is to construct a pyramid of blocks in each zone using the 'block/block.urdf' asset such that the sequence of blocks from bottom to top is red, blue, green, and yellow. The task is challenging because it requires precise stack control and color recognition.",
153
+ "assets-used": [
154
+ "block/block.urdf",
155
+ "zone/zone.urdf"
156
+ ]
157
+ },
158
+ "colorful-block-tower-on-cylinder-base": {
159
+ "task-name": "colorful-block-tower-on-cylinder-base",
160
+ "task-description": "Construct a tower using four blocks of different colors (red, blue, green, and yellow) on a placed cylindrical base at the corner of the tabletop. The sequence from bottom to top should be red, blue, green, and yellow.",
161
+ "assets-used": [
162
+ "block/block.urdf",
163
+ "corner/corner-template.urdf",
164
+ "cylinder/cylinder-template.urdf"
165
+ ]
166
+ },
167
+ "align-cylinders-in-square": {
168
+ "task-name": "align-cylinders-in-square",
169
+ "task-description": "Arrange four cylinders of different colors (red, blue, green, yellow) on the corners of a square facing the center. The square is outlined by four zones of matching colors at each corner. The red cylinder should be placed at the red zone and facing the center of the square, and same for the remaining colors.",
170
+ "assets-used": [
171
+ "cylinder/cylinder-template.urdf",
172
+ "zone/zone.urdf",
173
+ "square/square-template.urdf"
174
+ ]
175
+ },
176
+ "construct-corner-blocks": {
177
+ "task-name": "construct-corner-blocks",
178
+ "task-description": "Create a corner structure using four blocks. Two red blocks form the base, one on each side of the corner, followed by a green block that is positioned on the red blocks at the corner junction, and finally a blue block on top of the green one. The overall structure forms a 3-D corner.",
179
+ "assets-used": [
180
+ "block/block.urdf",
181
+ "corner/corner-template.urdf"
182
+ ]
183
+ },
184
+ "corner-sort-cylinders": {
185
+ "task-name": "corner-sort-cylinders",
186
+ "task-description": "Pick up cylinders of four different colors (red, blue, green, yellow) and place them into four corners accordingly marked on the tabletop. The corner is designed as a 2-block-size square where only one cylinder can fit. The task is challenging due to precise placement and the need for identifying the corners accurately.",
187
+ "assets-used": [
188
+ "corner/corner-template.urdf",
189
+ "cylinder/cylinder-template.urdf"
190
+ ]
191
+ },
192
+ "sorting-blocks-into-pallets": {
193
+ "task-name": "sorting-blocks-into-pallets",
194
+ "task-description": "Pick up blocks of four different colors (red, blue, green, yellow) and place them into four separate pallets of matching color. The pallets are placed in a row and the blocks are scattered randomly on the table.",
195
+ "assets-used": [
196
+ "block/block.urdf",
197
+ "pallet/pallet.urdf"
198
+ ]
199
+ },
200
+ "sort-and-assemble-block-castle": {
201
+ "task-name": "sort-and-assemble-block-castle",
202
+ "task-description": "On a tabletop, there are twelve blocks of three different colors (four red, four green, and four blue). The task involves sorting the blocks according to the color in three marked zones on the tabletop and subsequently constructing a castle in each zone. In each castle, the first layer should consist of the two blocks of the same color, followed by the second layer of one block and finally the last block on the top forming a castle-like structure. The challenge lies in the color-based sorting and careful assembly of the blocks to avoid toppling.",
203
+ "assets-used": [
204
+ "block/block.urdf",
205
+ "zone/zone.urdf"
206
+ ]
207
+ },
208
+ "push-piles-into-letter": {
209
+ "task-name": "push-piles-into-letter",
210
+ "task-description": "Push piles of small objects into a target goal zone shaped in some letters.",
211
+ "assets-used": [
212
+ "kitting/kit.urdf",
213
+ "kitting/object-template-nocollision.urdf"
214
+ ]
215
+ },
216
+ "connect-boxes-with-rope": {
217
+ "task-name": "connect-boxes-with-rope",
218
+ "task-description": "Connect two colored blocks with ropes.",
219
+ "assets-used": [
220
+ "block/block.urdf"
221
+ ]
222
+ },
223
+ "vertical-insertion-blocks": {
224
+ "task-name": "vertical-insertion-blocks",
225
+ "task-description": "The task involves picking up four color specific blocks (red, blue, green, and yellow) and inserting each block into four differently colored stands set upright on the tabletop. The block-colored with red needs to be inserted into the red-colored stand, and the same sequence is maintained for each colored blocks and stands. This task is challenging due to the requirement for precise insertion and the manipulation of vertical objects.",
226
+ "assets-used": [
227
+ "stacking/block.urdf",
228
+ "stacking/stand.urdf"
229
+ ]
230
+ },
231
+ "color-coordinated-sphere-insertion": {
232
+ "task-name": "color-coordinated-sphere-insertion",
233
+ "task-description": "There are four spheres and four boxes of different colors (red, blue, green, and yellow). Each sphere is inside a box, but not corresponding to the color of the box. The task is to pick up each sphere and place it in the box of the same color. The challenge lies in the precise placement and color matching.",
234
+ "assets-used": [
235
+ "sphere/sphere.urdf",
236
+ "box/box-template.urdf"
237
+ ]
238
+ },
239
+ "block-pyramid-with-limited-space": {
240
+ "task-name": "block-pyramid-with-limited-space",
241
+ "task-description": "On a tabletop, there are twelve blocks of four different colors (three red, three green, three blue, three yellow). Three zones are defined, each with a triangle-shaped border that is marked. The task involves sorting the blocks according to the color into three zones on the tabletop and constructing a pyramid in each zone. In each pyramid, the base should contain two blocks of the same color, followed by the second layer of one block, thus forming a pyramid-like structure. However, the third yellow block should be placed in the center of the zones forming a smaller pyramid. The challenge lies in the color-based sorting, careful assembly of the blocks to avoid topple, and limited space in the zones which adds to the complexity.",
242
+ "assets-used": [
243
+ "block/block.urdf",
244
+ "zone/zone.urdf"
245
+ ]
246
+ },
247
+ "build-cylinder-structure": {
248
+ "task-name": "build-cylinder-structure",
249
+ "task-description": "Using four colored cylinders (red, blue, green, yellow), construct a structure atop a square base. The red and blue cylinders should be sealed by the square base side by side, while the green cylinder should be on top of the blue one, and the yellow one on top of the red. The final look should resemble the letter 'H'.",
250
+ "assets-used": [
251
+ "cylinder/cylinder-template.urdf",
252
+ "square/square-template.urdf"
253
+ ]
254
+ },
255
+ "insert-blocks-lineup": {
256
+ "task-name": "insert-blocks-lineup",
257
+ "task-description": "On the tabletop, there are four different color blocks (red, blue, green, and yellow), and four fixtures in corresponding colors. The task is to pick up each block and insert it into the corresponding color fixture. However, the fixtures are arranged in a straight line, with a line of small blocks serving as barrier between the fixtures and the colored blocks initially scattered on the table, providing a challenge in precise navigation and placement.",
258
+ "assets-used": [
259
+ "block/block.urdf",
260
+ "insertion/fixture.urdf",
261
+ "block/small.urdf"
262
+ ]
263
+ },
264
+ "color-specific-container-fill": {
265
+ "task-name": "color-specific-container-fill",
266
+ "task-description": "Arrange four colored blocks (red, blue, green, and yellow) around a pallet. Then, pick up these blocks and place them inside a container marked in the same color. The task requires precise placement, color matching, and an understanding of spatial structures.",
267
+ "assets-used": [
268
+ "block/block.urdf",
269
+ "pallet/pallet.urdf",
270
+ "container/container-template.urdf"
271
+ ]
272
+ },
273
+ "multicolor-block-bridge": {
274
+ "task-name": "multicolor-block-bridge",
275
+ "task-description": "Build a bridge by stacking three red, three blue, and three green blocks on a pallet. Arrange in a sequence from left to right: red, blue, and green. Then, place three cylinders of corresponding colors on top of the stacked blocks, forming a bridge. The cylinders should roll from the top block to the pallet, creating a challenge of precision and control.",
276
+ "assets-used": [
277
+ "block/block.urdf",
278
+ "pallet/pallet.urdf",
279
+ "cylinder/cylinder-template.urdf"
280
+ ]
281
+ },
282
+ "pyramid-blocks-assemble": {
283
+ "task-name": "pyramid-blocks-assemble",
284
+ "task-description": "Construct a pyramid using nine blocks in a specific color order on a pallet. The bottom layer should contain five blocks: red, blue, green, yellow, and orange (in that order from left to right). The middle layer should consist of three blocks: yellow, red, and blue (from left to right). The top layer should contain a single green block. The pyramid requires careful placement and color matching.",
285
+ "assets-used": [
286
+ "block/block.urdf",
287
+ "pallet/pallet.urdf"
288
+ ]
289
+ },
290
+ "triangle-block-arrangement": {
291
+ "task-name": "triangle-block-arrangement",
292
+ "task-description": "Arrange blocks of three different colors (red, green, and blue) in a triangular layout on the tabletop. The base of the triangle should consist of three red blocks, followed by a row of two green blocks, and finally a single blue block at the top of the triangle. The task is challenging due to the need for precise placement and color coordination.",
293
+ "assets-used": [
294
+ "block/block.urdf"
295
+ ]
296
+ },
297
+ "place-ball-in-elevated-bowl": {
298
+ "task-name": "place-ball-in-elevated-bowl",
299
+ "task-description": "The primary objective of the task is to pick up a red ball and carefully place it into a bowl, which is positioned on a raised platform that is surrounded by small blocks. The challenge lies in precise navigation, maintaining a hold of the ball, and avoiding the surrounding blocks.",
300
+ "assets-used": [
301
+ "ball/ball-template.urdf",
302
+ "bowl/bowl.urdf",
303
+ "block/small.urdf"
304
+ ]
305
+ },
306
+ "align-balls-in-colored-zones": {
307
+ "task-name": "align-balls-in-colored-zones",
308
+ "task-description": "There are six balls of different colors (red, blue, green, yellow, orange, and purple) and six zones correspondingly colored. The task is to pick up each ball and place it in the zone of the same color, arranging the balls in a straight line. The challenge lies in the precise placement and color matching.",
309
+ "assets-used": [
310
+ "ball/ball-template.urdf",
311
+ "zone/zone.urdf"
312
+ ]
313
+ },
314
+ "color-coordinated-cylinder-tower": {
315
+ "task-name": "color-coordinated-cylinder-tower",
316
+ "task-description": "Stack cylinders of four different colors (red, blue, green, yellow) on top of each other on a square stand in a specific sequence. The bottom of the stack should start with a blue cylinder, follow by a green cylinder, then a red one, and finally a yellow cylinder at the top. Each cylinder has to be aligned correctly to avoid falling.",
317
+ "assets-used": [
318
+ "cylinder/cylinder-template.urdf",
319
+ "stacking/stand.urdf"
320
+ ]
321
+ },
322
+ "symmetric-block-bridge-construction": {
323
+ "task-name": "symmetric-block-bridge-construction",
324
+ "task-description": "Create a symmetrical bridge-shaped structure on a stand using eight blocks of two different colors (four red and four blue). Start by placing two red blocks side by side at the center of the stand to form the base of the bridge. Then, take a blue block and place it on top of the red blocks, followed by another red block on top of the blue one, and this pattern continues till you exhaust all the blocks. The final structure should be a bridge with alternating colors (red, blue, red, blue). The challenge lies in ensuring symmetry and balancing the blocks without making them fall.",
325
+ "assets-used": [
326
+ "stacking/stand.urdf",
327
+ "block/block-template.urdf"
328
+ ]
329
+ },
330
+ "sphere-align-stand": {
331
+ "task-name": "sphere-align-stand",
332
+ "task-description": "On a table there are five differently colored stands and five spheres. The task involves picking up each sphere and placing it on the stand of the matching color. The task is challenging due to the precision required in picking up and placing the spheres, and the color coordination.",
333
+ "assets-used": [
334
+ "stacking/stand.urdf",
335
+ "sphere/sphere.urdf"
336
+ ]
337
+ },
338
+ "construct-colorful-arch": {
339
+ "task-name": "construct-colorful-arch",
340
+ "task-description": "Construct an arch using six blocks: three red, and three blue. Place two red blocks on the tabletop parallel to each other, then place a blue block on top of the red blocks to form a basic arch. Repeat the process by placing a red block on each side of the base arch and bridge them with the last blue block. Finally, place the last two red blocks on top of the second layer of the red blocks, on either side. The overall structure forms a colorful 3D arch.",
341
+ "assets-used": [
342
+ "block/block.urdf"
343
+ ]
344
+ },
345
+ "color-sorted-container-stack": {
346
+ "task-name": "color-sorted-container-stack",
347
+ "task-description": "The challenge is to stack four differently colored blocks (red, blue, green, yellow) inside a container. These blocks are initially placed inside two separate bowls. The red and blue blocks are in one bowl, the yellow and green blocks are in another. The robot has to pick up the blocks from the two bowls and stack them inside the container in the specific order: red, blue, green, then yellow.",
348
+ "assets-used": [
349
+ "bowl/bowl.urdf",
350
+ "container/container-template.urdf",
351
+ "block/block.urdf"
352
+ ]
353
+ },
354
+ "align-spheres-in-colored-zones": {
355
+ "task-name": "align-spheres-in-colored-zones",
356
+ "task-description": "There are four spheres of different colors (red, blue, green, yellow) positioned randomly on the table along with four zones marked with matching colors. The task is to pick up each sphere and place it into the matching colored zone with precise placement.",
357
+ "assets-used": [
358
+ "sphere/sphere-template.urdf",
359
+ "zone/zone.urdf"
360
+ ]
361
+ },
362
+ "sort-insert-color-coordinated-blocks": {
363
+ "task-name": "sort-insert-color-coordinated-blocks",
364
+ "task-description": "There are six blocks of three different colors (two red, two blue, and two green), two red containers, two blue containers, and two green containers scattered on the table. The task is to sort the blocks by their colors and place (insert) them into the containers of the matching color. Two blocks of the same color should go into two different containers of the same color. The challenge lies in the color-based sorting and insertion of the blocks into the containers.",
365
+ "assets-used": [
366
+ "block/block.urdf",
367
+ "container/container-template.urdf"
368
+ ]
369
+ },
370
+ "color-ordered-insertion": {
371
+ "task-name": "color-ordered-insertion",
372
+ "task-description": "There are four differently-colored ell objects (red, blue, green, yellow) and a corresponding set of color-coded fixtures. The task involves picking up each ell object and inserting it into the matching color fixture in a specific order: from left to right, insert red, blue, green, and finally yellow. The challenge lies in the precise manipulation of the ell objects and the color-coordination required. The fixtures are arranged in a straight line, and can only be approached from one direction, demanding careful navigation.",
373
+ "assets-used": [
374
+ "insertion/ell.urdf",
375
+ "insertion/fixture.urdf"
376
+ ]
377
+ },
378
+ "color-coordinated-cylinders-in-boxes": {
379
+ "task-name": "color-coordinated-cylinders-in-boxes",
380
+ "task-description": "Arrange four cylinders of different colors (red, blue, green, and yellow) into four matching colored boxes, such that each box contains a cylinder of the same color. The task is challenging due to the manipulation of cylindrical objects and the color coordination required.",
381
+ "assets-used": [
382
+ "cylinder/cylinder-template.urdf",
383
+ "box/box-template.urdf"
384
+ ]
385
+ },
386
+ "color-coordinated-insertion": {
387
+ "task-name": "color-coordinated-insertion",
388
+ "task-description": "There are three insertion fixtures and three ell shaped blocks of different colors (red, blue, green) on the table top. The task is to pick up the ell shaped blocks and insert each one of them into the fixture of the same color. However, the ell blocks should be inserted in a specific sequence - red first, then blue, and finally green. This task is challenging due to the precision required for insertion and the need for color coordination and sequencing.",
389
+ "assets-used": [
390
+ "insertion/ell.urdf",
391
+ "insertion/fixture.urdf"
392
+ ]
393
+ },
394
+ "cylinder-stand-alignment": {
395
+ "task-name": "cylinder-stand-alignment",
396
+ "task-description": "Arrange four colored cylinders (red, blue, green, yellow) in order of their colors on four stands of matching color. However, the stands are placed in a random order on the table, which increases the complexity of the task as it requires careful planning and color matching.",
397
+ "assets-used": [
398
+ "cylinder/cylinder-template.urdf",
399
+ "stacking/stand.urdf"
400
+ ]
401
+ },
402
+ "color-coordinated-container-sorting": {
403
+ "task-name": "color-coordinated-container-sorting",
404
+ "task-description": "On the table there are four different colored containers (red, blue, green and yellow) and sixteen blocks of the same four colors (four blocks of each color). The task challenges the robot to pick up these blocks and sort them into the containers of the same color, with each container having one of each color of blocks in it. To make the task interesting, each container should have the blocks in a different order. One container might have them in the order red, blue, green, yellow; another one in the order yellow, green, blue, red; and the last two could have them in the orders green, red, yellow, blue; and blue, yellow, red, green. The robot would need to first identify the correct container for sorting, and then plan the correct order of the blocks.",
405
+ "assets-used": [
406
+ "block/block.urdf",
407
+ "container/container-template.urdf"
408
+ ]
409
+ },
410
+ "color-sorted-block-race": {
411
+ "task-name": "color-sorted-block-race",
412
+ "task-description": "On one end of a tabletop, there are six blocks in two colors (three red and three blue). On the other end of the tabletop, two sets of three small marked zones are arranged in a straight line, one set for blue and one set for red. The task involves picking up one block at a time and placing it in the corresponding colored zone in a sequence from the bottom end zone to the top end zone. The blocks must be placed following the rule: the three colored blocks must be transported consecutively, e.g., first place all three blue blocks and then place all three red blocks. The challenge lies in careful transportation and placement of the blocks and follows the specific rule.",
413
+ "assets-used": [
414
+ "block/block.urdf",
415
+ "zone/zone.urdf"
416
+ ]
417
+ },
418
+ "multi-level-block-construction": {
419
+ "task-name": "multi-level-block-construction",
420
+ "task-description": "Construct a two-level structure on a pallet using four blocks: two red and two blue. The lower level should be a rectangle created by placing the red blocks side by side. The upper level is made up by placing the blue blocks placed on top of the red blocks creating a line aligned perpendicular to the red blocks. The challenge lies in the precise placement of blocks, maintaining balance of the structure, and correct color arrangement.",
421
+ "assets-used": [
422
+ "block/block.urdf",
423
+ "pallet/pallet.urdf"
424
+ ]
425
+ },
426
+ "color-linked-ball-bowl-ordering": {
427
+ "task-name": "color-linked-ball-bowl-ordering",
428
+ "task-description": "On a tabletop, there are four bowls and four balls of different colors (red, blue, green, and yellow). Each ball is inside a bowl, but not corresponding to the color of the bowl. The task is to pick up each ball and place it in the bowl of the same color, in the specific sequence of red, blue, green and yellow from left to right. The challenge lies in the precise placement, color matching and sequence following.",
429
+ "assets-used": [
430
+ "bowl/bowl.urdf",
431
+ "ball/ball.urdf"
432
+ ]
433
+ },
434
+ "color-blocks-in-cylinder-maze": {
435
+ "task-name": "color-blocks-in-cylinder-maze",
436
+ "task-description": "Pick up five differently colored blocks (red, blue, yellow, green, and orange) that are scattered randomly on the table top. Arrange three cylindrical containers in a row to create a maze-like structure. Place the red, yellow, and blue block into the first, second, and third cylinder from left respectively. Then, stack the green and orange block on top of any container, followed by placing the same color palette on the respective block.",
437
+ "assets-used": [
438
+ "block/block.urdf",
439
+ "cylinder/cylinder-template.urdf"
440
+ ]
441
+ },
442
+ "create-pyramid-with-color-coded-ells": {
443
+ "task-name": "create-pyramid-with-color-coded-ells",
444
+ "task-description": "There are four insertion ell-shaped objects ('insertion/ell.urdf') of different colors (red, blue, yellow, and green) placed randomly on the tabletop. The task is to pick up each of these objects and stack them onto a fixed-size pallet in the shape of a pyramid. The order of the pyramid from bottom to top should be red, blue, yellow, and green.",
445
+ "assets-used": [
446
+ "insertion/ell.urdf",
447
+ "pallet/pallet.urdf"
448
+ ]
449
+ },
450
+ "move-piles-along-line": {
451
+ "task-name": "move-piles-along-line",
452
+ "task-description": "Move three piles of small blocks, each pile a different color (red, blue, green), along three matching colored lines to three separate zones of the same color using a spatula.",
453
+ "assets-used": [
454
+ "block/small.urdf",
455
+ "zone/zone.urdf",
456
+ "line/line-template.urdf"
457
+ ]
458
+ },
459
+ "color-ordered-blocks-on-pallet": {
460
+ "task-name": "color-ordered-blocks-on-pallet",
461
+ "task-description": "On a table there are six different colored blocks (red, blue, green, yellow, orange, and purple), a pallet, and a small corner structure. These colored blocks are arranged randomly within the small corner structure. The task involves picking up each colored block and placing it onto the pallet in specific color sequence: red, blue, green, yellow, orange, and finally purple.",
462
+ "assets-used": [
463
+ "block/block.urdf",
464
+ "pallet/pallet.urdf",
465
+ "corner/corner-template.urdf"
466
+ ]
467
+ },
468
+ "color-ordered-container-arrangement": {
469
+ "task-name": "color-ordered-container-arrangement",
470
+ "task-description": "On the tabletop, there are six containers and six blocks of different colors (red, blue, green, yellow, orange, purple). The task is to pick up each block and place it into a container of the same color, then arrange the containers in a line in the following color order: red, blue, green, yellow, orange, and purple.",
471
+ "assets-used": [
472
+ "block/block.urdf",
473
+ "container/container-template.urdf"
474
+ ]
475
+ },
476
+ "multi-level-pyramid-construction": {
477
+ "task-name": "multi-level-pyramid-construction",
478
+ "task-description": "Construct a two-level pyramid on a pallet using six blocks: three green and three blue. The first level should be a triangle created by placing the green blocks side by side. The second level should be built by placing the blue blocks on top of the green blocks, forming another triangle rotated 60 degrees with respect to the first one. The challenge lies in the precise placement of blocks, maintaining balance of the structure, and correct color arrangement.",
479
+ "assets-used": [
480
+ "block/block.urdf",
481
+ "pallet/pallet.urdf"
482
+ ]
483
+ },
484
+ "align-balls-in-colored-boxes": {
485
+ "task-name": "align-balls-in-colored-boxes",
486
+ "task-description": "On a tabletop, there are four balls and four boxes of different colors (red, blue, green, and yellow). Each ball is inside a box, but not corresponding to the color of the box. The task is to pick up each ball and place it in the box of the same color, in the specific sequence of red, blue, green and yellow from left to right. The challenge lies in the precise placement, color matching and sequence following.",
487
+ "assets-used": [
488
+ "ball/ball.urdf",
489
+ "box/box-template.urdf"
490
+ ]
491
+ },
492
+ "color-coordinated-pyramid-in-container": {
493
+ "task-name": "color-coordinated-pyramid-in-container",
494
+ "task-description": "There are six blocks of three different colors (red, blue, green) and three containers of matching colors. The task involves picking up each color of blocks and placing them in the container of the same color in a pyramid formation, with two blocks at the base and one block on top. The challenge lies in the precise placement of blocks, maintaining balance of the pyramid, and color coordination.",
495
+ "assets-used": [
496
+ "block/block.urdf",
497
+ "container/container-template.urdf"
498
+ ]
499
+ },
500
+ "colored-balls-sorting-in-corner": {
501
+ "task-name": "colored-balls-sorting-in-corner",
502
+ "task-description": "There are four balls and four corners of different colors (red, blue, green, and yellow). Each ball is located at a corner, but not corresponding to the color of the corner. The task is to pick up each ball and place it in the corner of the same color, in the specific sequence of red, blue, green and yellow, starting from the leftmost corner to the rightmost. The challenge lies in the precise placement, color matching and sequence following.",
503
+ "assets-used": [
504
+ "ball/ball-template.urdf",
505
+ "corner/corner-template.urdf"
506
+ ]
507
+ },
508
+ "color-coordinated-ball-insertion": {
509
+ "task-name": "color-coordinated-ball-insertion",
510
+ "task-description": "There are five differently-colored ell objects (red, blue, green, yellow, orange) and five sphere-shaped containers of matching colors. The task involves picking up each ell object and inserting it into the sphere container of the same color, but in a specific sequence from left to right: red, blue, green, yellow, and finally orange. The task is challenging due to the sequence, color coordination, and accuracy of insertion required.",
511
+ "assets-used": [
512
+ "insertion/ell.urdf",
513
+ "sphere/sphere-template.urdf"
514
+ ]
515
+ },
516
+ "color-sequenced-pyramid-packing": {
517
+ "task-name": "color-sequenced-pyramid-packing",
518
+ "task-description": "There are twelve cubes of different colors (three red, three green, three blue, and three yellow) scattered on the tabletop. The task is to pick up the cubes, sort them according to color into four pallets, and stack them in each pallet as a pyramid with the base layer containing two cubes and the top layer containing one cube. The challenge lies in the color-based sorting, the precise placement of cubes, and the construction of the pyramid in each pallet.",
519
+ "assets-used": [
520
+ "block/block.urdf",
521
+ "pallet/pallet.urdf"
522
+ ]
523
+ },
524
+ "color-block-ball-goal": {
525
+ "task-name": "color-block-ball-goal",
526
+ "task-description": "On a tabletop, there are four zones marked in four different colors (red, blue, green, and yellow) and four balls of matching colors. The task involves picking up each ball and precisely placing it in the zone of the same color. However, there are several small blocks randomly scattered in the path between the balls and the zones. The robot has to strategically navigate around these blocks without knocking them over while transporting the balls to the corresponding zones. The challenge lies in the precise navigation, placement of the balls, and color matching while avoiding the blocks.",
527
+ "assets-used": [
528
+ "zone/zone.urdf",
529
+ "ball/ball-template.urdf",
530
+ "block/small.urdf"
531
+ ]
532
+ },
533
+ "ball-sorting-with-blocks-barrier": {
534
+ "task-name": "ball-sorting-with-blocks-barrier",
535
+ "task-description": "On a tabletop, there are four balls and four zones of different colors (red, blue, green, and yellow). Each ball is located behind a line of small blocks of the same color. The task is to pick up each ball and place it into the zone of the same color, but without knocking over the blocks. The challenge lies in the precise navigation over the block barriers and color matching.",
536
+ "assets-used": [
537
+ "ball/ball-template.urdf",
538
+ "zone/zone.urdf",
539
+ "block/small.urdf"
540
+ ]
541
+ },
542
+ "color-matched-blocks-insertion": {
543
+ "task-name": "color-matched-blocks-insertion",
544
+ "task-description": "There are four blocks and four fixtures of different colors (red, blue, green, and yellow). The task involves picking up each block and inserting it into the fixture of the same color, in the specific sequence of red, blue, green, and yellow, starting from the leftmost fixture to the rightmost. The challenge lies in the precise insertion, color matching and sequence following.",
545
+ "assets-used": [
546
+ "insertion/ell.urdf",
547
+ "insertion/fixture.urdf",
548
+ "block/block.urdf"
549
+ ]
550
+ },
551
+ "color-coordinated-block-bridge": {
552
+ "task-name": "color-coordinated-block-bridge",
553
+ "task-description": "Construct a bridge by interleaving three differently colored blocks (red, blue, and green) on a pallet in a specific sequence - red block at the edges, blue block in the middle, and a green block on top of the red and blue blocks. Repeat this sequence until a bridge is formed across the length of the pallet.",
554
+ "assets-used": [
555
+ "block/block.urdf",
556
+ "pallet/pallet.urdf"
557
+ ]
558
+ },
559
+ "insert-red-block-into-cylinder": {
560
+ "task-name": "insert-red-block-into-cylinder",
561
+ "task-description": "Position a red block ('insertion/ell.urdf') in front of a cylindrical fixture ('insertion/fixture.urdf'), then insert the red block into the cylinder. The challenge includes precision in positioning the block and the correct insertion into the fixture.",
562
+ "assets-used": [
563
+ "insertion/ell.urdf",
564
+ "insertion/fixture.urdf"
565
+ ]
566
+ },
567
+ "color-sequential-ball-container-sorting": {
568
+ "task-name": "color-sequential-ball-container-sorting",
569
+ "task-description": "There are six balls of different colors (red, blue, green, yellow, orange, and purple) and six containers of matching colors. The task is to pick up each ball and place it in the container of the same color, but in a specific sequence of red, blue, green, yellow, orange, and purple from left to right. The challenge lies in the precise placement, color matching and sequence following.",
570
+ "assets-used": [
571
+ "ball/ball-template.urdf",
572
+ "container/container-template.urdf"
573
+ ]
574
+ },
575
+ "color-coordinated-cylinder-pyramid": {
576
+ "task-name": "color-coordinated-cylinder-pyramid",
577
+ "task-description": "Construct a pyramid on a pallet using four cylinders of different colors (red, blue, green, and yellow). The first level should consist of a red cylinder and a blue cylinder side by side. The second level should consist of a green cylinder placed on top of the red and blue cylinders. The third and final level should consist of a yellow cylinder placed on top of the green cylinder. The challenge lies in the precise placement of cylinders, maintaining the balance of the structure, and correct color arrangement.",
578
+ "assets-used": [
579
+ "cylinder/cylinder-template.urdf",
580
+ "pallet/pallet.urdf"
581
+ ]
582
+ },
583
+ "cylinder-sorting-with-zone": {
584
+ "task-name": "cylinder-sorting-with-zone",
585
+ "task-description": "On a tabletop, there are four colored cylinders (red, blue, green, and yellow) and four zones of different colors (red, blue, green, and yellow). Each cylinder is located at a zone, but not corresponding to the color of the zone. The task is to pick up each cylinder and place it in the zone of the same color, in the specific sequence of red, blue, green and yellow from left to right.",
586
+ "assets-used": [
587
+ "cylinder/cylinder-template.urdf",
588
+ "zone/zone.urdf"
589
+ ]
590
+ },
591
+ "color-coordinated-ball-placement": {
592
+ "task-name": "color-coordinated-ball-placement",
593
+ "task-description": "There are three zones marked in three different colors (red, blue, and green) and three balls of matching colors. The task involves picking up each ball and precisely placing it in the zone of the same color. However, there are a few small blocks randomly scattered in the path between the balls and the zones. The robot has to strategically navigate around these blocks without knocking them over while transporting the balls to the corresponding zones. To add to the complexity, the robot must place the balls in each zone in a specific order: red, blue, and then green from left to right. The challenge lies in the precise navigation, placement of the balls, color matching and sequence following while avoiding the blocks.",
594
+ "assets-used": [
595
+ "zone/zone.urdf",
596
+ "ball/ball-template.urdf",
597
+ "block/small.urdf"
598
+ ]
599
+ },
600
+ "sweep-and-sort-blocks": {
601
+ "task-name": "sweep-and-sort-blocks",
602
+ "task-description": "Sweep a pile of small blocks of different colors (red, blue, green, and yellow) into their corresponding colored zones marked on the tabletop. The challenge lies in the sweeping action, precise placement, and color coordination.",
603
+ "assets-used": [
604
+ "zone/zone.urdf",
605
+ "block/small.urdf"
606
+ ]
607
+ },
608
+ "align-cylinders-in-zones": {
609
+ "task-name": "align-cylinders-in-zones",
610
+ "task-description": "Place four differently colored cylinders (red, blue, green, yellow) each into a matching colored zone. But, the zones are surrounded by small blocks, which the robot needs to move out of the way without knocking them out of their respective zones. The challenge includes precise placement of cylinders, color matching, and careful navigation around the small blocks.",
611
+ "assets-used": [
612
+ "cylinder/cylinder-template.urdf",
613
+ "zone/zone.urdf",
614
+ "block/small.urdf"
615
+ ]
616
+ },
617
+ "sphere-container-color-match": {
618
+ "task-name": "sphere-container-color-match",
619
+ "task-description": "On a tabletop, there are four spheres of different colors (red, blue, green, and yellow) inside four containers of a different color (red, blue, green, and yellow). The task is to pick up each sphere and place it into a container of the same color. The task is challenging due to the manipulation of spherical objects and the color coordination required.",
620
+ "assets-used": [
621
+ "sphere/sphere.urdf",
622
+ "container/container-template.urdf"
623
+ ]
624
+ },
625
+ "insertion-and-color-sorting": {
626
+ "task-name": "insertion-and-color-sorting",
627
+ "task-description": "On the tabletop, there are two fixtures and four Ell-shaped blocks of different colors (red, blue, green, and yellow). The task is to pick up each block and insert it into a fixture of the same color, then arrange the fixtures in a line in the following color order: red, blue, green, yellow. The challenge lies in the precise insertion, color matching, and sequence following.",
628
+ "assets-used": [
629
+ "insertion/ell.urdf",
630
+ "insertion/fixture.urdf"
631
+ ]
632
+ },
633
+ "color-coordinated-cylinder-stack": {
634
+ "task-name": "color-coordinated-cylinder-stack",
635
+ "task-description": "On the tabletop, there are four colored (red, blue, green, yellow) cylinders and four stands of corresponding colors. The task is to pick up each cylinder and stack it onto the stand of the same color - the red one at the bottom, followed by blue, green, and finally the yellow one at the top.",
636
+ "assets-used": [
637
+ "cylinder/cylinder-template.urdf",
638
+ "stacking/stand.urdf"
639
+ ]
640
+ },
641
+ "color-coordinated-container-insertion": {
642
+ "task-name": "color-coordinated-container-insertion",
643
+ "task-description": "There are three containers and three ell shaped blocks of different colors (red, blue, green) on the table top. The task is to pick up the ell shaped blocks and insert each one of them into the container of the same color. However, the ell blocks should be inserted in a specific sequence - red first, then blue, and finally green. This task is challenging due to the precision required for insertion and the need for color coordination and sequencing.",
644
+ "assets-used": [
645
+ "insertion/ell.urdf",
646
+ "container/container-template.urdf"
647
+ ]
648
+ },
649
+ "color-coordinated-insertion-in-container": {
650
+ "task-name": "color-coordinated-insertion-in-container",
651
+ "task-description": "There are four differently-colored ell objects (red, blue, green, yellow) and a corresponding container of matching colors. The task involves picking up each ell object and inserting it into the container of the same color in a specific order: from left to right, insert red, blue, green, and finally yellow. The challenge lies in the precise manipulation of the ell objects and the color-coordination required.",
652
+ "assets-used": [
653
+ "insertion/ell.urdf",
654
+ "container/container-template.urdf"
655
+ ]
656
+ },
657
+ "insert-ell-along-square-path": {
658
+ "task-name": "insert-ell-along-square-path",
659
+ "task-description": "On the tabletop, there is a square path marked by small blocks. Along the path, there are four colored ell-shaped blocks (red, blue, green, and yellow) and four fixtures of matching colors. The task is to pick up each ell block and insert it into the fixture of the same color. However, the robot must move each ell block along the marked square path to reach the fixture. The task is challenging because it requires precise navigation along the path, color coordination, and insertion accuracy.",
660
+ "assets-used": [
661
+ "block/small.urdf",
662
+ "insertion/ell.urdf",
663
+ "insertion/fixture.urdf"
664
+ ]
665
+ },
666
+ "color-ordered-insertion-with-blocking-boxes": {
667
+ "task-name": "color-ordered-insertion-with-blocking-boxes",
668
+ "task-description": "There are four differently-colored ell objects (red, blue, green, yellow) and a corresponding set of color-coded fixtures. In between the ell objects and the fixtures, there are four spheres positioned randomly, creating a barrier that the robot must navigate around. The task involves picking up each ell object and inserting it into the matching color fixture in a specific order: from left to right, insert red, blue, green, and finally yellow, without knocking over any of the spheres.",
669
+ "assets-used": [
670
+ "insertion/ell.urdf",
671
+ "insertion/fixture.urdf",
672
+ "sphere/sphere-template.urdf"
673
+ ]
674
+ },
675
+ "color-coordinated-box-ball-matching": {
676
+ "task-name": "color-coordinated-box-ball-matching",
677
+ "task-description": "On the tabletop, there are four boxes of different colors (red, blue, green, and yellow) and four balls of corresponding colors. The task is to pick up each ball and place it inside the box of the same color, however, the boxes are placed in a straight line with a row of small blocks acting as a barrier between the boxes and the balls. The challenge lies in the precise placement, color matching, and the navigation around the barrier without knocking over any small blocks.",
678
+ "assets-used": [
679
+ "box/box-template.urdf",
680
+ "ball/ball-template.urdf",
681
+ "block/small.urdf"
682
+ ]
683
+ },
684
+ "color-coordinated-pallet-pyramid": {
685
+ "task-name": "color-coordinated-pallet-pyramid",
686
+ "task-description": "On a tabletop, there are three pallets and nine blocks of three different colors (red, blue, green). Each color has three blocks and the blocks are scattered randomly on the table. The task is to pick up the blocks and stack them on the pallets to form a pyramid shape. Each pyramid should contain blocks of the same color with two blocks on the base and one block on top. The pallets with the pyramids should be arranged in a straight line in the following color order: red, blue, green from left to right. The challenge lies in the color coordination, precise stacking and the arrangement of the pallets.",
687
+ "assets-used": [
688
+ "block/block.urdf",
689
+ "pallet/pallet.urdf"
690
+ ]
691
+ },
692
+ "color-coordinated-ball-insertion-in-boxes": {
693
+ "task-name": "color-coordinated-ball-insertion-in-boxes",
694
+ "task-description": "Pick up four balls of different colors (red, blue, green, and yellow) and insert them into four separate boxes of matching colors. The boxes are located inside corners of a square structure and the task requires precise insertion, color coordination, and careful navigation around the square structure.",
695
+ "assets-used": [
696
+ "ball/ball-template.urdf",
697
+ "box/box-template.urdf",
698
+ "square/square-template.urdf"
699
+ ]
700
+ },
701
+ "cylinder-balancing-and-placement": {
702
+ "task-name": "cylinder-balancing-and-placement",
703
+ "task-description": "On a table, there are three differently colored cylinders (red, green, and blue) and three square zones of matching colors. The task involves picking up each cylinder and balancing it on its end at the center of the corresponding colored zone, in the sequence of red, green, and blue from left to right. The task is challenging due to precise balancing required in placing the cylinders, color matching, and sequence following.",
704
+ "assets-used": [
705
+ "cylinder/cylinder-template.urdf",
706
+ "zone/zone.urdf"
707
+ ]
708
+ },
709
+ "align-spheres-in-boxes": {
710
+ "task-name": "align-spheres-in-boxes",
711
+ "task-description": "There are four different colored boxes (red, blue, green, and yellow) and four spheres of corresponding colors on the table. The task is to pick up each sphere and place it into the box of the same color. However, there are small blocks scattered randomly on the table, which the robot has to navigate without knocking them over. The challenge lies in the precise placement of the spheres, color matching, and navigation around the blocks.",
712
+ "assets-used": [
713
+ "box/box-template.urdf",
714
+ "sphere/sphere-template.urdf",
715
+ "block/small.urdf"
716
+ ]
717
+ },
718
+ "color-coordinated-sphere-and-cylinder-assembly": {
719
+ "task-name": "color-coordinated-sphere-and-cylinder-assembly",
720
+ "task-description": "The robot starts with four spheres of different colors (red, blue, green, yellow) and four cylinders of matching colors. The task is to pick up each sphere and place it on top of the cylinder of the same color, forming four sphere-and-cylinder pairs. However, the challenge here is to do this in a specific color sequence - red, blue, green, and finally yellow.",
721
+ "assets-used": [
722
+ "sphere/sphere-template.urdf",
723
+ "cylinder/cylinder-template.urdf"
724
+ ]
725
+ },
726
+ "color-coordinated-cylinder-bowl-sorting": {
727
+ "task-name": "color-coordinated-cylinder-bowl-sorting",
728
+ "task-description": "There are four different cylinders (red, blue, green, yellow) and four different bowls (red, blue, green, yellow). The task involves picking up each cylinder and placing it in the bowl of the same color. The challenge lies in the precise manipulation of the cylinders and color-coordination.",
729
+ "assets-used": [
730
+ "cylinder/cylinder-template.urdf",
731
+ "bowl/bowl.urdf"
732
+ ]
733
+ },
734
+ "sequential-block-insertion": {
735
+ "task-name": "sequential-block-insertion",
736
+ "task-description": "There are four blocks of different colors (red, blue, green, yellow) and four fixtures of matching colors. The task involves picking up each block and inserting it into the fixture of the same color, in the specific sequence of red, blue, green, and yellow. However, the challenge lies in the fact that the blocks and fixtures are initially arranged in a mixed order, demanding careful navigation, precise insertion, color matching, and sequence following.",
737
+ "assets-used": [
738
+ "insertion/fixture.urdf",
739
+ "block/block.urdf"
740
+ ]
741
+ },
742
+ "sequential-insertion-and-stacking": {
743
+ "task-name": "sequential-insertion-and-stacking",
744
+ "task-description": "The tabletop contains three fixtures and three ell-shaped blocks of different colors - red, blue, and green. The task is to first pick up and insert each ell block into the corresponding colored fixture in the sequence of red, blue, and green. After successful insertion, the robot must pick up the three blocks again from the fixtures and stack them in a corner of the tabletop in the same color sequence - red at the bottom, blue in the middle, and green on top.",
745
+ "assets-used": [
746
+ "insertion/ell.urdf",
747
+ "insertion/fixture.urdf",
748
+ "corner/corner-template.urdf"
749
+ ]
750
+ },
751
+ "color-coordinated-block-shifting": {
752
+ "task-name": "color-coordinated-block-shifting",
753
+ "task-description": "On a tabletop, there are three zones marked in three different colors (red, blue, and green) and nine blocks of matching colors (three red, three blue, and three green). Each zone initially contains three blocks of a single color, but the colors of the blocks and zones do not match. The task involves picking up each block and precisely placing it in the zone of the same color. However, there are a few small blocks randomly scattered in the path between the zones. The robot has to strategically navigate around these blocks without knocking them over while transporting the blocks to the corresponding zones. The challenge lies in the precise navigation, placement of the blocks, color matching while avoiding the blocks.",
754
+ "assets-used": [
755
+ "zone/zone.urdf",
756
+ "block/block.urdf",
757
+ "block/small.urdf"
758
+ ]
759
+ },
760
+ "color-coordinated-cylinder-placement-on-pallet": {
761
+ "task-name": "color-coordinated-cylinder-placement-on-pallet",
762
+ "task-description": "On a tabletop, there are four corners marked in four different colors (red, blue, green, and yellow) and four cylinders of matching colors. Also, there is a pallet on the tabletop with four colored zones matching with the colors of the corners and cylinders. Initially, each cylinder is located at a corner, but not corresponding to the color of the corner. The task is to pick up each cylinder and place it on the pallet zone of the same color. However, this must be done in a specific sequence - red first, then blue, green, and finally yellow. The challenge lies in precise placement, color matching, and following the correct sequence.",
763
+ "assets-used": [
764
+ "corner/corner-template.urdf",
765
+ "cylinder/cylinder-template.urdf",
766
+ "pallet/pallet.urdf"
767
+ ]
768
+ },
769
+ "guided-block-path": {
770
+ "task-name": "guided-block-path",
771
+ "task-description": "On the tabletop, there are four colored blocks (red, blue, green, and yellow) and four lines of the corresponding colors. The task is to pick up each block and move it along the line of the same color from start to end. The challenge lies in precise navigation along the line, color coordination, and block manipulation.",
772
+ "assets-used": [
773
+ "block/block.urdf",
774
+ "line/line-template.urdf"
775
+ ]
776
+ },
777
+ "color-ordered-insertion-with-obstacles": {
778
+ "task-name": "color-ordered-insertion-with-obstacles",
779
+ "task-description": "On a tabletop, there are four colored ell-shaped blocks (red, blue, green, and yellow) and four fixtures of matching colors, with a line of small blocks serving as barriers, and they are arranged in a straight line. The task is to pick up each ell block, navigate around the small blocks, and insert it into the fixture of the same color in a specific sequence from left to right, starting with red, followed by blue, then green, and finally yellow. The challenges include precise navigation, color coordination, sequence following, and obstacle avoidance.",
780
+ "assets-used": [
781
+ "insertion/ell.urdf",
782
+ "insertion/fixture.urdf",
783
+ "block/small.urdf"
784
+ ]
785
+ },
786
+ "color-matched-block-transfer": {
787
+ "task-name": "color-matched-block-transfer",
788
+ "task-description": "On a tabletop, there are four containers and four blocks of different colors (red, blue, green, and yellow). Each block is inside a container, but not corresponding to the color of the container. The task is to pick up each block and place it in the container of the same color, in the specific sequence of red, blue, green and yellow from left to right. The task is challenging due to the precise placement, color matching and sequence following.",
789
+ "assets-used": [
790
+ "block/block.urdf",
791
+ "container/container-template.urdf"
792
+ ]
793
+ },
794
+ "mixed-color-block-barrier-insertion": {
795
+ "task-name": "mixed-color-block-barrier-insertion",
796
+ "task-description": "There are four different colored blocks (red, blue, green, and yellow), and four fixtures in corresponding colors. Two barriers, each made of three blocks (orange, purple, and brown), are placed in between the blocks and fixtures, forming a path that the robot must navigate. The task involves picking up each colored block, navigating the barriers, and inserting each block into the fixture of the same color. The fixtures are arranged in a sequence from left to right: red, blue, green, and yellow, providing a challenge in precise navigation, color coordination, and insertion.",
797
+ "assets-used": [
798
+ "block/block.urdf",
799
+ "insertion/fixture.urdf"
800
+ ]
801
+ },
802
+ "ball-in-bowl-obstacle-course": {
803
+ "task-name": "ball-in-bowl-obstacle-course",
804
+ "task-description": "With the tabletop setup consisting of a maze of small blocks, the task requires the robot to pick up four balls of different colors (red, blue, green, yellow) and place each of them into the corresponding colored bowls strategically positioned at different corners of the maze, without knocking over any blocks, demanding careful navigation and color coordination.",
805
+ "assets-used": [
806
+ "ball/ball-template.urdf",
807
+ "block/small.urdf",
808
+ "bowl/bowl.urdf"
809
+ ]
810
+ },
811
+ "color-coordinated-bowl-ball-pyramid": {
812
+ "task-name": "color-coordinated-bowl-ball-pyramid",
813
+ "task-description": "On a tabletop, there are four bowls and four balls of different colors (red, blue, green, and yellow). The task is to pick up each ball and stack them in the shape of a pyramid inside the bowl of the same color, in the specific sequence of red at the bottom, blue and green in the middle, and yellow at the top. The challenge lies in the precise placement, color matching, and pyramid formation.",
814
+ "assets-used": [
815
+ "bowl/bowl.urdf",
816
+ "ball/ball.urdf"
817
+ ]
818
+ },
819
+ "color-coordinated-arch-construction": {
820
+ "task-name": "color-coordinated-arch-construction",
821
+ "task-description": "The task is to construct an arch using six blocks: three red and three blue. The blocks are initially placed in a container. The robot needs to pick each block and place it on a pallet in the following arrangement: place two red blocks in parallel on the pallet, then place a blue block on top of the red blocks to form an arch. Repeat the process with the remaining blocks, placing them on top of the first arch to form a second layer. The task is challenging due to the need for precise placement of the blocks and maintaining the balance of the structure.",
822
+ "assets-used": [
823
+ "block/block.urdf",
824
+ "pallet/pallet.urdf",
825
+ "container/container-template.urdf"
826
+ ]
827
+ },
828
+ "color-coordinated-zone-arrangement": {
829
+ "task-name": "color-coordinated-zone-arrangement",
830
+ "task-description": "On the tabletop, there are nine blocks of three different colors (three red, three blue, and three green) and three pallets of matching colors (one red, one blue, one green). The task is to pick up each block and place it on the pallet of the same color, arranging the blocks on each pallet in a line. However, there are a few small blocks randomly scattered on the tabletop, which the robot has to navigate around without knocking them over while transporting the blocks to the corresponding pallets. The challenge lies in the precise navigation, placement of the blocks, color matching, and maintaining the balance on the pallets.",
831
+ "assets-used": [
832
+ "block/block.urdf",
833
+ "pallet/pallet.urdf",
834
+ "block/small.urdf"
835
+ ]
836
+ },
837
+ "color-coordinated-cylinder-stand-assembly": {
838
+ "task-name": "color-coordinated-cylinder-stand-assembly",
839
+ "task-description": "The robot starts with four cylinders of different colors (red, blue, green, yellow) and four stands of matching colors. The task is to pick up each cylinder and place it on top of the stand of the same color, forming four cylinder-and-stand pairs. However, the challenge here is to do this in a specific color sequence - green, yellow, blue, and finally red, while also ensuring that the cylinders do not topple over.",
840
+ "assets-used": [
841
+ "cylinder/cylinder-template.urdf",
842
+ "stacking/stand.urdf"
843
+ ]
844
+ },
845
+ "color-coordinated-cylinder-stand-in-line": {
846
+ "task-name": "color-coordinated-cylinder-stand-in-line",
847
+ "task-description": "There are four stands of different colors (red, blue, green, yellow) and four cylinders of matching colors. The task is to pick up each cylinder and place it on top of the stand of the same color, forming four cylinder-and-stand pairs. However, the challenge here is to do this in a specific color sequence - red, blue, green, and finally yellow, and then line them up in a straight line from left to right according to the same color sequence.",
848
+ "assets-used": [
849
+ "cylinder/cylinder-template.urdf",
850
+ "stacking/stand.urdf"
851
+ ]
852
+ },
853
+ "color-coordinated-pyramid-construction": {
854
+ "task-name": "color-coordinated-pyramid-construction",
855
+ "task-description": "On a tabletop, there are six blocks in two colors (three red and three blue). The task involves picking up these blocks and constructing a pyramid with two levels on a stand: the first level should consist of three blocks (two red blocks and one blue block), and the second level should be formed by stacking the remaining three blocks (two blue blocks and one red block) on top of the first level. The challenge lies in the precise placement, color coordination, and maintaining the balance of the pyramid.",
856
+ "assets-used": [
857
+ "stacking/block.urdf",
858
+ "stacking/stand.urdf"
859
+ ]
860
+ },
861
+ "color-coordinated-ball-stacking": {
862
+ "task-name": "color-coordinated-ball-stacking",
863
+ "task-description": "There are four balls of different colors (red, blue, green, yellow), and four containers of matching colors on the table. The task is to pick up each ball and stack it on top of the corresponding colored container. However, the stacking should be done in a specific color sequence - blue at the bottom, followed by yellow, then green, and finally red at the top. This task enforces challenging skills due to the precision required for stacking the balls, color coordination, and sequencing.",
864
+ "assets-used": [
865
+ "ball/ball-template.urdf",
866
+ "container/container-template.urdf"
867
+ ]
868
+ },
869
+ "color-coded-blocks-on-corner": {
870
+ "task-name": "color-coded-blocks-on-corner",
871
+ "task-description": "On a tabletop, there are four blocks of different colors (red, blue, green, and yellow) and a corner structure. The task involves picking up each block and placing it in the corner structure in a specific color sequence: from left to right, place red, blue, green, and finally yellow. The blocks must be arranged such that they form a straight line along the corner. The challenge lies in the precise placement, color coordination, and maintaining the balance of the blocks along the corner.",
872
+ "assets-used": [
873
+ "block/block.urdf",
874
+ "corner/corner-template.urdf"
875
+ ]
876
+ },
877
+ "insertion-in-color-sequenced-zones": {
878
+ "task-name": "insertion-in-color-sequenced-zones",
879
+ "task-description": "On the table, there are four differently-colored insertion ell objects (red, blue, green, yellow) and four zones on the tabletop marked in the same colors. Initially, each ell is placed in a zone but not corresponding to the color of the zone. The task is to pick up each ell and place it in the zone of the same color, in the specific sequence of red, blue, green, and yellow from left to right, requiring careful navigation, precise placement, color matching, and sequence following.",
880
+ "assets-used": [
881
+ "insertion/ell.urdf",
882
+ "zone/zone.urdf"
883
+ ]
884
+ },
885
+ "precise-block-placement-in-container": {
886
+ "task-name": "precise-block-placement-in-container",
887
+ "task-description": "The tabletop has a row of four colored containers (red, blue, green, yellow), and twelve blocks of matching colors (three of each color). The task involves picking up each color of blocks and placing them in the container of the same color in a specific orientation: one block standing upright, one block lying flat, and one block on its side. The challenge lies in the precise placement and orientation of blocks within the confined space of the containers, while also maintaining color coordination.",
888
+ "assets-used": [
889
+ "block/block.urdf",
890
+ "container/container-template.urdf"
891
+ ]
892
+ },
893
+ "color-coordinated-bowl-stacking": {
894
+ "task-name": "color-coordinated-bowl-stacking",
895
+ "task-description": "There are four bowls and four blocks of different colors (red, blue, green, and yellow) on the table. The task is to pick up each block and place it into the bowl of the same color. Following this, the robot must stack the bowls from largest to smallest (from bottom to top) in the sequence of red, blue, green, and yellow. The challenge lies in not only the precise placement and color coordination, but also in the delicate stacking of the bowls without toppling them over.",
896
+ "assets-used": [
897
+ "bowl/bowl.urdf",
898
+ "block/block.urdf"
899
+ ]
900
+ },
901
+ "color-coordinated-zone-stacking": {
902
+ "task-name": "color-coordinated-zone-stacking",
903
+ "task-description": "On the tabletop, there are three zones and nine blocks of three different colors (red, blue, green). Each color has three blocks and the blocks are scattered randomly on the table. The task is to pick up the blocks and stack them in the zones to form a pyramid shape. Each pyramid should contain blocks of the same color with two blocks on the base and one block on top. The zones with the pyramids should be arranged in a straight line in the following color order: red, blue, green from left to right. The challenge lies in the color coordination, precise stacking and the arrangement of the zones.",
904
+ "assets-used": [
905
+ "block/block.urdf",
906
+ "zone/zone.urdf"
907
+ ]
908
+ },
909
+ "color-cued-ball-insertion": {
910
+ "task-name": "color-cued-ball-insertion",
911
+ "task-description": "The task area has four different colored bowls (red, blue, green, yellow) and four spheres of corresponding colors. Initially, the spheres are not in their color-matching bowls. The task is to pick up each sphere and place it in the bowl of the same color. However, the bowls are situated inside separate corners of a square structure marked by small blocks. This necessitates precise navigation around the square structure, careful picking and placing of spheres, color matching, and maintaining the balance of the bowls.",
912
+ "assets-used": [
913
+ "bowl/bowl.urdf",
914
+ "sphere/sphere.urdf",
915
+ "block/small.urdf",
916
+ "square/square-template.urdf"
917
+ ]
918
+ },
919
+ "color-coordinated-insertion-through-box-barrier": {
920
+ "task-name": "color-coordinated-insertion-through-box-barrier",
921
+ "task-description": "On a tabletop, there are four differently colored ell objects (red, blue, green, and yellow) and a corresponding set of color-coded fixtures. Placed in between the ell objects and the fixtures, there are two rows of boxes forming an 'L' shaped barrier. The task involves picking up each ell object and inserting it into the matching color fixture in a specific order: from left to right, insert red, blue, green, and then yellow, without knocking over any of the boxes. The challenge lies in precise navigation through the box barrier, precise insertion, color matching, and sequence following.",
922
+ "assets-used": [
923
+ "insertion/ell.urdf",
924
+ "insertion/fixture.urdf",
925
+ "box/box-template.urdf"
926
+ ]
927
+ },
928
+ "color-coordinated-insertion-and-stacking": {
929
+ "task-name": "color-coordinated-insertion-and-stacking",
930
+ "task-description": "On the tabletop, there are four differently colored ell-shaped objects (red, blue, green, yellow) and four fixtures of corresponding colors. The task is to pick up each ell object and insert it into the fixture of the same color. Additionally, there are four blocks of matching colors. The robot has to stack these blocks on top of the fixtures, maintaining the color coordination. However, the tabletop is marked by a square path delineated by small blocks, within which the ell objects, blocks, and fixtures are placed randomly. This necessitates precise navigation within the square path, color coordination, stacking and insertion skills.",
931
+ "assets-used": [
932
+ "insertion/ell.urdf",
933
+ "insertion/fixture.urdf",
934
+ "block/block.urdf",
935
+ "block/small.urdf",
936
+ "square/square-template.urdf"
937
+ ]
938
+ },
939
+ "color-coordinated-cylinder-ball-match": {
940
+ "task-name": "color-coordinated-cylinder-ball-match",
941
+ "task-description": "On the tabletop, there are four cylinders of different colors (red, blue, green, and yellow) and four balls of corresponding colors. The task is to pick up each ball and place it on top of the cylinder of the same color without the ball rolling off. However, there are small blocks scattered randomly on the table that the robot has to navigate around without knocking them over. The challenge lies in the precise placement of the balls on top of the cylinders, color matching, and navigation around the blocks.",
942
+ "assets-used": [
943
+ "cylinder/cylinder-template.urdf",
944
+ "ball/ball-template.urdf",
945
+ "block/small.urdf"
946
+ ]
947
+ },
948
+ "multi-level-insertion-and-zone-matching": {
949
+ "task-name": "multi-level-insertion-and-zone-matching",
950
+ "task-description": "There are three levels of zones marked on the tabletop - the first level is red, second is blue, and third is green. On each level, there are large, medium, and small ell-shaped objects in corresponding colors. The task is to pick up each ell object from its current position and insert it into the corresponding colored zone on the same level, but in a specific order - large, medium, and small. The challenge lies in the precise control of insertion, color coordination, and the multi-level structure of the environment.",
951
+ "assets-used": [
952
+ "zone/zone.urdf",
953
+ "insertion/ell.urdf"
954
+ ]
955
+ },
956
+ "multi-color-block-sequence-insertion": {
957
+ "task-name": "multi-color-block-sequence-insertion",
958
+ "task-description": "On the tabletop, there are five blocks of different colors (red, blue, green, yellow, and orange) and five fixtures of matching colors. However, the fixtures are arranged in a mixed sequence of colors. The task involves picking up each block and inserting it into the fixture of the same color, but in a specific sequence - first red, then blue, next green, followed by yellow, and finally orange. The fixtures can be inserted only in the specified sequence and the robot cannot proceed to the next color without correctly inserting the current one. The task is challenging due to the precision required in inserting the blocks, the color coordination, and following the sequence.",
959
+ "assets-used": [
960
+ "block/block.urdf",
961
+ "insertion/fixture.urdf"
962
+ ]
963
+ },
964
+ "ball-tower-in-zones": {
965
+ "task-name": "ball-tower-in-zones",
966
+ "task-description": "On the table, there are three spheres and three cylindrical stands of different colors (red, blue, green). The task starts with each sphere not corresponding to the stand of the same color. The task is to pick up each sphere and stack it on top of the stand of the same color while maintaining the balance. However, the stacking should be done in a specific color sequence - blue at the bottom, followed by green, and finally red at the top. The spheres and stands are each placed within separate zones, adding a challenge in precise navigation and placement.",
967
+ "assets-used": [
968
+ "sphere/sphere.urdf",
969
+ "zone/zone.urdf",
970
+ "stacking/stand.urdf"
971
+ ]
972
+ },
973
+ "color-coordinated-container-pyramid": {
974
+ "task-name": "color-coordinated-container-pyramid",
975
+ "task-description": "On a tabletop, there are six containers and six blocks of different colors (red, blue, green, yellow, orange, and purple). The task is to pick up each block and place it into the container of the same color, then stack these containers to form a pyramid with three levels. The first level should consist of four containers: red, blue, green, and yellow (from left to right). The second level should be constructed by placing the orange and purple containers on top of the red and blue containers respectively. The top level should be formed by placing the red container onto the orange container. The challenge lies in the precise placement, color coordination, and maintaining the balance of the pyramid.",
976
+ "assets-used": [
977
+ "block/block.urdf",
978
+ "container/container-template.urdf"
979
+ ]
980
+ },
981
+ "corner-blocks-insertion": {
982
+ "task-name": "corner-blocks-insertion",
983
+ "task-description": "On the tabletop, there are four different colored ell objects (red, blue, green, yellow) and four fixtures in the corresponding colors. Initially, each ell is placed in the corner of the table. The task is to pick up each ell and insert it into the fixture of the same color. However, there is a square-shaped barrier in the center of the table. The ell objects must be inserted in a specific sequence - red first, then blue, then green, and finally yellow. This task requires careful navigation around the barrier, precise insertion, color coordination, and sequence following.",
984
+ "assets-used": [
985
+ "insertion/ell.urdf",
986
+ "insertion/fixture.urdf",
987
+ "square/square-template.urdf"
988
+ ]
989
+ },
990
+ "color-coordinated-insertion-in-cylinders": {
991
+ "task-name": "color-coordinated-insertion-in-cylinders",
992
+ "task-description": "There are four differently-colored ell objects (red, blue, green, yellow) and four cylinders of matching colors. The task involves picking up each ell object and inserting it into the cylinder of the same color in a specific order: from left to right, insert red, blue, green, and finally yellow. The challenge lies in the precise manipulation of the ell objects, the color-coordination required and the ability to correctly orient the cylinders for the insertion.",
993
+ "assets-used": [
994
+ "insertion/ell.urdf",
995
+ "cylinder/cylinder-template.urdf"
996
+ ]
997
+ },
998
+ "color-coordinated-block-transport": {
999
+ "task-name": "color-coordinated-block-transport",
1000
+ "task-description": "On the tabletop, there are four pallets of different colors (red, blue, green, and yellow), each containing a block of the same color. The task is to pick up each block and transport it to a container of matching color, which is located in a corner surrounded by a line of small blocks, serving as an obstacle. The robot must execute this task without disturbing the small blocks and in a specific color sequence: red first, then blue, green, and finally yellow. The task tests the robot's precise navigation, color coordination, sequence following, and obstacle avoidance capabilities.",
1001
+ "assets-used": [
1002
+ "block/block.urdf",
1003
+ "pallet/pallet.urdf",
1004
+ "container/container-template.urdf",
1005
+ "block/small.urdf"
1006
+ ]
1007
+ },
1008
+ "color-cued-ball-corner-sorting": {
1009
+ "task-name": "color-cued-ball-corner-sorting",
1010
+ "task-description": "On a tabletop, there are four different colored balls (red, blue, green, yellow) and four corners marked with corresponding colors using the corner template. The task involves picking up each ball and precisely placing it in the corner of the same color. However, there is a rectangular zone in the middle of the table marked by small blocks. The robot has to strategically navigate around this zone without touching the blocks while transporting the balls to the corresponding corners. The challenge lies in the precise navigation, placement of the balls, and color matching while avoiding the blocks.",
1011
+ "assets-used": [
1012
+ "ball/ball-template.urdf",
1013
+ "corner/corner-template.urdf",
1014
+ "block/block_for_anchors.urdf",
1015
+ "zone/zone.urdf"
1016
+ ]
1017
+ },
1018
+ "color-coordinated-insertion-and-corner-pyramid": {
1019
+ "task-name": "color-coordinated-insertion-and-corner-pyramid",
1020
+ "task-description": "On a tabletop, there are four colored ell-shaped blocks (red, blue, green, and yellow) and four fixtures of corresponding colors. The task is to first pick up each ell block and insert it into the fixture of the same color in a specific sequence - red first, then blue, then green, and finally yellow. After the successful insertion, the robot must pick up the four blocks again from the fixtures and stack them in a corner-structured pyramid with red at the bottom, blue in the middle, green on the third level, and yellow on top.",
1021
+ "assets-used": [
1022
+ "insertion/ell.urdf",
1023
+ "insertion/fixture.urdf",
1024
+ "corner/corner-template.urdf"
1025
+ ]
1026
+ },
1027
+ "color-coordinated-sphere-and-cylinder-stack": {
1028
+ "task-name": "color-coordinated-sphere-and-cylinder-stack",
1029
+ "task-description": "On the tabletop, there are four differently colored spheres (red, blue, green, and yellow) and four cylinders of the same colors. The task involves picking up each cylinder and stacking it on top of the sphere of the same color. However, the stacking should be done in a specific color sequence - blue at the bottom, followed by yellow, then green, and finally red at the top. This task enforces challenging skills due to the precision required for stacking the cylinders on top of spheres, color coordination, and sequencing.",
1030
+ "assets-used": [
1031
+ "sphere/sphere-template.urdf",
1032
+ "cylinder/cylinder-template.urdf"
1033
+ ]
1034
+ },
1035
+ "color-coordinated-blocks-in-cylindrical-maze": {
1036
+ "task-name": "color-coordinated-blocks-in-cylindrical-maze",
1037
+ "task-description": "There are six differently colored blocks (red, blue, green, yellow, orange, and purple) and six cylindrical containers of matching colors arranged to form a maze-like structure. The task is to pick up each block and place it into the cylindrical container of the same color. The challenge lies in the precise navigation through the maze-like structure, correct color matching, and accurate placement of the blocks into the cylindrical containers.",
1038
+ "assets-used": [
1039
+ "block/block.urdf",
1040
+ "cylinder/cylinder-template.urdf"
1041
+ ]
1042
+ },
1043
+ "color-coordinated-cylinder-relay": {
1044
+ "task-name": "color-coordinated-cylinder-relay",
1045
+ "task-description": "On the tabletop, there are four cylinders of different colors (red, blue, green, yellow) placed at one end and four zones of matching colors at the other end, with a square outline and small blocks serving as barriers between the cylinders and zones. The task is to pick up each cylinder and navigate it through the barriers to reach and place it in the zone of the same color. The task must be done in a specific sequence - red first, then blue, then green, and finally yellow. This task is challenging due to the requirement for precise navigation and placement, color coordination, and sequence following.",
1046
+ "assets-used": [
1047
+ "cylinder/cylinder-template.urdf",
1048
+ "zone/zone.urdf",
1049
+ "square/square-template.urdf",
1050
+ "block/small.urdf"
1051
+ ]
1052
+ },
1053
+ "color-coordinated-cylinder-maze": {
1054
+ "task-name": "color-coordinated-cylinder-maze",
1055
+ "task-description": "On the tabletop, there is a maze-like structure created by small blocks and within this maze, there are four differently colored cylinders (red, blue, green, yellow). The robot needs to pick up each cylinder and place it outside of the maze into four separate zones of matching colors. The task is challenging due to the precise navigation required within the maze, the color coordination of cylinders and zones, and the careful extraction of cylinders from the maze.",
1056
+ "assets-used": [
1057
+ "block/small.urdf",
1058
+ "cylinder/cylinder-template.urdf",
1059
+ "zone/zone.urdf"
1060
+ ]
1061
+ },
1062
+ "insertion-path-obstacle-course": {
1063
+ "task-name": "insertion-path-obstacle-course",
1064
+ "task-description": "On the tabletop, there are four colored ell-shaped blocks (red, blue, green, and yellow) and four fixtures of matching colors. However, a line of small blocks forms a path that the robot must navigate along to insert each ell block into the fixture of the same color. The robot must move each ell block along the marked path to reach the fixture. The order for the insertion should be red, blue, green, and finally yellow from left to right. The task is challenging due to the precision required for insertion, the careful navigation along the path, and the color coordination.",
1065
+ "assets-used": [
1066
+ "block/small.urdf",
1067
+ "insertion/ell.urdf",
1068
+ "insertion/fixture.urdf"
1069
+ ]
1070
+ },
1071
+ "color-coordinated-sphere-and-bowl-match": {
1072
+ "task-name": "color-coordinated-sphere-and-bowl-match",
1073
+ "task-description": "On a tabletop, there are four bowls and four spheres of different sizes and colors (red, blue, green, and yellow). The task is to pick up each sphere and place it into the bowl of the same color. The challenge lies in the precision necessary for placement, the color coordination, and the size disparity between the spheres and bowls.",
1074
+ "assets-used": [
1075
+ "sphere/sphere-template.urdf",
1076
+ "bowl/bowl.urdf"
1077
+ ]
1078
+ },
1079
+ "color-coordinated-pallet-insertion": {
1080
+ "task-name": "color-coordinated-pallet-insertion",
1081
+ "task-description": "On the tabletop, there are four pallets and four ell objects of different colors (red, blue, green, yellow). Each color has one pallet and one ell object. The task is to pick up each ell object and insert it into the pallet of the same color. However, the pallets and the ell objects are initially positioned on opposite sides of a barrier formed by a line of small blocks. The robot needs to transport the ell objects over the barrier and insert them into the corresponding pallets without knocking over any blocks. The challenge lies in the precise navigation, the insertion of the ell objects into the pallets, and color matching.",
1082
+ "assets-used": [
1083
+ "pallet/pallet.urdf",
1084
+ "insertion/ell.urdf",
1085
+ "block/small.urdf"
1086
+ ]
1087
+ },
1088
+ "color-coordinated-insertion-and-stack": {
1089
+ "task-name": "color-coordinated-insertion-and-stack",
1090
+ "task-description": "The task begins with four colored ell-shaped blocks (red, blue, green, yellow) and four fixtures of corresponding colors. The robot must pick up each ell block and insert it into the fixture of the same color in a specific sequence - red first, then blue, then green, and finally yellow. After successful insertion, the robot must pick up the four blocks again from the fixtures and stack them in a pallet to form a pyramid with red at the bottom, blue in the middle, green on the third level, and yellow on top.",
1091
+ "assets-used": [
1092
+ "insertion/ell.urdf",
1093
+ "insertion/fixture.urdf",
1094
+ "pallet/pallet.urdf"
1095
+ ]
1096
+ },
1097
+ "cylinder-ring-stack": {
1098
+ "task-name": "cylinder-ring-stack",
1099
+ "task-description": "On the tabletop, there are four differently colored cylinders (red, blue, green, yellow) and four blocks of matching colors. The task involves picking up each block and stacking it on top of the corresponding colored cylinder. However, each cylinder and block pair should be stacked inside a differently colored container (color sequence: red cylinder and block in blue container, blue in green, green in yellow, and yellow in red). The task offers challenges in multi-object manipulation, color coordination, and precise stacking in a confined space.",
1100
+ "assets-used": [
1101
+ "cylinder/cylinder-template.urdf",
1102
+ "block/block.urdf",
1103
+ "container/container-template.urdf"
1104
+ ]
1105
+ },
1106
+ "color-coordinated-sphere-on-pallet-pyramid": {
1107
+ "task-name": "color-coordinated-sphere-on-pallet-pyramid",
1108
+ "task-description": "On the tabletop, there are three pallets and nine blocks of three different colors (red, blue, green). Each color has three blocks and the blocks are scattered randomly on the table. The task is to pick up the blocks and stack them on the pallets to form a pyramid shape. Each pyramid should contain blocks of the same color with two blocks on the base and one block on top. Additionally, there are three spheres of matching colors (red, blue, green). The task is to pick up each sphere and place it on top of the corresponding colored pyramid. The pallets with the pyramids and spheres should be arranged in a straight line in the following color order: red, blue, green from left to right. The challenge lies in the color coordination, precise stacking, and the arrangement of the pallets.",
1109
+ "assets-used": [
1110
+ "block/block.urdf",
1111
+ "pallet/pallet.urdf",
1112
+ "sphere/sphere.urdf"
1113
+ ]
1114
+ },
1115
+ "color-coordinated-stacked-block-bowls": {
1116
+ "task-name": "color-coordinated-stacked-block-bowls",
1117
+ "task-description": "There are three bowls and nine blocks of three different colors (red, blue, green) on the tabletop. Each color has three blocks. The task is to pick up these blocks and stack them inside the bowls in the shape of a pyramid. Each bowl should contain blocks of the same color with two blocks at the base and one block on top. The bowls with the pyramids should be arranged in a straight line in the following color order: red, blue, and green from left to right. The challenge lies in the color coordination, precise stacking, and the arrangement of the bowls.",
1118
+ "assets-used": [
1119
+ "bowl/bowl.urdf",
1120
+ "block/block.urdf"
1121
+ ]
1122
+ },
1123
+ "color-sequenced-sphere-placement": {
1124
+ "task-name": "color-sequenced-sphere-placement",
1125
+ "task-description": "On the tabletop, there are four spheres of different colors (red, blue, green, and yellow) and four colored squares of matching colors. The task involves picking up each sphere and precisely placing it in the center of the square of the same color. However, the spheres must be placed in a specific sequence - red first, then blue, then green, and finally yellow. The task is challenging due to the need for precise placement, color coordination, and sequence following.",
1126
+ "assets-used": [
1127
+ "sphere/sphere.urdf",
1128
+ "square/square-template.urdf"
1129
+ ]
1130
+ },
1131
+ "color-sequence-loading-pallet": {
1132
+ "task-name": "color-sequence-loading-pallet",
1133
+ "task-description": "On a tabletop, there are ten blocks of five different colors (two red, two blue, two green, two yellow, and two orange), and a pallet. The task is to pick up one block of each color and place them onto the pallet in a specific sequence: red, blue, green, yellow, and finally orange. Next, pick up the remaining blocks and stack them on top of the corresponding color in the same sequence. The challenge lies in the precise placement of the blocks and maintaining the load balance on the pallet.",
1134
+ "assets-used": [
1135
+ "block/block.urdf",
1136
+ "pallet/pallet.urdf"
1137
+ ]
1138
+ }
1139
+ }
prompts/fgen.py DELETED
@@ -1,49 +0,0 @@
1
- import numpy as np
2
- from shapely.geometry import *
3
- from shapely.affinity import *
4
-
5
- from env_utils import get_obj_pos, get_obj_names
6
- from ctrl_utils import put_first_on_second
7
-
8
- # define function: total = get_total(xs=numbers).
9
- def get_total(xs):
10
- return np.sum(xs)
11
-
12
- # define function: y = eval_line(x, slope, y_intercept=0).
13
- def eval_line(x, slope, y_intercept):
14
- return x * slope + y_intercept
15
-
16
- # define function: pt = get_pt_to_the_left(pt, dist).
17
- def get_pt_to_the_left(pt, dist):
18
- return pt + [-dist, 0]
19
-
20
- # define function: pt = get_pt_to_the_top(pt, dist).
21
- def get_pt_to_the_top(pt, dist):
22
- return pt + [0, dist]
23
-
24
- # define function line = make_line_by_length(length=x).
25
- def make_line_by_length(length):
26
- line = LineString([[0, 0], [length, 0]])
27
- return line
28
-
29
- # define function: line = make_vertical_line_by_length(length=x).
30
- def make_vertical_line_by_length(length):
31
- line = make_line_by_length(length)
32
- vertical_line = rotate(line, 90)
33
- return vertical_line
34
-
35
- # define function: pt = interpolate_line(line, t=0.5).
36
- def interpolate_line(line, t):
37
- pt = line.interpolate(t, normalized=True)
38
- return np.array(pt.coords[0])
39
-
40
- # example: scale a line by 2.
41
- line = make_line_by_length(1)
42
- new_shape = scale(line, xfact=2, yfact=2)
43
-
44
- # example: put object1 on top of object0.
45
- put_first_on_second('object1', 'object0')
46
-
47
- # example: get the position of the first object.
48
- obj_names = get_obj_names()
49
- pos_2d = get_obj_pos(obj_names[0])
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
prompts/finetune_data.csv DELETED
The diff for this file is too large to render. See raw diff
 
prompts/finetune_data_prepared.jsonl DELETED
The diff for this file is too large to render. See raw diff
 
prompts/parse_obj_name.py DELETED
@@ -1,59 +0,0 @@
1
- import numpy as np
2
- from env_utils import get_obj_pos, parse_position
3
- from utils import get_obj_positions_np
4
-
5
- objects = ['blue block', 'cyan block', 'purple bowl', 'gray bowl', 'brown bowl', 'pink block', 'purple block']
6
- # the block closest to the purple bowl.
7
- block_names = ['blue block', 'cyan block', 'purple block']
8
- closest_block_idx = get_closest_idx(points=get_obj_positions_np(block_names), point=get_obj_pos('purple bowl'))
9
- closest_block_name = block_names[closest_block_idx]
10
- ret_val = closest_block_name
11
- objects = ['brown bowl', 'banana', 'brown block', 'apple', 'blue bowl', 'blue block']
12
- # the blocks.
13
- ret_val = ['brown block', 'blue block']
14
- objects = ['brown bowl', 'banana', 'brown block', 'apple', 'blue bowl', 'blue block']
15
- # the brown objects.
16
- ret_val = ['brown bowl', 'brown block']
17
- objects = ['brown bowl', 'banana', 'brown block', 'apple', 'blue bowl', 'blue block']
18
- # a fruit that's not the apple
19
- fruit_names = ['banana', 'apple']
20
- for fruit_name in fruit_names:
21
- if fruit_name != 'apple':
22
- ret_val = fruit_name
23
- objects = ['blue block', 'cyan block', 'purple bowl', 'brown bowl', 'purple block']
24
- # blocks above the brown bowl.
25
- block_names = ['blue block', 'cyan block', 'purple block']
26
- brown_bowl_pos = get_obj_pos('brown bowl')
27
- use_block_names = []
28
- for block_name in block_names:
29
- if get_obj_pos(block_name)[1] > brown_bowl_pos[1]:
30
- use_block_names.append(block_name)
31
- ret_val = use_block_names
32
- objects = ['blue block', 'cyan block', 'purple bowl', 'brown bowl', 'purple block']
33
- # the blue block.
34
- ret_val = 'blue block'
35
- objects = ['blue block', 'cyan block', 'purple bowl', 'brown bowl', 'purple block']
36
- # the block closest to the bottom right corner.
37
- corner_pos = parse_position('bottom right corner')
38
- block_names = ['blue block', 'cyan block', 'purple block']
39
- closest_block_idx = get_closest_idx(points=get_obj_positions_np(block_names), point=corner_pos)
40
- closest_block_name = block_names[closest_block_idx]
41
- ret_val = closest_block_name
42
- objects = ['brown bowl', 'green block', 'brown block', 'green bowl', 'blue bowl', 'blue block']
43
- # the left most block.
44
- block_names = ['green block', 'brown block', 'blue block']
45
- left_block_idx = np.argsort(get_obj_positions_np(block_names)[:, 0])[0]
46
- left_block_name = block_names[left_block_idx]
47
- ret_val = left_block_name
48
- objects = ['brown bowl', 'green block', 'brown block', 'green bowl', 'blue bowl', 'blue block']
49
- # the bowl on near the top.
50
- bowl_names = ['brown bowl', 'green bowl', 'blue bowl']
51
- top_bowl_idx = np.argsort(get_obj_positions_np(bowl_names)[:, 1])[-1]
52
- top_bowl_name = bowl_names[top_bowl_idx]
53
- ret_val = top_bowl_name
54
- objects = ['yellow bowl', 'purple block', 'yellow block', 'purple bowl', 'pink bowl', 'pink block']
55
- # the third bowl from the right.
56
- bowl_names = ['yellow bowl', 'purple bowl', 'pink bowl']
57
- bowl_idx = np.argsort(get_obj_positions_np(bowl_names)[:, 0])[-3]
58
- bowl_name = bowl_names[bowl_idx]
59
- ret_val = bowl_name
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
prompts/parse_position.py DELETED
@@ -1,54 +0,0 @@
1
- import numpy as np
2
- from shapely.geometry import *
3
- from shapely.affinity import *
4
- from env_utils import denormalize_xy, parse_obj_name, get_obj_names, get_obj_pos
5
-
6
- # a 30cm horizontal line in the middle with 3 points.
7
- middle_pos = denormalize_xy([0.5, 0.5])
8
- start_pos = middle_pos + [-0.3/2, 0]
9
- end_pos = middle_pos + [0.3/2, 0]
10
- line = make_line(start=start_pos, end=end_pos)
11
- points = interpolate_pts_on_line(line=line, n=3)
12
- ret_val = points
13
- # a 20cm vertical line near the right with 4 points.
14
- middle_pos = denormalize_xy([1, 0.5])
15
- start_pos = middle_pos + [0, -0.2/2]
16
- end_pos = middle_pos + [0, 0.2/2]
17
- line = make_line(start=start_pos, end=end_pos)
18
- points = interpolate_pts_on_line(line=line, n=4)
19
- ret_val = points
20
- # a diagonal line from the top left to the bottom right corner with 5 points.
21
- top_left_corner = denormalize_xy([0, 1])
22
- bottom_right_corner = denormalize_xy([1, 0])
23
- line = make_line(start=top_left_corner, end=bottom_right_corner)
24
- points = interpolate_pts_on_line(line=line, n=5)
25
- ret_val = points
26
- # a triangle with size 10cm with 3 points.
27
- polygon = make_triangle(size=0.1, center=denormalize_xy([0.5, 0.5]))
28
- points = get_points_from_polygon(polygon)
29
- ret_val = points
30
- # the corner closest to the sun colored block.
31
- block_name = parse_obj_name('the sun colored block', f'objects = {get_obj_names()}')
32
- corner_positions = np.array([denormalize_xy(pos) for pos in [[0, 0], [0, 1], [1, 1], [1, 0]]])
33
- closest_corner_pos = get_closest_point(points=corner_positions, point=get_obj_pos(block_name))
34
- ret_val = closest_corner_pos
35
- # the side farthest from the right most bowl.
36
- bowl_name = parse_obj_name('the right most bowl', f'objects = {get_obj_names()}')
37
- side_positions = np.array([denormalize_xy(pos) for pos in [[0.5, 0], [0.5, 1], [1, 0.5], [0, 0.5]]])
38
- farthest_side_pos = get_farthest_point(points=side_positions, point=get_obj_pos(bowl_name))
39
- ret_val = farthest_side_pos
40
- # a point above the third block from the bottom.
41
- block_name = parse_obj_name('the third block from the bottom', f'objects = {get_obj_names()}')
42
- ret_val = get_obj_pos(block_name) + [0.1, 0]
43
- # a point 10cm left of the bowls.
44
- bowl_names = parse_obj_name('the bowls', f'objects = {get_obj_names()}')
45
- bowl_positions = get_all_object_positions_np(obj_names=bowl_names)
46
- left_obj_pos = bowl_positions[np.argmin(bowl_positions[:, 0])] + [-0.1, 0]
47
- ret_val = left_obj_pos
48
- # the bottom side.
49
- bottom_pos = denormalize_xy([0.5, 0])
50
- ret_val = bottom_pos
51
- # the top corners.
52
- top_left_pos = denormalize_xy([0, 1])
53
- top_right_pos = denormalize_xy([1, 1])
54
- ret_val = [top_left_pos, top_right_pos]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
prompts/parse_question.py DELETED
@@ -1,27 +0,0 @@
1
- from utils import get_obj_pos, get_obj_names, parse_obj_name, bbox_contains_pt, is_obj_visible
2
-
3
- objects = ['yellow bowl', 'blue block', 'yellow block', 'blue bowl', 'fruit', 'green block', 'black bowl']
4
- # is the blue block to the right of the yellow bowl?
5
- ret_val = get_obj_pos('blue block')[0] > get_obj_pos('yellow bowl')[0]
6
- objects = ['yellow bowl', 'blue block', 'yellow block', 'blue bowl', 'fruit', 'green block', 'black bowl']
7
- # how many yellow objects are there?
8
- yellow_object_names = parse_obj_name('the yellow objects', f'objects = {get_obj_names()}')
9
- ret_val = len(yellow_object_names)
10
- objects = ['pink block', 'green block', 'pink bowl', 'blue block', 'blue bowl', 'green bowl']
11
- # what are the blocks left of the green bowl?
12
- block_names = parse_obj_name('the blocks', f'objects = {get_obj_names()}')
13
- green_bowl_pos = get_obj_pos('green bowl')
14
- left_block_names = []
15
- for block_name in block_names:
16
- if get_obj_pos(block_name)[0] < green_bowl_pos[0]:
17
- left_block_names.append(block_name)
18
- ret_val = left_block_names
19
- objects = ['pink block', 'yellow block', 'pink bowl', 'blue block', 'blue bowl', 'yellow bowl']
20
- # is the sun colored block above the blue bowl?
21
- sun_block_name = parse_obj_name('sun colored block', f'objects = {get_obj_names()}')
22
- sun_block_pos = get_obj_pos(sun_block_name)
23
- blue_bowl_pos = get_obj_pos('blue bowl')
24
- ret_val = sun_block_pos[1] > blue_bowl_pos[1]
25
- objects = ['pink block', 'yellow block', 'pink bowl', 'blue block', 'blue bowl', 'yellow bowl']
26
- # is the green block below the blue bowl?
27
- ret_val = get_obj_pos('green block')[1] < get_obj_pos('blue bowl')[1]
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
prompts/tabletop_ui.py DELETED
@@ -1,173 +0,0 @@
1
- # Python 2D robot control script
2
- import numpy as np
3
- from env_utils import put_first_on_second, get_obj_pos, get_obj_names, say, get_corner_name, get_side_name, is_obj_visible, stack_objects_in_order
4
- from plan_utils import parse_obj_name, parse_position, parse_question, transform_shape_pts
5
-
6
- objects = ['yellow block', 'green block', 'yellow bowl', 'blue block', 'blue bowl', 'green bowl']
7
- # place the yellow block on the yellow bowl.
8
- say('Ok - putting the yellow block on the yellow bowl')
9
- put_first_on_second('yellow block', 'yellow bowl')
10
- objects = ['yellow block', 'green block', 'yellow bowl', 'blue block', 'blue bowl', 'green bowl']
11
- # which block did you move.
12
- say('I moved the yellow block')
13
- objects = ['yellow block', 'green block', 'yellow bowl', 'blue block', 'blue bowl', 'green bowl']
14
- # move the green block to the top right corner.
15
- say('Got it - putting the green block on the top right corner')
16
- corner_pos = parse_position('top right corner')
17
- put_first_on_second('green block', corner_pos)
18
- objects = ['yellow block', 'green block', 'yellow bowl', 'blue block', 'blue bowl', 'green bowl']
19
- # stack the blue bowl on the yellow bowl on the green block.
20
- order_bottom_to_top = ['green block', 'yellow block', 'blue bowl']
21
- say(f'Sure - stacking from top to bottom: {", ".join(order_bottom_to_top)}')
22
- stack_objects_in_order(object_names=order_bottom_to_top)
23
- objects = ['cyan block', 'white block', 'cyan bowl', 'blue block', 'blue bowl', 'white bowl']
24
- # move the cyan block into its corresponding bowl.
25
- matches = {'cyan block': 'cyan bowl'}
26
- say('Got it - placing the cyan block on the cyan bowl')
27
- for first, second in matches.items():
28
- put_first_on_second(first, get_obj_pos(second))
29
- objects = ['cyan block', 'white block', 'cyan bowl', 'blue block', 'blue bowl', 'white bowl']
30
- # make a line of blocks on the right side.
31
- say('No problem! Making a line of blocks on the right side')
32
- block_names = parse_obj_name('the blocks', f'objects = {get_obj_names()}')
33
- line_pts = parse_position(f'a 30cm vertical line on the right with {len(block_names)} points')
34
- for block_name, pt in zip(block_names, line_pts):
35
- put_first_on_second(block_name, pt)
36
- objects = ['yellow block', 'red block', 'yellow bowl', 'gray block', 'gray bowl', 'red bowl']
37
- # put the small banana colored thing in between the blue bowl and green block.
38
- say('Sure thing - putting the yellow block between the blue bowl and the green block')
39
- target_pos = parse_position('a point in the middle betweeen the blue bowl and the green block')
40
- put_first_on_second('yellow block', target_pos)
41
- objects = ['yellow block', 'red block', 'yellow bowl', 'gray block', 'gray bowl', 'red bowl']
42
- # can you cut the bowls in half.
43
- say('no, I can only move objects around')
44
- objects = ['yellow block', 'green block', 'yellow bowl', 'gray block', 'gray bowl', 'green bowl']
45
- # stack the blocks on the right side with the gray one on the bottom.
46
- say('Ok. stacking the blocks on the right side with the gray block on the bottom')
47
- right_side = parse_position('the right side')
48
- put_first_on_second('gray block', right_side)
49
- order_bottom_to_top = ['gray block', 'green block', 'yellow block']
50
- stack_objects_in_order(object_names=order_bottom_to_top)
51
- objects = ['yellow block', 'green block', 'yellow bowl', 'blue block', 'blue bowl', 'green bowl']
52
- # hide the blue bowl.
53
- bowl_name = np.random.choice(['yellow bowl', 'green bowl'])
54
- say(f'Sounds good! Hiding the blue bowl under the {bowl_name}')
55
- put_first_on_second(bowl_name, 'blue bowl')
56
- objects = ['pink block', 'green block', 'pink bowl', 'blue block', 'blue bowl', 'green bowl']
57
- # move the grass-colored bowl to the left.
58
- say('Sure - moving the green bowl left by 10 centimeters')
59
- left_pos = parse_position('a point 10cm left of the green bowl')
60
- put_first_on_second('green bowl', left_pos)
61
- objects = ['pink block', 'green block', 'pink bowl', 'blue block', 'blue bowl', 'green bowl']
62
- # why did you move the red bowl.
63
- say(f'I did not move the red bowl')
64
- objects = ['pink block', 'green block', 'pink bowl', 'blue block', 'blue bowl', 'green bowl']
65
- # undo that.
66
- say('Sure - moving the green bowl right by 10 centimeters')
67
- left_pos = parse_position('a point 10cm right of the green bowl')
68
- put_first_on_second('green bowl', left_pos)
69
- objects = ['brown bowl', 'green block', 'brown block', 'green bowl', 'blue bowl', 'blue block']
70
- # place the top most block to the corner closest to the bottom most block.
71
- top_block_name = parse_obj_name('top most block', f'objects = {get_obj_names()}')
72
- bottom_block_name = parse_obj_name('bottom most block', f'objects = {get_obj_names()}')
73
- closest_corner_pos = parse_position(f'the corner closest to the {bottom_block_name}', f'objects = {get_obj_names()}')
74
- say(f'Putting the {top_block_name} on the {get_corner_name(closest_corner_pos)}')
75
- put_first_on_second(top_block_name, closest_corner_pos)
76
- objects = ['brown bowl', 'green block', 'brown block', 'green bowl', 'blue bowl', 'blue block']
77
- # move the brown bowl to the side closest to the green block.
78
- closest_side_position = parse_position('the side closest to the green block')
79
- say(f'Got it - putting the brown bowl on the {get_side_name(closest_side_position)}')
80
- put_first_on_second('brown bowl', closest_side_position)
81
- objects = ['brown bowl', 'green block', 'brown block', 'green bowl', 'blue bowl', 'blue block']
82
- # place the green block to the right of the bowl that has the blue block.
83
- bowl_name = parse_obj_name('the bowl that has the blue block', f'objects = {get_obj_names()}')
84
- if bowl_name:
85
- target_pos = parse_position(f'a point 10cm to the right of the {bowl_name}')
86
- say(f'No problem - placing the green block to the right of the {bowl_name}')
87
- put_first_on_second('green block', target_pos)
88
- else:
89
- say('There are no bowls that has the blue block')
90
- objects = ['brown bowl', 'green block', 'brown block', 'green bowl', 'blue bowl', 'blue block']
91
- # move the other blocks to the bottom corners.
92
- block_names = parse_obj_name('blocks other than the blue block', f'objects = {get_obj_names()}')
93
- corners = parse_position('the bottom corners')
94
- for block_name, pos in zip(block_names, corners):
95
- put_first_on_second(block_name, pos)
96
- objects = ['pink block', 'gray block', 'orange block']
97
- # move the pinkish colored block on the bottom side.
98
- say('Ok - putting the pink block on the bottom side')
99
- bottom_side_pos = parse_position('the bottom side')
100
- put_first_on_second('pink block', bottom_side_pos)
101
- objects = ['yellow bowl', 'blue block', 'yellow block', 'blue bowl']
102
- # is the blue block to the right of the yellow bowl?
103
- if parse_question('is the blue block to the right of the yellow bowl?', f'objects = {get_obj_names()}'):
104
- say('yes, there is a blue block to the right of the yellow bow')
105
- else:
106
- say('no, there is\'t a blue block to the right of the yellow bow')
107
- objects = ['yellow bowl', 'blue block', 'yellow block', 'blue bowl']
108
- # how many yellow objects are there?
109
- n_yellow_objs = parse_question('how many yellow objects are there', f'objects = {get_obj_names()}')
110
- say(f'there are {n_yellow_objs} yellow object')
111
- objects = ['pink block', 'green block', 'pink bowl', 'blue block', 'blue bowl', 'green bowl']
112
- # move the left most block to the green bowl.
113
- left_block_name = parse_obj_name('left most block', f'objects = {get_obj_names()}')
114
- say(f'Moving the {left_block_name} on the green bowl')
115
- put_first_on_second(left_block_name, 'green bowl')
116
- objects = ['pink block', 'green block', 'pink bowl', 'blue block', 'blue bowl', 'green bowl']
117
- # move the other blocks to different corners.
118
- block_names = parse_obj_name(f'blocks other than the {left_block_name}', f'objects = {get_obj_names()}')
119
- corners = parse_position('the corners')
120
- say(f'Ok - moving the other {len(block_names)} blocks to different corners')
121
- for block_name, pos in zip(block_names, corners):
122
- put_first_on_second(block_name, pos)
123
- objects = ['pink block', 'green block', 'pink bowl', 'blue block', 'blue bowl', 'green bowl']
124
- # is the pink block on the green bowl.
125
- if parse_question('is the pink block on the green bowl', f'objects = {get_obj_names()}'):
126
- say('Yes - the pink block is on the green bowl.')
127
- else:
128
- say('No - the pink block is not on the green bowl.')
129
- objects = ['pink block', 'green block', 'pink bowl', 'blue block', 'blue bowl', 'green bowl']
130
- # what are the blocks left of the green bowl.
131
- left_block_names = parse_question('what are the blocks left of the green bowl', f'objects = {get_obj_names()}')
132
- if len(left_block_names) > 0:
133
- say(f'These blocks are left of the green bowl: {", ".join(left_block_names)}')
134
- else:
135
- say('There are no blocks left of the green bowl')
136
- objects = ['yellow block', 'green block', 'yellow bowl', 'blue block', 'blue bowl', 'green bowl']
137
- # imagine that the bowls are different biomes on earth and imagine that the blocks are parts of a building.
138
- say('ok')
139
- objects = ['yellow block', 'green block', 'yellow bowl', 'blue block', 'blue bowl', 'green bowl']
140
- # now build a tower in the grasslands.
141
- order_bottom_to_top = ['green bowl', 'blue block', 'green block', 'yellow block']
142
- say('stacking the blocks on the green bowl')
143
- stack_objects_in_order(object_names=order_bottom_to_top)
144
- objects = ['yellow block', 'green block', 'yellow bowl', 'gray block', 'gray bowl', 'green bowl']
145
- # show me what happens when the desert gets flooded by the ocean.
146
- say('putting the yellow bowl on the blue bowl')
147
- put_first_on_second('yellow bowl', 'blue bowl')
148
- objects = ['pink block', 'gray block', 'orange block']
149
- # move all blocks 5cm toward the top.
150
- say('Ok - moving all blocks 5cm toward the top')
151
- block_names = parse_obj_name('the blocks', f'objects = {get_obj_names()}')
152
- for block_name in block_names:
153
- target_pos = parse_position(f'a point 5cm above the {block_name}')
154
- put_first_on_second(block_name, target_pos)
155
- objects = ['cyan block', 'white block', 'purple bowl', 'blue block', 'blue bowl', 'white bowl']
156
- # make a triangle of blocks in the middle.
157
- block_names = parse_obj_name('the blocks', f'objects = {get_obj_names()}')
158
- triangle_pts = parse_position(f'a triangle with size 10cm around the middle with {len(block_names)} points')
159
- say('Making a triangle of blocks around the middle of the workspace')
160
- for block_name, pt in zip(block_names, triangle_pts):
161
- put_first_on_second(block_name, pt)
162
- objects = ['cyan block', 'white block', 'purple bowl', 'blue block', 'blue bowl', 'white bowl']
163
- # make the triangle smaller.
164
- triangle_pts = transform_shape_pts('scale it by 0.5x', shape_pts=triangle_pts)
165
- say('Making the triangle smaller')
166
- block_names = parse_obj_name('the blocks', f'objects = {get_obj_names()}')
167
- for block_name, pt in zip(block_names, triangle_pts):
168
- put_first_on_second(block_name, pt)
169
- objects = ['brown bowl', 'red block', 'brown block', 'red bowl', 'pink bowl', 'pink block']
170
- # put the red block on the farthest bowl.
171
- farthest_bowl_name = parse_obj_name('the bowl farthest from the red block', f'objects = {get_obj_names()}')
172
- say(f'Putting the red block on the {farthest_bowl_name}')
173
- put_first_on_second('red block', farthest_bowl_name)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
prompts/transform_shape_pts.py DELETED
@@ -1,19 +0,0 @@
1
- import numpy as np
2
- from utils import get_obj_pos, get_obj_names, parse_position, parse_obj_name
3
-
4
- # make it bigger by 1.5.
5
- new_shape_pts = scale_pts_around_centroid_np(shape_pts, scale_x=1.5, scale_y=1.5)
6
- # move it to the right by 10cm.
7
- new_shape_pts = translate_pts_np(shape_pts, delta=[0.1, 0])
8
- # move it to the top by 20cm.
9
- new_shape_pts = translate_pts_np(shape_pts, delta=[0, 0.2])
10
- # rotate it clockwise by 40 degrees.
11
- new_shape_pts = rotate_pts_around_centroid_np(shape_pts, angle=-np.deg2rad(40))
12
- # rotate by 30 degrees and make it slightly smaller
13
- new_shape_pts = rotate_pts_around_centroid_np(shape_pts, angle=np.deg2rad(30))
14
- new_shape_pts = scale_pts_around_centroid_np(new_shape_pts, scale_x=0.7, scale_y=0.7)
15
- # move it toward the blue block.
16
- block_name = parse_obj_name('the blue block', f'objects = {get_obj_names()}')
17
- block_pos = get_obj_pos(block_name)
18
- mean_delta = np.mean(block_pos - shape_pts, axis=1)
19
- new_shape_pts = translate_pts_np(shape_pts, mean_delta)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
prompts/vanilla_task_generation_prompt_simple_api/cliport_prompt_api_template.txt DELETED
@@ -1,350 +0,0 @@
1
- Before writing the code for the task "TASK_NAME_TEMPLATE". Here are some APIs that are defined. Please confirm that you understand these APIs.
2
-
3
- """
4
- class Task():
5
- """Base Task class."""
6
-
7
- def __init__(self):
8
- self.ee = Suction
9
- self.mode = 'train'
10
- self.sixdof = False
11
- self.primitive = primitives.PickPlace()
12
- self.oracle_cams = cameras.Oracle.CONFIG
13
-
14
- # Evaluation epsilons (for pose evaluation metric).
15
- self.pos_eps = 0.01
16
- self.rot_eps = np.deg2rad(15)
17
-
18
- # Workspace bounds.
19
- self.pix_size = 0.003125
20
- self.bounds = np.array([[0.25, 0.75], [-0.5, 0.5], [0, 0.3]])
21
- self.zone_bounds = np.copy(self.bounds)
22
-
23
- self.goals = []
24
- self.lang_goals = []
25
- self.task_completed_desc = "task completed."
26
- self.progress = 0
27
- self._rewards = 0
28
- self.assets_root = None
29
-
30
- def reset(self, env):
31
- if not self.assets_root:
32
- raise ValueError('assets_root must be set for task, '
33
- 'call set_assets_root().')
34
- self.goals = []
35
- self.lang_goals = []
36
- self.progress = 0 # Task progression metric in range [0, 1].
37
- self._rewards = 0 # Cumulative returned rewards.
38
-
39
- # -------------------------------------------------------------------------
40
- # Oracle Agent
41
- # -------------------------------------------------------------------------
42
-
43
- def oracle(self, env):
44
- """Oracle agent."""
45
- OracleAgent = collections.namedtuple('OracleAgent', ['act'])
46
-
47
- def act(obs, info):
48
- """Calculate action."""
49
-
50
- # Oracle uses perfect RGB-D orthographic images and segmentation masks.
51
- _, hmap, obj_mask = self.get_true_image(env)
52
-
53
- # Unpack next goal step.
54
- objs, matches, targs, replace, rotations, _, _, _ = self.goals[0]
55
-
56
- # Match objects to targets without replacement.
57
- if not replace:
58
-
59
- # Modify a copy of the match matrix.
60
- matches = matches.copy()
61
-
62
- # Ignore already matched objects.
63
- for i in range(len(objs)):
64
- object_id, (symmetry, _) = objs[i]
65
- pose = p.getBasePositionAndOrientation(object_id)
66
- targets_i = np.argwhere(matches[i, :]).reshape(-1)
67
- for j in targets_i:
68
- if self.is_match(pose, targs[j], symmetry):
69
- matches[i, :] = 0
70
- matches[:, j] = 0
71
-
72
- # Get objects to be picked (prioritize farthest from nearest neighbor).
73
- nn_dists = []
74
- nn_targets = []
75
- for i in range(len(objs)):
76
- object_id, (symmetry, _) = objs[i]
77
- xyz, _ = p.getBasePositionAndOrientation(object_id)
78
- targets_i = np.argwhere(matches[i, :]).reshape(-1)
79
- if len(targets_i) > 0:
80
- targets_xyz = np.float32([targs[j][0] for j in targets_i])
81
- dists = np.linalg.norm(
82
- targets_xyz - np.float32(xyz).reshape(1, 3), axis=1)
83
- nn = np.argmin(dists)
84
- nn_dists.append(dists[nn])
85
- nn_targets.append(targets_i[nn])
86
-
87
- # Handle ignored objects.
88
- else:
89
- nn_dists.append(0)
90
- nn_targets.append(-1)
91
- order = np.argsort(nn_dists)[::-1]
92
-
93
- # Filter out matched objects.
94
- order = [i for i in order if nn_dists[i] > 0]
95
-
96
- pick_mask = None
97
- for pick_i in order:
98
- pick_mask = np.uint8(obj_mask == objs[pick_i][0])
99
-
100
- # Erode to avoid picking on edges.
101
- # pick_mask = cv2.erode(pick_mask, np.ones((3, 3), np.uint8))
102
-
103
- if np.sum(pick_mask) > 0:
104
- break
105
-
106
- # Trigger task reset if no object is visible.
107
- if pick_mask is None or np.sum(pick_mask) == 0:
108
- self.goals = []
109
- self.lang_goals = []
110
- print('Object for pick is not visible. Skipping demonstration.')
111
- return
112
-
113
- # Get picking pose.
114
- pick_prob = np.float32(pick_mask)
115
- pick_pix = utils.sample_distribution(pick_prob)
116
- # For "deterministic" demonstrations on insertion-easy, use this:
117
- # pick_pix = (160,80)
118
- pick_pos = utils.pix_to_xyz(pick_pix, hmap,
119
- self.bounds, self.pix_size)
120
- pick_pose = (np.asarray(pick_pos), np.asarray((0, 0, 0, 1)))
121
-
122
- # Get placing pose.
123
- targ_pose = targs[nn_targets[pick_i]]
124
- obj_pose = p.getBasePositionAndOrientation(objs[pick_i][0])
125
- if not self.sixdof:
126
- obj_euler = utils.quatXYZW_to_eulerXYZ(obj_pose[1])
127
- obj_quat = utils.eulerXYZ_to_quatXYZW((0, 0, obj_euler[2]))
128
- obj_pose = (obj_pose[0], obj_quat)
129
- world_to_pick = utils.invert(pick_pose)
130
- obj_to_pick = utils.multiply(world_to_pick, obj_pose)
131
- pick_to_obj = utils.invert(obj_to_pick)
132
- place_pose = utils.multiply(targ_pose, pick_to_obj)
133
-
134
- # Rotate end effector?
135
- if not rotations:
136
- place_pose = (place_pose[0], (0, 0, 0, 1))
137
-
138
- place_pose = (np.asarray(place_pose[0]), np.asarray(place_pose[1]))
139
-
140
- return {'pose0': pick_pose, 'pose1': place_pose}
141
-
142
- return OracleAgent(act)
143
-
144
- # -------------------------------------------------------------------------
145
- # Reward Function and Task Completion Metrics
146
- # -------------------------------------------------------------------------
147
-
148
- def reward(self):
149
- """Get delta rewards for current timestep.
150
-
151
- Returns:
152
- A tuple consisting of the scalar (delta) reward, plus `extras`
153
- dict which has extra task-dependent info from the process of
154
- computing rewards that gives us finer-grained details. Use
155
- `extras` for further data analysis.
156
- """
157
- reward, info = 0, {}
158
-
159
- # Unpack next goal step.
160
- objs, matches, targs, _, _, metric, params, max_reward = self.goals[0]
161
-
162
- # Evaluate by matching object poses.
163
- if metric == 'pose':
164
- step_reward = 0
165
- for i in range(len(objs)):
166
- object_id, (symmetry, _) = objs[i]
167
- pose = p.getBasePositionAndOrientation(object_id)
168
- targets_i = np.argwhere(matches[i, :]).reshape(-1)
169
- for j in targets_i:
170
- target_pose = targs[j]
171
- if self.is_match(pose, target_pose, symmetry):
172
- step_reward += max_reward / len(objs)
173
- print(f"object {i} match with target {j} rew: {step_reward}")
174
- break
175
-
176
- # Evaluate by measuring object intersection with zone.
177
- elif metric == 'zone':
178
- zone_pts, total_pts = 0, 0
179
- obj_pts, zones = params
180
- for zone_idx, (zone_pose, zone_size) in enumerate(zones):
181
-
182
- # Count valid points in zone.
183
- for obj_idx, obj_id in enumerate(obj_pts):
184
- pts = obj_pts[obj_id]
185
- obj_pose = p.getBasePositionAndOrientation(obj_id)
186
- world_to_zone = utils.invert(zone_pose)
187
- obj_to_zone = utils.multiply(world_to_zone, obj_pose)
188
- pts = np.float32(utils.apply(obj_to_zone, pts))
189
- if len(zone_size) > 1:
190
- valid_pts = np.logical_and.reduce([
191
- pts[0, :] > -zone_size[0] / 2, pts[0, :] < zone_size[0] / 2,
192
- pts[1, :] > -zone_size[1] / 2, pts[1, :] < zone_size[1] / 2,
193
- pts[2, :] < self.zone_bounds[2, 1]])
194
-
195
- # if zone_idx == matches[obj_idx].argmax():
196
- zone_pts += np.sum(np.float32(valid_pts))
197
- total_pts += pts.shape[1]
198
- step_reward = max_reward * (zone_pts / total_pts)
199
-
200
- # Get cumulative rewards and return delta.
201
- reward = self.progress + step_reward - self._rewards
202
- self._rewards = self.progress + step_reward
203
-
204
- # Move to next goal step if current goal step is complete.
205
- if np.abs(max_reward - step_reward) < 0.01:
206
- self.progress += max_reward # Update task progress.
207
- self.goals.pop(0)
208
- if len(self.lang_goals) > 0:
209
- self.lang_goals.pop(0)
210
-
211
- return reward, info
212
-
213
- def done(self):
214
- """Check if the task is done or has failed.
215
-
216
- Returns:
217
- True if the episode should be considered a success, which we
218
- use for measuring successes, which is particularly helpful for tasks
219
- where one may get successes on the very last time step, e.g., getting
220
- the cloth coverage threshold on the last alllowed action.
221
- However, for bag-items-easy and bag-items-hard (which use the
222
- 'bag-items' metric), it may be necessary to filter out demos that did
223
- not attain sufficiently high reward in external code. Currently, this
224
- is done in `main.py` and its ignore_this_demo() method.
225
- """
226
- return (len(self.goals) == 0) or (self._rewards > 0.99)
227
- # return zone_done or defs_done or goal_done
228
-
229
- # -------------------------------------------------------------------------
230
- # Environment Helper Functions
231
- # -------------------------------------------------------------------------
232
-
233
- def is_match(self, pose0, pose1, symmetry):
234
- """Check if pose0 and pose1 match within a threshold."""
235
-
236
- # Get translational error.
237
- diff_pos = np.float32(pose0[0][:2]) - np.float32(pose1[0][:2])
238
- dist_pos = np.linalg.norm(diff_pos)
239
-
240
- # Get rotational error around z-axis (account for symmetries).
241
- diff_rot = 0
242
- if symmetry > 0:
243
- rot0 = np.array(utils.quatXYZW_to_eulerXYZ(pose0[1]))[2]
244
- rot1 = np.array(utils.quatXYZW_to_eulerXYZ(pose1[1]))[2]
245
- diff_rot = np.abs(rot0 - rot1) % symmetry
246
- if diff_rot > (symmetry / 2):
247
- diff_rot = symmetry - diff_rot
248
-
249
- return (dist_pos < self.pos_eps) and (diff_rot < self.rot_eps)
250
-
251
- def get_random_pose(self, env, obj_size):
252
- """Get random collision-free object pose within workspace bounds."""
253
-
254
- # Get erosion size of object in pixels.
255
- max_size = np.sqrt(obj_size[0] ** 2 + obj_size[1] ** 2)
256
- erode_size = int(np.round(max_size / self.pix_size))
257
-
258
- _, hmap, obj_mask = self.get_true_image(env)
259
-
260
- # Randomly sample an object pose within free-space pixels.
261
- free = np.ones(obj_mask.shape, dtype=np.uint8)
262
- for obj_ids in env.obj_ids.values():
263
- for obj_id in obj_ids:
264
- free[obj_mask == obj_id] = 0
265
- free[0, :], free[:, 0], free[-1, :], free[:, -1] = 0, 0, 0, 0
266
- free = cv2.erode(free, np.ones((erode_size, erode_size), np.uint8))
267
-
268
- # if np.sum(free) == 0:
269
- # return None, None
270
-
271
- if np.sum(free) == 0:
272
- # avoid returning None, None
273
- # return None, None
274
- pix = (obj_mask.shape[0] // 2, obj_mask.shape[1] // 2)
275
- else:
276
- pix = utils.sample_distribution(np.float32(free))
277
- pos = utils.pix_to_xyz(pix, hmap, self.bounds, self.pix_size)
278
- pos = (pos[0], pos[1], obj_size[2] / 2)
279
- theta = np.random.rand() * 2 * np.pi
280
- rot = utils.eulerXYZ_to_quatXYZW((0, 0, theta))
281
- return pos, rot
282
-
283
- def get_lang_goal(self):
284
- if len(self.lang_goals) == 0:
285
- return self.task_completed_desc
286
- else:
287
- return self.lang_goals[0]
288
-
289
- def get_reward(self):
290
- return float(self._rewards)
291
-
292
- # -------------------------------------------------------------------------
293
- # Helper Functions
294
- # -------------------------------------------------------------------------
295
-
296
- def fill_template(self, template, replace):
297
- """Read a file and replace key strings."""
298
- full_template_path = os.path.join(self.assets_root, template)
299
- with open(full_template_path, 'r') as file:
300
- fdata = file.read()
301
- for field in replace:
302
- for i in range(len(replace[field])):
303
- fdata = fdata.replace(f'{field}{i}', str(replace[field][i]))
304
- alphabet = string.ascii_lowercase + string.digits
305
- rname = ''.join(random.choices(alphabet, k=16))
306
- tmpdir = tempfile.gettempdir()
307
- template_filename = os.path.split(template)[-1]
308
- fname = os.path.join(tmpdir, f'{template_filename}.{rname}')
309
- with open(fname, 'w') as file:
310
- file.write(fdata)
311
- return fname
312
-
313
- def get_random_size(self, min_x, max_x, min_y, max_y, min_z, max_z):
314
- """Get random box size."""
315
- size = np.random.rand(3)
316
- size[0] = size[0] * (max_x - min_x) + min_x
317
- size[1] = size[1] * (max_y - min_y) + min_y
318
- size[2] = size[2] * (max_z - min_z) + min_z
319
- return tuple(size)
320
-
321
- """""
322
-
323
- # Environment Class
324
- def add_object(self, urdf, pose, category='rigid'):
325
- """List of (fixed, rigid, or deformable) objects in env."""
326
- fixed_base = 1 if category == 'fixed' else 0
327
- obj_id = pybullet_utils.load_urdf(
328
- p,
329
- os.path.join(self.assets_root, urdf),
330
- pose[0],
331
- pose[1],
332
- useFixedBase=fixed_base)
333
- self.obj_ids[category].append(obj_id)
334
- return obj_id
335
- """
336
-
337
- =========
338
- Note that the objects need to obey physics and not collide with each other, and the object goal poses need to be above the table with lower bound x=0.25, y=-0.5 and upper bound x=0.75, y=0.5. When there are multiple objects for a multi-step pick-and-place task, there are often multiple subgoals. Once the task and environment are generated, an agent with a pick and place primitive will follow the defined goal to accomplish the tasks.
339
-
340
- Additionally, make sure you understand and summarize the ``self.goals`` variables, which has a list of 8-tuple with (objs, matches, targ_poses, replace, rotations, metric, params, step_max_reward, symmetries).
341
- - objs (List of obj_id): object ID.
342
- - matches (Binary Matrix): a binary matrix that denotes which object is matched with which target. This matrix has dimension len(objs) x len(targs).
343
- - targ_poses (List of Poses [(translation, rotation)] ): a list of target poses of tuple (translation, rotation). Don't pass in object IDs such as `bowls[i-1][0]` or `[stands[i][0]]`.
344
- - replace (Boolean): whether each object can match with one unique target. This is important if we have one target and multiple objects. If it's set to be false, then any object matching with the target will satisfy.
345
- - rotations (Boolean): whether the placement action has a rotation degree of freedom.
346
- - metric (`pose` or `zone`): `pose` or `zone` that the object needs to be transported to. Example: `pose`.
347
- - params (List of (zone_target, zone_size)): a list of (zone_target, zone_size) for each zone if the metric is `zone`.
348
- - step_max_reward (float): subgoal reward threshold.
349
- - symmetries: the radians that the object is symmetric around z axis.
350
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
prompts/vanilla_task_generation_prompt_simple_api/cliport_prompt_code_split_template.txt DELETED
@@ -1,252 +0,0 @@
1
- Now I will provide you some reference code and you can write the code for the task "TASK_NAME_TEMPLATE".
2
-
3
-
4
- """
5
- import os
6
-
7
- import numpy as np
8
- from cliport.tasks.task import Task
9
- from cliport.utils import utils
10
-
11
-
12
- class PackingShapes(Task):
13
- """pick up randomly sized shapes and place them tightly into a container."""
14
-
15
- def __init__(self):
16
- super().__init__()
17
- self.max_steps = 1
18
- self.homogeneous = False
19
-
20
- self.lang_template = "pack the {obj} in the brown box"
21
- self.task_completed_desc = "done packing shapes."
22
- self.additional_reset()
23
-
24
-
25
- def reset(self, env):
26
- super().reset(env)
27
-
28
- # Shape Names:
29
- shapes = utils.assembling_kit_shapes
30
-
31
- n_objects = 5
32
- if self.mode == 'train':
33
- obj_shapes = np.random.choice(self.train_set, n_objects, replace=False)
34
- else:
35
- if self.homogeneous:
36
- obj_shapes = [np.random.choice(self.test_set, replace=False)] * n_objects
37
- else:
38
- obj_shapes = np.random.choice(self.test_set, n_objects, replace=False)
39
-
40
- # Shuffle colors to avoid always picking an object of the same color
41
- colors, color_names = utils.get_colors(mode=self.mode)
42
-
43
- # Add container box.
44
- zone_size = self.get_random_size(0.1, 0.15, 0.1, 0.15, 0.05, 0.05)
45
- zone_pose = self.get_random_pose(env, zone_size)
46
- container_template = 'container/container-template.urdf'
47
- replace = {'DIM': zone_size, 'HALF': (zone_size[0] / 2, zone_size[1] / 2, zone_size[2] / 2)}
48
- # IMPORTANT: REPLACE THE TEMPLATE URDF with `fill_template`
49
- container_urdf = self.fill_template(container_template, replace)
50
- env.add_object(container_urdf, zone_pose, 'fixed')
51
-
52
- # Add objects.
53
- objects = []
54
- template = 'kitting/object-template.urdf'
55
- for i in range(n_objects):
56
- shape = obj_shapes[i]
57
-
58
- # x, y, z dimensions for the asset size
59
- size = (0.08, 0.08, 0.02)
60
- pose= self.get_random_pose(env, size)
61
- fname = f'{shape:02d}.obj'
62
- fname = os.path.join(self.assets_root, 'kitting', fname)
63
- scale = [0.003, 0.003, 0.001]
64
- replace = {'FNAME': (fname,),
65
- 'SCALE': scale,
66
- 'COLOR': colors[i]}
67
-
68
- # IMPORTANT: REPLACE THE TEMPLATE URDF
69
- urdf = self.fill_template(template, replace)
70
- block_id = env.add_object(urdf, pose)
71
- objects.append(block_id)
72
-
73
- # Pick the first shape.
74
- num_objects_to_pick = 1
75
- for i in range(num_objects_to_pick):
76
- # IMPORTANT: Specify (obj_pts, [(zone_pose, zone_size)]) for target `zone`. obj_pts is a dict
77
- self.add_goal(objs=[objects[i]], matches=np.int32([[1]]), targ_poses=[zone_pose], replace=False,
78
- rotations=True, metric='zone', params=[(zone_pose, zone_size)], step_max_reward=1 / num_objects_to_pick)
79
-
80
- self.lang_goals.append(self.lang_template.format(obj=shapes[obj_shapes[i]]))
81
- """
82
- """
83
- import numpy as np
84
- from cliport.tasks.task import Task
85
- from cliport.utils import utils
86
- import pybullet as p
87
-
88
-
89
- class PlaceRedInGreen(Task):
90
- """pick up the red blocks and place them into the green bowls amidst other objects."""
91
-
92
- def __init__(self):
93
- super().__init__()
94
- self.max_steps = 10
95
- self.lang_template = "put the red blocks in a green bowl"
96
- self.task_completed_desc = "done placing blocks in bowls."
97
- self.additional_reset()
98
-
99
- def reset(self, env):
100
- super().reset(env)
101
- n_bowls = np.random.randint(1, 4)
102
- n_blocks = np.random.randint(1, n_bowls + 1)
103
-
104
- # Add bowls.
105
- # x, y, z dimensions for the asset size
106
- bowl_size = (0.12, 0.12, 0)
107
- bowl_urdf = 'bowl/bowl.urdf'
108
- bowl_poses = []
109
- for _ in range(n_bowls):
110
- bowl_pose = self.get_random_pose(env, obj_size=bowl_size)
111
- env.add_object(urdf=bowl_urdf, pose=bowl_pose, category='fixed')
112
- bowl_poses.append(bowl_pose)
113
-
114
- # Add blocks.
115
- # x, y, z dimensions for the asset size
116
- blocks = []
117
- block_size = (0.04, 0.04, 0.04)
118
- block_urdf = 'stacking/block.urdf'
119
- for _ in range(n_blocks):
120
- block_pose = self.get_random_pose(env, obj_size=block_size)
121
- block_id = env.add_object(block_urdf, block_pose)
122
- blocks.append(block_id)
123
-
124
- # Goal: each red block is in a different green bowl.
125
- self.add_goal(objs=blocks, matches=np.ones((len(blocks), len(bowl_poses))), targ_poses=bowl_poses, replace=False,
126
- rotations=True, metric='pose', params=None, step_max_reward=1)
127
- self.lang_goals.append(self.lang_template)
128
-
129
- # Colors of distractor objects.
130
- # IMPORTANT: RETRIEVE THE ACTUAL COLOR VALUES
131
- bowl_colors = [utils.COLORS[c] for c in utils.COLORS if c != 'green']
132
- block_colors = [utils.COLORS[c] for c in utils.COLORS if c != 'red']
133
-
134
- # Add distractors.
135
- n_distractors = 0
136
- while n_distractors < 6:
137
- is_block = np.random.rand() > 0.5
138
- urdf = block_urdf if is_block else bowl_urdf
139
- size = block_size if is_block else bowl_size
140
- colors = block_colors if is_block else bowl_colors
141
- pose = self.get_random_pose(env, obj_size=size)
142
- color = colors[n_distractors % len(colors)]
143
-
144
- obj_id = env.add_object(urdf, pose, color=color)
145
- n_distractors += 1
146
- """
147
- """
148
- import numpy as np
149
- from cliport.tasks import primitives
150
- from cliport.tasks.grippers import Spatula
151
- from cliport.tasks.task import Task
152
- from cliport.utils import utils
153
-
154
-
155
- class SweepingPiles(Task):
156
- """Push piles of small objects into a target goal zone marked on the tabletop."""
157
-
158
- def __init__(self):
159
- super().__init__()
160
- self.max_steps = 20
161
- self.lang_template = "push the pile of blocks into the green square"
162
- self.task_completed_desc = "done sweeping."
163
- self.additional_reset()
164
-
165
- def reset(self, env):
166
- super().reset(env)
167
-
168
- # Add goal zone.
169
- zone_size = (0.12, 0.12, 0)
170
- zone_pose = self.get_random_pose(env, zone_size)
171
- env.add_object('zone/zone.urdf', zone_pose, 'fixed')
172
-
173
- # use `make_piles` to add pile of small blocks.
174
- obj_ids = self.make_piles(env)
175
-
176
- # Add goal
177
- self.add_goal(objs=obj_ids, matches=np.ones((50, 1)), targ_poses=[zone_pose], replace=True,
178
- rotations=False, metric='zone', params=[(zone_pose, zone_size)], step_max_reward=1)
179
- self.lang_goals.append(self.lang_template)
180
- """
181
- """
182
- import numpy as np
183
- from cliport.tasks.task import Task
184
- from cliport.utils import utils
185
- import pybullet as p
186
-
187
- class StackBlockPyramid(Task):
188
- """Build a pyramid of colored blocks in a color sequence"""
189
-
190
- def __init__(self):If you have only one goal, `step_max_reward` in `add_goal` should be 1.
191
- super().__init__()
192
- self.max_steps = 12
193
- self.lang_template = "make the {row} row with {blocks}"
194
- self.task_completed_desc = "done stacking block pyramid."
195
- self.additional_reset()
196
-
197
- def reset(self, env):
198
- super().reset(env)
199
-
200
- # Add base.
201
- base_size = (0.05, 0.15, 0.005)
202
- base_urdf = 'stacking/stand.urdf'
203
- base_pose = self.get_random_pose(env, base_size)
204
- env.add_object(base_urdf, base_pose, category='fixed')
205
-
206
- # Block colors.
207
- colors = [
208
- utils.COLORS['purple'], utils.COLORS['blue'], utils.COLORS['green'],
209
- utils.COLORS['yellow'], utils.COLORS['orange'], utils.COLORS['red']
210
- ]
211
-
212
- # Add blocks.
213
- # x, y, z dimensions for the asset size
214
- block_size = (0.04, 0.04, 0.04)
215
- block_urdf = 'stacking/block.urdf'
216
-
217
- objs = []
218
- for i in range(6):
219
- block_pose = self.get_random_pose(env, block_size)
220
- block_id = env.add_object(block_urdf, block_pose, color=colors[i])
221
- objs.append(block_id)
222
-
223
- # Associate placement locations for goals.
224
- place_pos = [(0, -0.05, 0.03), (0, 0, 0.03),
225
- (0, 0.05, 0.03), (0, -0.025, 0.08),
226
- (0, 0.025, 0.08), (0, 0, 0.13)]
227
- targs = [(utils.apply(base_pose, i), base_pose[1]) for i in place_pos]
228
-
229
- # Goal: blocks are stacked in a pyramid (bottom row: green, blue, purple).
230
- self.add_goal(objs=objs[:3], matches=np.ones((3, 3)), targ_poses=targs[:3], replace=False,
231
- rotations=True, metric='pose', params=None, step_max_reward=1 / 2, symmetries=[np.pi/2]*3)
232
- self.lang_goals.append(self.lang_template.format(blocks="the green, blue and purple blocks",
233
- row="bottom"))
234
-
235
- # Goal: blocks are stacked in a pyramid (middle row: yellow, orange).
236
- self.add_goal(objs=objs[3:5], matches=np.ones((3, 3)), targ_poses=targs[3:5], replace=False,
237
- rotations=True, metric='pose', params=None, step_max_reward=1 / 3, symmetries=[np.pi/2]*3)
238
- self.lang_goals.append(self.lang_template.format(blocks="the yellow and orange blocks",
239
- row="middle"))
240
-
241
- # Goal: blocks are stacked in a pyramid (top row: red).
242
- self.add_goal(objs=objs[5:], matches=np.ones((3, 3)), targ_poses=targs[5:], replace=False,
243
- rotations=True, metric='pose', params=None, step_max_reward=1 / 6, symmetries=[np.pi/2]*3)
244
- self.lang_goals.append(self.lang_template.format(blocks="the red block",
245
- row="top"))
246
- """
247
-
248
-
249
-
250
- Do not use libraries, functions, and assets that you don't know. For each object, try to describe its color, size, category in the task first before you write the code. You do not need extra helper functions. Comment the code liberally to explain what each piece does and why it's written that way. If you have only one goal, `step_max_reward` in `add_goal` should be 1. Use functions `make_piles` and `make_cables` for creating piles and cables. To use spatula together with the push primitives, import the libraries and then use `self.primitive = primitives.push` and `self.ee = Spatula`.
251
-
252
- Now write the code for the task "TASK_NAME_TEMPLATE" in python code block starting with ```python. Reminder: TASK_STRING_TEMPLATE
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
prompts/vanilla_task_generation_prompt_simple_api/cliport_prompt_task.txt DELETED
@@ -1,154 +0,0 @@
1
- You are an AI in robot simulation code and task design. I will provide you some example tasks, code implementation, and some guidelines for how to generate tasks and then you will help me generate a new task. My goal is to design diverse and feasible tasks for tabletop manipulation. I will first ask you to describe the task in natural languages and then will let you write the code for it.
2
-
3
- =========
4
- Here are all the assets. Use only these assets in the task and code design.
5
- """
6
- insertion/:
7
- ell.urdf fixture.urdf
8
-
9
- bowl/:
10
- bowl.urdf
11
-
12
- box/:
13
- box-template.urdf
14
-
15
- stacking/:
16
- block.urdf stand.urdf
17
-
18
- zone/:
19
- zone.obj zone.urdf
20
-
21
- pallet/:
22
- pallet.obj pallet.urdf
23
-
24
- ball/:
25
- ball-template.urdf
26
-
27
- cylinder/:
28
- cylinder-template.urdf
29
-
30
- bowl/:
31
- bowl.urdf
32
-
33
- # assets not for picking
34
- corner/:
35
- corner-template.urdf
36
-
37
- line/:
38
- single-green-line-template.urdf
39
-
40
- container/:
41
- container-template.urdf
42
- """
43
-
44
- =========
45
- Here are some examples of good tasks. Try to learn from these structures but avoid overlapping wiht them.
46
-
47
- {"assets-used": ["zone/zone.urdf", "block/small.urdf"],
48
- "task-description": "Push piles of small objects into a target goal zone marked on the tabletop.",
49
- "task-name": "sweeping-piles"}
50
-
51
- {"assets-used": ["bowl/bowl.urdf", "stacking/block.urdf"],
52
- "task-description": "Place all blocks of a specified color in a bowl of specified color.",
53
- "task-name": "put-block-in-bowl"}
54
-
55
- {"assets-used": ["insertion/ell.urdf", "insertion/fixture.urdf"],
56
- "task-description": "pick up the L-shaped red block and place it into the L-shaped fixture.",
57
- "task-name": "block-insertion"}
58
-
59
- {"assets-used": ["kitting/kit.urdf", "kitting/object-template.urdf"],
60
- "task-description": "pick up different objects and arrange them on a board marked with corresponding silhouettes.",
61
- "task-name": "assembling-kits"}
62
-
63
- {"assets-used": ["pallet/pallet.urdf", "box/box-template.urdf"],
64
- "task-description": "pick up homogeneous fixed-sized boxes and stack them in transposed layers on the pallet.",
65
- "task-name": "palletizing-boxes"}
66
-
67
- {"assets-used": ["stacking/stand.urdf", "stacking/block.urdf"],
68
- "task-description": "sequentially stack 6 blocks into a pyramid of 3-2-1 with rainbow colored ordering.",
69
- "task-name": "stack-block-pyramid"}
70
-
71
- {"assets-used": ["container/container-template.urdf", "box/box-template.urdf"],
72
- "task-description": "pick up randomly sized boxes and place them tightly into a container.",
73
- "task-name": "packing-boxes"}
74
-
75
- {"assets-used": ["bowl/bowl.urdf", "stacking/block.urdf"],
76
- "task-description": "pick up the red blocks and place them into the green bowls amidst other objects.",
77
- "task-name": "place-red-in-green"}
78
-
79
- {"assets-used": ["box/box-template.urdf", "corner/corner-template.urdf"],
80
- "task-description": "pick up the randomly sized box and align one of its corners to the L-shaped marker on the tabletop..",
81
- "task-name": "align-box-corner"}
82
-
83
- {"assets-used": ["box/box-template.urdf", "corner/corner-template.urdf"],
84
- "task-description": "pick up the randomly sized box and align one of its corners to the L-shaped marker on the tabletop..",
85
- "task-name": "align-box-corner"}
86
-
87
- =========
88
- Here are some tasks that you have come up with before. Try to learn from these structures but avoid overlapping with these tasks. For instance, `bowl_ball_placement` and `sort_balls_in_bowls` are the same task. `pile_boxes_in_corner` and `stack_blocks_into_pallet` are similar tasks, `align-cylinder-in-corner` and `align-cylinder-corner` are similar.
89
- PAST_TASKNAME_TEMPLATE
90
-
91
-
92
- =========
93
- Here are some bad example task instances with explanations.
94
- {
95
- "task_name": "sort-color-blocks",
96
- "task_descriptions": "Pick up differently colored blocks and place them into separate bowls of matching color."
97
- "assets-used": ["bowl.urdf", "box/box-template.urdf],
98
- }
99
- reasons: not interesting because it overlaps with the current task `put-block-in-bowl`.
100
-
101
- {
102
- "task-name": "guided-ball-maze",
103
- "task-description": "Navigate a small ball through a maze by tilting the maze board to reach the target zone.",
104
- "assets-used": ["zone-template.urdf", "square-template.urdf", "ball.urdf", "maze.urdf"],
105
- }
106
- reasons: the language descriptions are too ambiguous. Navigation is also hard to complete. Also maze.urf does not exist.
107
-
108
- {
109
- "task-name": "insert_cylinder_in_sphere",
110
- "task-description": "Pick up the cylinder and insert it into the sphere with an opening on top.",
111
- "assets-used": ["cylinder/cylinder-template.urdf", "sphere/sphere-template.urdf"],
112
- }
113
- reasons: this task does not make sense. The sphere does not have an opening on top, and you cannot insert a cylinder into a sphere. Similarly tasks like `insert-ball-into-cylinder` and `cylinder-box-insertion` are invalid.
114
-
115
- {
116
- "task-name": "ball-box-obstacle-course",
117
- "task-description": "Navigate a ball through an obstacle course created by randomly placed boxes and finally place it inside a container.",
118
- "assets-used": ["ball/ball-template.urdf", "box/box-template.urdf", "container/container-template.urdf"]
119
- }
120
- reasons: Navigate the ball is not related to tabletop manipulation tasks.
121
-
122
- {
123
- "task-name": "ball-in-box",
124
- "task-description": "Use a cable to guide a ball into an open box.",
125
- "assets-used": ["cable/cable.urdf", "ball/ball-template.urdf", "box/box-template.urdf"]
126
- }
127
- reasons: This task is too hard since it involves interaction of the cable and the ball and cannot be easily completed.
128
-
129
- {
130
- "task-name": "ball-in-container",
131
- "task-description": "Use the spatula to lift a ball over a wall of boxes and drop it into a container.",
132
- "assets-used": ["ball/ball-template.urdf", "box/box-template.urdf", "container/container-template.urdf"]
133
- }
134
- reasons: The only action primitives as pick and place. One cannot use a spatula to lift an object.
135
-
136
- {
137
- "task-name": "line-ball-sorting",
138
- "task-description": "Move balls of different colors along a single green line, placing each ball in a designated colored box at the end of the line. The challenge includes precision in maintaining the ball on the line and the correct identification of the box color corresponding to each ball.",
139
- "assets-used": ["ball/ball-template.urdf", "box/box-template.urdf", "line/single-green-line-template.urdf"]
140
- }
141
- reasons: Piling or stacking balls are physically infeasible in the simulation.
142
-
143
-
144
-
145
- =========
146
- Now please describe the new task in natural languages and explain its novelty and challenges. Format the answer in a python dictionary with keys "task-name" and value type string, "task-description" (one specific sentence) and value type string, and "assets-used" and value type list of strings. Note that
147
-
148
- - Do not use assets that are not in the list above.
149
- - Tasks that have more colors and shapes are interesting.
150
- - Be as specific as possible about the number, shape, and color of each asset in the task descriptions.
151
- - The task need to obey physics and remain feasible.
152
-
153
-
154
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
prompts/vanilla_task_generation_prompt_simple_codeonly/cliport_prompt_code_split_template.txt DELETED
@@ -1 +0,0 @@
1
- Repeat the answer python code that you give in the previous chats.
 
 
prompts/vanilla_task_generation_prompt_simple_codeonly/cliport_prompt_task.txt DELETED
@@ -1,195 +0,0 @@
1
- You are an AI in robot simulation code and task design. I will provide you some example tasks, code implementation, and some guidelines for how to generate tasks and then you will help me generate a new task. My goal is to design diverse and feasible tasks for tabletop manipulation. I will first ask you to describe the task in natural languages and then will let you write the code for it.
2
-
3
- =========
4
- Here are all the assets. Use only these assets in the task and code design.
5
- """
6
- insertion/:
7
- ell.urdf fixture.urdf
8
-
9
- bowl/:
10
- bowl.urdf
11
-
12
- box/:
13
- box-template.urdf
14
-
15
- stacking/:
16
- block.urdf stand.urdf
17
-
18
- zone/:
19
- zone.obj zone.urdf
20
-
21
- pallet/:
22
- pallet.obj pallet.urdf
23
-
24
- ball/:
25
- ball-template.urdf
26
-
27
- cylinder/:
28
- cylinder-template.urdf
29
-
30
- bowl/:
31
- bowl.urdf
32
-
33
- # assets not for picking
34
- corner/:
35
- corner-template.urdf
36
-
37
- line/:
38
- single-green-line-template.urdf
39
-
40
- container/:
41
- container-template.urdf
42
- """
43
-
44
-
45
- =========
46
- Now I will provide you some reference code and you can write the code for the task.
47
-
48
-
49
- """
50
- import os
51
-
52
- import numpy as np
53
- from cliport.tasks.task import Task
54
- from cliport.utils import utils
55
-
56
-
57
- class PackingShapes(Task):
58
- """pick up randomly sized shapes and place them tightly into a container."""
59
-
60
- def __init__(self):
61
- super().__init__()
62
- self.max_steps = 1
63
- self.homogeneous = False
64
-
65
- self.lang_template = "pack the {obj} in the brown box"
66
- self.task_completed_desc = "done packing shapes."
67
- self.additional_reset()
68
-
69
-
70
- def reset(self, env):
71
- super().reset(env)
72
-
73
- # Shape Names:
74
- shapes = utils.assembling_kit_shapes
75
-
76
- n_objects = 5
77
- if self.mode == 'train':
78
- obj_shapes = np.random.choice(self.train_set, n_objects, replace=False)
79
- else:
80
- if self.homogeneous:
81
- obj_shapes = [np.random.choice(self.test_set, replace=False)] * n_objects
82
- else:
83
- obj_shapes = np.random.choice(self.test_set, n_objects, replace=False)
84
-
85
- # Shuffle colors to avoid always picking an object of the same color
86
- colors, color_names = utils.get_colors(mode=self.mode)
87
-
88
- # Add container box.
89
- zone_size = self.get_random_size(0.1, 0.15, 0.1, 0.15, 0.05, 0.05)
90
- zone_pose = self.get_random_pose(env, zone_size)
91
- container_template = 'container/container-template.urdf'
92
- replace = {'DIM': zone_size, 'HALF': (zone_size[0] / 2, zone_size[1] / 2, zone_size[2] / 2)}
93
- # IMPORTANT: REPLACE THE TEMPLATE URDF with `fill_template`
94
- container_urdf = self.fill_template(container_template, replace)
95
- env.add_object(container_urdf, zone_pose, 'fixed')
96
-
97
- # Add objects.
98
- objects = []
99
- template = 'kitting/object-template.urdf'
100
- for i in range(n_objects):
101
- shape = obj_shapes[i]
102
-
103
- # x, y, z dimensions for the asset size
104
- size = (0.08, 0.08, 0.02)
105
- pose= self.get_random_pose(env, size)
106
- fname = f'{shape:02d}.obj'
107
- fname = os.path.join(self.assets_root, 'kitting', fname)
108
- scale = [0.003, 0.003, 0.001]
109
- replace = {'FNAME': (fname,),
110
- 'SCALE': scale,
111
- 'COLOR': colors[i]}
112
-
113
- # IMPORTANT: REPLACE THE TEMPLATE URDF
114
- urdf = self.fill_template(template, replace)
115
- block_id = env.add_object(urdf, pose)
116
- objects.append(block_id)
117
-
118
- # Pick the first shape.
119
- num_objects_to_pick = 1
120
- for i in range(num_objects_to_pick):
121
- # IMPORTANT: Specify (obj_pts, [(zone_pose, zone_size)]) for target `zone`. obj_pts is a dict
122
- self.add_goal(objs=[objects[i]], matches=np.int32([[1]]), targ_poses=[zone_pose], replace=False,
123
- rotations=True, metric='zone', params=[(zone_pose, zone_size)], step_max_reward=1 / num_objects_to_pick)
124
-
125
- self.lang_goals.append(self.lang_template.format(obj=shapes[obj_shapes[i]]))
126
- """
127
- """
128
- import numpy as np
129
- from cliport.tasks.task import Task
130
- from cliport.utils import utils
131
- import pybullet as p
132
-
133
-
134
- class PlaceRedInGreen(Task):
135
- """pick up the red blocks and place them into the green bowls amidst other objects."""
136
-
137
- def __init__(self):
138
- super().__init__()
139
- self.max_steps = 10
140
- self.lang_template = "put the red blocks in a green bowl"
141
- self.task_completed_desc = "done placing blocks in bowls."
142
- self.additional_reset()
143
-
144
- def reset(self, env):
145
- super().reset(env)
146
- n_bowls = np.random.randint(1, 4)
147
- n_blocks = np.random.randint(1, n_bowls + 1)
148
-
149
- # Add bowls.
150
- # x, y, z dimensions for the asset size
151
- bowl_size = (0.12, 0.12, 0)
152
- bowl_urdf = 'bowl/bowl.urdf'
153
- bowl_poses = []
154
- for _ in range(n_bowls):
155
- bowl_pose = self.get_random_pose(env, obj_size=bowl_size)
156
- env.add_object(urdf=bowl_urdf, pose=bowl_pose, category='fixed')
157
- bowl_poses.append(bowl_pose)
158
-
159
- # Add blocks.
160
- # x, y, z dimensions for the asset size
161
- blocks = []
162
- block_size = (0.04, 0.04, 0.04)
163
- block_urdf = 'stacking/block.urdf'
164
- for _ in range(n_blocks):
165
- block_pose = self.get_random_pose(env, obj_size=block_size)
166
- block_id = env.add_object(block_urdf, block_pose)
167
- blocks.append(block_id)
168
-
169
- # Goal: each red block is in a different green bowl.
170
- self.add_goal(objs=blocks, matches=np.ones((len(blocks), len(bowl_poses))), targ_poses=bowl_poses, replace=False,
171
- rotations=True, metric='pose', params=None, step_max_reward=1)
172
- self.lang_goals.append(self.lang_template)
173
-
174
- # Colors of distractor objects.
175
- # IMPORTANT: RETRIEVE THE ACTUAL COLOR VALUES
176
- bowl_colors = [utils.COLORS[c] for c in utils.COLORS if c != 'green']
177
- block_colors = [utils.COLORS[c] for c in utils.COLORS if c != 'red']
178
-
179
- # Add distractors.
180
- n_distractors = 0
181
- while n_distractors < 6:
182
- is_block = np.random.rand() > 0.5
183
- urdf = block_urdf if is_block else bowl_urdf
184
- size = block_size if is_block else bowl_size
185
- colors = block_colors if is_block else bowl_colors
186
- pose = self.get_random_pose(env, obj_size=size)
187
- color = colors[n_distractors % len(colors)]
188
-
189
- obj_id = env.add_object(urdf, pose, color=color)
190
- n_distractors += 1
191
- """
192
-
193
- =========
194
- Now write the code for the task "TASK_NAME_TEMPLATE" in python code block starting with ```python.
195
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
prompts/vanilla_task_generation_prompt_simple_singleprompt/cliport_prompt_code_split_template.txt DELETED
@@ -1 +0,0 @@
1
- Repeat the answer python code that you give in the previous chats.
 
 
prompts/vanilla_task_generation_prompt_simple_singleprompt/cliport_prompt_task.txt DELETED
@@ -1,202 +0,0 @@
1
- You are an AI in robot simulation code and task design. I will provide you some example tasks, code implementation, and some guidelines for how to generate tasks and then you will help me generate a new task. My goal is to design diverse and feasible tasks for tabletop manipulation. I will first ask you to describe the task in natural languages and then will let you write the code for it.
2
-
3
- =========
4
- Here are all the assets. Use only these assets in the task and code design.
5
- """
6
- insertion/:
7
- ell.urdf fixture.urdf
8
-
9
- bowl/:
10
- bowl.urdf
11
-
12
- box/:
13
- box-template.urdf
14
-
15
- stacking/:
16
- block.urdf stand.urdf
17
-
18
- zone/:
19
- zone.obj zone.urdf
20
-
21
- pallet/:
22
- pallet.obj pallet.urdf
23
-
24
- ball/:
25
- ball-template.urdf
26
-
27
- cylinder/:
28
- cylinder-template.urdf
29
-
30
- bowl/:
31
- bowl.urdf
32
-
33
- # assets not for picking
34
- corner/:
35
- corner-template.urdf
36
-
37
- line/:
38
- single-green-line-template.urdf
39
-
40
- container/:
41
- container-template.urdf
42
- """
43
-
44
-
45
- =========
46
- Now I will provide you some reference code and you can write the code for the task.
47
-
48
-
49
- """
50
- import os
51
-
52
- import numpy as np
53
- from cliport.tasks.task import Task
54
- from cliport.utils import utils
55
-
56
-
57
- class PackingShapes(Task):
58
- """pick up randomly sized shapes and place them tightly into a container."""
59
-
60
- def __init__(self):
61
- super().__init__()
62
- self.max_steps = 1
63
- self.homogeneous = False
64
-
65
- self.lang_template = "pack the {obj} in the brown box"
66
- self.task_completed_desc = "done packing shapes."
67
- self.additional_reset()
68
-
69
-
70
- def reset(self, env):
71
- super().reset(env)
72
-
73
- # Shape Names:
74
- shapes = utils.assembling_kit_shapes
75
-
76
- n_objects = 5
77
- if self.mode == 'train':
78
- obj_shapes = np.random.choice(self.train_set, n_objects, replace=False)
79
- else:
80
- if self.homogeneous:
81
- obj_shapes = [np.random.choice(self.test_set, replace=False)] * n_objects
82
- else:
83
- obj_shapes = np.random.choice(self.test_set, n_objects, replace=False)
84
-
85
- # Shuffle colors to avoid always picking an object of the same color
86
- colors, color_names = utils.get_colors(mode=self.mode)
87
-
88
- # Add container box.
89
- zone_size = self.get_random_size(0.1, 0.15, 0.1, 0.15, 0.05, 0.05)
90
- zone_pose = self.get_random_pose(env, zone_size)
91
- container_template = 'container/container-template.urdf'
92
- replace = {'DIM': zone_size, 'HALF': (zone_size[0] / 2, zone_size[1] / 2, zone_size[2] / 2)}
93
- # IMPORTANT: REPLACE THE TEMPLATE URDF with `fill_template`
94
- container_urdf = self.fill_template(container_template, replace)
95
- env.add_object(container_urdf, zone_pose, 'fixed')
96
-
97
- # Add objects.
98
- objects = []
99
- template = 'kitting/object-template.urdf'
100
- for i in range(n_objects):
101
- shape = obj_shapes[i]
102
-
103
- # x, y, z dimensions for the asset size
104
- size = (0.08, 0.08, 0.02)
105
- pose= self.get_random_pose(env, size)
106
- fname = f'{shape:02d}.obj'
107
- fname = os.path.join(self.assets_root, 'kitting', fname)
108
- scale = [0.003, 0.003, 0.001]
109
- replace = {'FNAME': (fname,),
110
- 'SCALE': scale,
111
- 'COLOR': colors[i]}
112
-
113
- # IMPORTANT: REPLACE THE TEMPLATE URDF
114
- urdf = self.fill_template(template, replace)
115
- block_id = env.add_object(urdf, pose)
116
- objects.append(block_id)
117
-
118
- # Pick the first shape.
119
- num_objects_to_pick = 1
120
- for i in range(num_objects_to_pick):
121
- # IMPORTANT: Specify (obj_pts, [(zone_pose, zone_size)]) for target `zone`. obj_pts is a dict
122
- self.add_goal(objs=[objects[i]], matches=np.int32([[1]]), targ_poses=[zone_pose], replace=False,
123
- rotations=True, metric='zone', params=[(zone_pose, zone_size)], step_max_reward=1 / num_objects_to_pick)
124
-
125
- self.lang_goals.append(self.lang_template.format(obj=shapes[obj_shapes[i]]))
126
- """
127
- """
128
- import numpy as np
129
- from cliport.tasks.task import Task
130
- from cliport.utils import utils
131
- import pybullet as p
132
-
133
-
134
- class PlaceRedInGreen(Task):
135
- """pick up the red blocks and place them into the green bowls amidst other objects."""
136
-
137
- def __init__(self):
138
- super().__init__()
139
- self.max_steps = 10
140
- self.lang_template = "put the red blocks in a green bowl"
141
- self.task_completed_desc = "done placing blocks in bowls."
142
- self.additional_reset()
143
-
144
- def reset(self, env):
145
- super().reset(env)
146
- n_bowls = np.random.randint(1, 4)
147
- n_blocks = np.random.randint(1, n_bowls + 1)
148
-
149
- # Add bowls.
150
- # x, y, z dimensions for the asset size
151
- bowl_size = (0.12, 0.12, 0)
152
- bowl_urdf = 'bowl/bowl.urdf'
153
- bowl_poses = []
154
- for _ in range(n_bowls):
155
- bowl_pose = self.get_random_pose(env, obj_size=bowl_size)
156
- env.add_object(urdf=bowl_urdf, pose=bowl_pose, category='fixed')
157
- bowl_poses.append(bowl_pose)
158
-
159
- # Add blocks.
160
- # x, y, z dimensions for the asset size
161
- blocks = []
162
- block_size = (0.04, 0.04, 0.04)
163
- block_urdf = 'stacking/block.urdf'
164
- for _ in range(n_blocks):
165
- block_pose = self.get_random_pose(env, obj_size=block_size)
166
- block_id = env.add_object(block_urdf, block_pose)
167
- blocks.append(block_id)
168
-
169
- # Goal: each red block is in a different green bowl.
170
- self.add_goal(objs=blocks, matches=np.ones((len(blocks), len(bowl_poses))), targ_poses=bowl_poses, replace=False,
171
- rotations=True, metric='pose', params=None, step_max_reward=1)
172
- self.lang_goals.append(self.lang_template)
173
-
174
- # Colors of distractor objects.
175
- # IMPORTANT: RETRIEVE THE ACTUAL COLOR VALUES
176
- bowl_colors = [utils.COLORS[c] for c in utils.COLORS if c != 'green']
177
- block_colors = [utils.COLORS[c] for c in utils.COLORS if c != 'red']
178
-
179
- # Add distractors.
180
- n_distractors = 0
181
- while n_distractors < 6:
182
- is_block = np.random.rand() > 0.5
183
- urdf = block_urdf if is_block else bowl_urdf
184
- size = block_size if is_block else bowl_size
185
- colors = block_colors if is_block else bowl_colors
186
- pose = self.get_random_pose(env, obj_size=size)
187
- color = colors[n_distractors % len(colors)]
188
-
189
- obj_id = env.add_object(urdf, pose, color=color)
190
- n_distractors += 1
191
- """
192
- =========
193
- Now please describe the new task in natural languages and explain its novelty and challenges. Format the answer in a python dictionary with keys "task-name" and value type string, "task-description" (one specific sentence) and value type string, and "assets-used" and value type list of strings. Note that
194
-
195
- - Do not use assets that are not in the list above.
196
- - Tasks that have more colors and shapes are interesting.
197
- - Be as specific as possible about the number, shape, and color of each asset in the task descriptions.
198
- - The task need to obey physics and remain feasible.
199
-
200
- =========
201
- Now write the code for the task "TASK_NAME_TEMPLATE" in python code block starting with ```python.
202
-