Add SimReady search to agentic environment generation. - #964
Closed
qianl-nv wants to merge 5 commits into
Closed
Conversation
Normalize prompts before spec inference, optionally query Isaac Sim GA SimReady props, and emit simready_usd_object candidates so generated YAML carries concrete USD paths without per-asset registry classes. Signed-off-by: Qian Lin <qianl@nvidia.com>
Keep prompts like "maple table" as background-only so the resting surface is the background asset itself rather than inventing an in-scene object_reference. Signed-off-by: Qian Lin <qianl@nvidia.com>
Select the authored Physics variant when spawning SimReady USD objects and when locating rigid bodies for contact sensors, preferring body prims when multiple rigid bodies share a depth. Signed-off-by: Qian Lin <qianl@nvidia.com>
OR path-token filters so phrases like "disinfectant bottle" still match assets whose USD paths contain only one of the words. Signed-off-by: Qian Lin <qianl@nvidia.com>
Collaborator
Author
|
Work continued on #982 |
xyao-nv
added a commit
that referenced
this pull request
Aug 3, 2026
## Summary Enable SimReady search API in agentic env gen ## Detailed description - Remove NormalizeSpec from #964. Instead it sticks to SpecInference. And objects the catalog cannot cover now carry thesimready_usd_object` registry name and are searched in the SimReady library after spec inference - Matching is on whole words, and the phrase's last word — the object itself — must appear in the asset path. To avoid substring matching, e.g. "bin" turns into cabinet USD. - Each candidate is read before it is accepted, and only assets with exactly one rigid body are kept; multi-part props are turned down with the reason recorded in the traces. - When nothing usable is found, the object ids are named back to the model for one further inference pass; an id already searched for is not searched again. If the replacement still cannot be spawned, the runner names the unavailable objects and shows the traces to users. - Opt-in, off by default: `--enable_simready_search` on the environment generation runner, or the "SimReady search" expander in the review GUI. simready_droid_pick_place_cans_hammer_maple_table.yaml <img width="1280" height="720" alt="image" src="https://github.com/user-attachments/assets/e296cac2-720a-4e40-bfc6-4c439b73e9a1" /> <img width="3019" height="1140" alt="Screenshot from 2026-07-30 22-36-30" src="https://github.com/user-attachments/assets/fea47cd6-8bff-468b-86cc-112d18f4d521" /> <img width="3019" height="1140" alt="Screenshot from 2026-07-30 22-34-57" src="https://github.com/user-attachments/assets/cbcc2217-1bd2-434b-a773-9e5823c90421" /> Other examples <img width="1280" height="720" alt="image" src="https://github.com/user-attachments/assets/96c26dae-5e62-4c5d-8cca-8ebc98dfdec3" /> <img width="2977" height="1284" alt="image" src="https://github.com/user-attachments/assets/df5a64de-31f7-4ea2-863f-ecb492b96e01" /> When Simready ones are not valid, fall back to the closest from Simready / Arena registry. ``` [runner] generation traces: simready search found no usable asset for 'pancake' no SimReady asset for object 'pancake'; it cannot be spawned asking for a replacement of: pancake === ArenaEnvGraphSpec (env_name='droid_pick_bagel_into_grey_bin') === assets: droid role=embodiment registry_name=droid_abs_joint_pos maple_table role=background registry_name=maple_table_robolab bagel role=object registry_name=bagel_00_objaverse_robolab grey_bin role=object registry_name=grey_bin_robolab ``` ``` [runner] generation traces: simready search found no usable asset for 'disinfectant spray' no SimReady asset for object 'disinfectant_spray'; it cannot be spawned asking for a replacement of: disinfectant_spray === ArenaEnvGraphSpec (env_name='droid_pick_soft_scrub_into_grey_bin') === assets: droid role=embodiment registry_name=droid_abs_joint_pos maple_table role=background registry_name=maple_table_robolab soft_scrub role=object registry_name=soft_scrub_ycb_robolab grey_bin role=object registry_name=grey_bin_robolab relations: is_anchor subject=maple_table on subject=soft_scrub reference=maple_table on subject=grey_bin reference=maple_table task: composition=TaskCompositionType.ATOMIC description: Pick up a soft scrub cleaner from the maple table and place it into a grey bin on the table. [0] kind=PickAndPlaceTask ``` --------- Signed-off-by: Xinjie Yao <xyao@nvidia.com> Signed-off-by: Qian Lin <qianl@nvidia.com> Co-authored-by: Qian Lin <qianl@nvidia.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Add SimReady search to agentic env generation
Detailed description
simready_usd_objectwhen Arena registry assets are missingPhysics=physicson spawn/contact so rigid bodies resolve for PickAndPlace sensors/isaac-sim/python.sh isaaclab_arena_examples/agentic_environment_generation/environment_generation_runner.py --mode resolve --enable_simready_search --prompt "Droid picks up a disinfectant from the maple table and places it into a grey bin on the table."
Previous generated yaml: isaaclab_arena_environments/droid_disinfectant_into_grey_bin.yaml