Skip to content

Add Lightwheel kitchen graph spec with mesh placement - #962

Merged
qianl-nv merged 2 commits into
mainfrom
qianl/feature/lw-kitchen-yaml
Jul 29, 2026
Merged

Add Lightwheel kitchen graph spec with mesh placement#962
qianl-nv merged 2 commits into
mainfrom
qianl/feature/lw-kitchen-yaml

Conversation

@qianl-nv

@qianl-nv qianl-nv commented Jul 28, 2026

Copy link
Copy Markdown
Collaborator

Summary

Lightwheel kitchen pick and place YAML

Detailed description

  • Add droid_pick_and_place_lightwheel_kitchen.yaml with relation-placed Droid, mustard, and bowl on the Lightwheel Robocasa kitchen
  • Use stand-only placement bbox for Droid until full robot+stand mesh extraction is supported

Baseline:
image

Droid bbox for stand only:
image

@qianl-nv qianl-nv left a comment

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

self review 1

Comment thread isaaclab_arena/assets/background_library.py Outdated
Comment thread isaaclab_arena/relations/placement_events.py Outdated
Comment thread isaaclab_arena/relations/placement_events.py Outdated
Comment thread isaaclab_arena/relations/pooled_object_placer.py Outdated
@qianl-nv
qianl-nv force-pushed the qianl/feature/lw-kitchen-yaml branch 3 times, most recently from 33ba110 to 39f2419 Compare July 28, 2026 13:49
@qianl-nv
qianl-nv marked this pull request as ready for review July 28, 2026 13:50
@greptile-apps

greptile-apps Bot commented Jul 28, 2026

Copy link
Copy Markdown
Contributor

Greptile Summary

Adds a Lightwheel kitchen pick-and-place environment and enables mesh-aware relational placement.

  • Adds a DROID, mustard bottle, bowl, kitchen-counter, and floor graph specification.
  • Uses stand-only DROID bounds for floor and counter-relative placement.
  • Enables mesh collision geometry for the Lightwheel kitchen background.
  • Releases Warp mesh caches before placement pools enter deep-copied reset-event configuration.
  • Keeps placement assets accessible through the pool and adds regression coverage for event-config copying.

Confidence Score: 5/5

The PR appears safe to merge, with no concrete changed-code defect established.

The mesh resources removed before event configuration copying are lazily recreated on later pool refills, and the retained placement pool continues to provide the assets and per-environment layouts required by reset events.

Important Files Changed

Filename Overview
isaaclab_arena/environments/relation_solver_interface.py Releases non-copyable mesh resources before storing the placement pool in the dynamic reset event.
isaaclab_arena/relations/pooled_object_placer.py Makes placement pools config-validation-safe and exposes mesh-resource release through the underlying placer.
isaaclab_arena/relations/relation_solver.py Adds explicit cleanup for Warp mesh managers, pair caches, and associated solver state.
isaaclab_arena/relations/placement_validators.py Adds cleanup for the lazily recreated CPU mesh cache used by overlap validation.
isaaclab_arena/embodiments/droid/droid.py Supplies stand-only, root-relative placement bounds for the composed DROID asset.
isaaclab_arena/assets/background_library.py Configures the Lightwheel kitchen as aggregate mesh collision geometry without watertight repair.
isaaclab_arena_environments/droid_pick_and_place_lightwheel_kitchen.yaml Defines the Lightwheel kitchen graph, relational placements, and mustard-to-bowl task.
isaaclab_arena/tests/test_relation_solver_interface.py Covers mesh-backed placement-event deep copying and runtime asset retention through the pool.
isaaclab_arena/tests/test_placement_events.py Updates reset-placement test doubles for explicit mesh-resource release.

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart TD
  YAML[Lightwheel kitchen graph YAML] --> Builder[Arena environment builder]
  Builder --> Solver[Relation solver]
  Kitchen[Kitchen aggregate mesh] --> Solver
  Droid[DROID stand-only bounds] --> Solver
  Objects[Mustard and bowl bounds] --> Solver
  Solver --> Pool[Pooled placement layouts]
  Pool --> Release[Release Warp mesh caches]
  Release --> Event[Deep-copied reset EventTermCfg]
  Event --> Reset[Per-environment reset placement]
  Reset --> Refill[Lazy pool refill]
  Refill --> Solver
Loading

Reviews (1): Last reviewed commit: "Release warp mesh caches before storing ..." | Re-trigger Greptile

Comment thread isaaclab_arena/relations/object_placer.py Outdated
Comment thread isaaclab_arena/embodiments/droid/droid.py Outdated
Comment thread isaaclab_arena/relations/pooled_object_placer.py Outdated
@arena-review-bot

Copy link
Copy Markdown
Contributor

🤖 Isaac Lab-Arena Review Bot

Summary

Adds a Lightwheel Robocasa kitchen environment YAML that places the Droid on the floor next to a counter via relations, and fixes the real blocker behind it: MESH-mode relation solving builds non-copyable warp caches, which broke the EventTermCfg deep-copy that stores the placement pool. The fix threads a release_mesh_collision_resources() call through solver/validators/placer before the pool is stored, plus a stand-only bbox override for the Droid. Core logic looks sound and the deep-copy regression test is a good add; a few small design nits below.

Findings

🟡 object_placer.py:87getattr(validator, "release_mesh_collision_resources", None) probes by name; since PlacementValidator is an ABC, a base no-op method + direct call would let each validator answer explicitly.
🔵 droid.py:108get_bounding_box re-implements compute_local_bounding_box_from_usd's scale-unbaking and imports its private _read_default_prim_scale; consider extending the shared helper to measure a sub-prim instead of copying the math.
🟡 pooled_object_placer.py:72__slots__ used to hide __dict__ from configclass.validate() is fragile (new attributes must be added here or construction breaks) and couples the class to how it's stored; a more direct exclusion would be cleaner.

Test Coverage

Good — test_dynamic_spawn_pose_event_cfg_deepcopy_after_mesh_solve reproduces the exact deep-copy failure (fails before the release, passes after) and the params test now checks the pool is released and carries the objects. Matches the file's deferred-import test style; no sim needed here.

Verdict

Minor fixes needed

Comment thread isaaclab_arena/relations/placement_events.py Outdated

@zhx06 zhx06 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As a special fix for droid, the code LGTM.

qianl-nv added 2 commits July 29, 2026 21:25
Signed-off-by: Qian Lin <qianl@nvidia.com>
Enable the option for the kitchen pick and place yaml so On/NextTo use the stand footprint.

Signed-off-by: Qian Lin <qianl@nvidia.com>
@qianl-nv
qianl-nv force-pushed the qianl/feature/lw-kitchen-yaml branch from 39f2419 to c2be4eb Compare July 29, 2026 13:39

@qianl-nv qianl-nv left a comment

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Address comments.
The fix for mesh mode crash has evolve to quite sizable one, so I split the part out into a separate MR #972
This MR now only adds the yaml + Droid stand-only bbox.

Comment thread isaaclab_arena/embodiments/droid/droid.py Outdated
Comment thread isaaclab_arena/relations/object_placer.py Outdated
Comment thread isaaclab_arena/relations/pooled_object_placer.py Outdated
@qianl-nv
qianl-nv merged commit acfe4d8 into main Jul 29, 2026
10 checks passed
@qianl-nv
qianl-nv deleted the qianl/feature/lw-kitchen-yaml branch July 29, 2026 15:02
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants