Add 11 RoboLab task specs reusing existing scenes#890
Conversation
- Add recursive `yaml:` include merging to env-graph spec loading so a task spec can pull in a shared scene spec (deep dict merge, cycle detection) - Split each robolab/*_linked.yaml into robolab/scenes/<scene>.yaml (scene only) and robolab/tasks/<task>.yaml (task overlay including its scene) - Drop the `_linked` suffix and use RoboLab task snake_case names for tasks - Update task_catalog.md, agentic env-gen docs, and the OSMO submit script to the new tasks/ layout; add yaml-include loader tests Signed-off-by: Qian Lin <qianl@nvidia.com>
- Add 8 task YAMLs reusing existing robolab/scenes/ specs via `yaml:` include (butter, mustard, tomato can, canned tuna, smartphone, marker, small pumpkin, rubiks cube), covering RoboLab tasks that had a matching scene but no spec - List each new task in task_catalog.md with its task and scene YAML links Signed-off-by: Qian Lin <qianl@nvidia.com>
- Add rubiks_cube_and_banana and rubiks_cube_then_banana on the rubiks_cube_banana_bowl scene. - Add hammers_in_left_bin on the tools_container scene and food_packing_boxes_then_cans on the foodpacking_1bin_1box_1can scene. - Fill in the Arena task-spec column for these tasks in task_catalog.md. Signed-off-by: Qian Lin <qianl@nvidia.com>
Remove the max_separation override from marker_in_mug, rubiks_cube_and_banana, and rubiks_cube_then_banana so each new task matches the existing task sharing its scene (mouse_on_keyboard and banana_then_rubiks_cube), which rely on the PickAndPlaceTask default. Signed-off-by: Qian Lin <qianl@nvidia.com>
| pick_up_object: marker | ||
| destination_location: ceramic_mug | ||
| background_scene: maple_table_robolab | ||
| episode_length_s: 20.0 |
There was a problem hiding this comment.
🟡 marker_in_mug places the marker in the ceramic_mug (a container), yet it's the only in-container task in this batch that omits max_separation. Without it, success collapses to the object_on_destination contact check, which fires on any low-velocity contact with the mug — including the marker merely resting against the outside — so success can be over-counted (this is exactly the tighter-container-placement gap the objects_in_proximity TODO in pick_and_place_task.py calls out). The commit matched this to mouse_on_keyboard, but that peer is a surface placement (mouse on keyboard), not a container one; every other in-bin/in-container task in this PR sets [0.1, 0.1, 0.1]. Intended, or should this match the bin tasks?
| episode_length_s: 20.0 | |
| episode_length_s: 20.0 | |
| max_separation: [0.1, 0.1, 0.1] |
🤖 Isaac Lab-Arena Review BotSummaryPurely additive, data-only PR adding 11 declarative RoboLab task specs (7 atomic pick-and-place, 2 parallel, 2 sequential) that reuse already-split scene YAMLs via Findings🟡 Warning: tasks/marker_in_mug.yaml:18 — Only in-container task in the batch that omits Test CoverageNo per-task test is expected — the repo validates task-YAML loading with a single representative case ( VerdictMinor fixes needed — resolve the |
Greptile SummaryThis PR adds 11 new RoboLab task spec YAML files covering 7 atomic pick-and-place tasks and 4 multi-subtask tasks (2 parallel, 2 sequential), and updates
Confidence Score: 5/5Safe to merge — all object and destination IDs were cross-checked against their scene YAMLs and every reference resolves correctly. All 11 new task specs reuse well-established scene definitions without modifying them, and every pick_up_object / destination_location pair was verified to exist in the referenced scene YAML. The max_separation convention is applied correctly across all new files, and the two new parallel-composition tasks follow the same structure as existing sequential ones. The only note is a minor phrasing inconsistency in smaller_object_butter_in_bin.yaml with no functional impact. smaller_object_butter_in_bin.yaml has a minor description phrasing inconsistency (trailing period, "butter box" vs object id Important Files Changed
Flowchart%%{init: {'theme': 'neutral'}}%%
flowchart TD
A[Scene YAML<br/>external_yamls] --> B{composition}
B -->|atomic| C[Single PickAndPlaceTask]
B -->|sequential| D[Ordered PickAndPlaceTask list<br/>task 1 → task 2]
B -->|parallel| E[Unordered PickAndPlaceTask list<br/>task 1 ∥ task 2]
C --> F[pick_up_object<br/>destination_location<br/>background_scene<br/>episode_length_s<br/>max_separation?]
D --> F
E --> F
subgraph New atomic tasks
G[canned_food_in_bin<br/>marker_in_mug<br/>mustard_in_right_bin<br/>food_packing_1_cans<br/>small_pumpkin_in_bin<br/>smaller_object_butter_in_bin<br/>smartphone_in_bin]
end
subgraph New parallel tasks
H[rubiks_cube_and_banana<br/>hammers_in_left_bin]
end
subgraph New sequential tasks
I[rubiks_cube_then_banana<br/>food_packing_boxes_then_cans]
end
B -->|atomic| G
B -->|parallel| H
B -->|sequential| I
%%{init: {'theme': 'base', 'themeVariables': {"darkMode": true, "background": "#0d1117", "primaryColor": "#21262d", "primaryTextColor": "#e6edf3", "primaryBorderColor": "#8b949e", "lineColor": "#8b949e", "textColor": "#e6edf3", "edgeLabelBackground": "#161b22", "actorBkg": "#21262d", "actorBorder": "#8b949e", "actorTextColor": "#e6edf3", "actorLineColor": "#8b949e", "signalColor": "#8b949e", "signalTextColor": "#e6edf3", "noteBkgColor": "#373320", "noteBorderColor": "#d4a72c", "noteTextColor": "#f0e6c0", "labelBoxBkgColor": "#21262d", "labelBoxBorderColor": "#8b949e", "labelTextColor": "#e6edf3", "loopTextColor": "#e6edf3", "activationBkgColor": "#30363d", "activationBorderColor": "#8b949e"}}}%%
flowchart TD
A[Scene YAML<br/>external_yamls] --> B{composition}
B -->|atomic| C[Single PickAndPlaceTask]
B -->|sequential| D[Ordered PickAndPlaceTask list<br/>task 1 → task 2]
B -->|parallel| E[Unordered PickAndPlaceTask list<br/>task 1 ∥ task 2]
C --> F[pick_up_object<br/>destination_location<br/>background_scene<br/>episode_length_s<br/>max_separation?]
D --> F
E --> F
subgraph New atomic tasks
G[canned_food_in_bin<br/>marker_in_mug<br/>mustard_in_right_bin<br/>food_packing_1_cans<br/>small_pumpkin_in_bin<br/>smaller_object_butter_in_bin<br/>smartphone_in_bin]
end
subgraph New parallel tasks
H[rubiks_cube_and_banana<br/>hammers_in_left_bin]
end
subgraph New sequential tasks
I[rubiks_cube_then_banana<br/>food_packing_boxes_then_cans]
end
B -->|atomic| G
B -->|parallel| H
B -->|sequential| I
Reviews (1): Last reviewed commit: "Drop max_separation where scene peers om..." | Re-trigger Greptile |
| - ../scenes/butter_raisin_box_grey_bin.yaml | ||
| task: | ||
| composition: atomic | ||
| description: Pick up the butter box and place it into the grey bin on the maple table. |
There was a problem hiding this comment.
The description ends with a trailing period (unlike every other task YAML in this PR and the existing ones) and refers to the object as "butter box" while the
pick_up_object id is butter. Keeping both consistent with the codebase phrasing avoids confusion.
| description: Pick up the butter box and place it into the grey bin on the maple table. | |
| description: pick up the butter and place it into the grey bin |
Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!
69978e0 to
2da34c6
Compare
Summary
Add 11 RoboLab task specs reusing existing scenes
Detailed description
List of new scenes: