Enable lightwheel kitchen mesh placement - #981
Conversation
Pass the live PooledObjectPlacer through env_kwargs (like variation_recorder) instead of EventTermCfg params. Mesh-mode placement builds Warp BVHs on the pool; storing it in config deepcopy fails with "ctypes objects containing pointers cannot be pickled" and configclass validation recurses into cyclic asset graphs. The reset event now has empty params and reads the pool from the env. Leaving Warp mesh caches on the pool through Fabric startup also hides the Droid stand_instanceable in Kit viz (physics and placement stay correct). Use --disable_fabric for viewport runs until that is resolved; a 4-env / 2000-step benchmark showed no rollout cost from the flag (87.0 vs 86.5 ms/step). Signed-off-by: Qian Lin <qianl@nvidia.com>
| env_kwargs: dict[str, Any] = {"variation_recorder": variation_recorder} | ||
| if self._placement_pool is not None: | ||
| env_kwargs["placement_pool"] = self._placement_pool |
There was a problem hiding this comment.
Placement pool lost in callback
When a relation-based environment with reset-time placement is launched through the IsaacLab external callback, the callback discards the env_kwargs containing placement_pool. The environment is then constructed with a null pool, causing its initial placement reset to fail with AssertionError: Env has no placement pool; build through ArenaEnvBuilder.
Knowledge Base Used: Environment builder flow
Greptile SummaryThis PR enables mesh-based Lightwheel kitchen collision placement and moves the reset placement pool out of event configuration.
Confidence Score: 4/5The external IsaacLab callback path must preserve the live placement pool before this PR is safe to merge. Reset-time relation placement now depends on an environment constructor keyword that the direct builder path forwards, but the supported external callback discards before IsaacLab constructs and initially resets the environment. Files Needing Attention: isaaclab_arena/environments/arena_env_builder.py and isaaclab_arena/environments/isaaclab_interop.py Important Files Changed
Sequence DiagramsequenceDiagram
participant Builder as ArenaEnvBuilder
participant Callback as IsaacLab external callback
participant Gym as gym.make
participant Env as Arena runtime env
participant Reset as placement_reset
Builder->>Builder: Solve relations and create pool
Builder->>Callback: build_registered() returns cfg + env_kwargs
Callback--xGym: placement_pool kwargs discarded
Gym->>Env: "Construct with placement_pool=None"
Env->>Reset: Initial reset
Reset-->>Env: Assertion: placement pool missing
Reviews (1): Last reviewed commit: "Bind placement pool on env at runtime" | Re-trigger Greptile |
🤖 Isaac Lab-Arena Review BotSummaryEnables mesh-mode collision placement for the Lightwheel kitchen background and moves the live FindingsNo blocking issues. The Test CoverageGood. Existing non-sim unit tests are updated to the new signatures, and two new regression tests cover the exact deepcopy/ VerdictShip it. |
|
Won't go with this approach. willl use #972 instead. |
Summary
Mesh kitchen placement; bind pool on env runtime
Detailed description
env_kwargsinstead ofEventTermCfgparams so mesh placement Warp caches do not hit configclass deepcopy/pickle ("ctypes objects containing pointers cannot be pickled")placement_resetevent uses empty params and reads the pool fromIsaacLabArenaManagerBasedRLEnv.placement_poolNote: With Fabric enabled, Warp caches on the pool can hide the Droid
stand_instanceablein Kit viz while physics stays correct; use--disable_fabricfor viewport runs (4 env / 2000-step benchmark: 87.0 vs 86.5 ms/step rollout, no meaningful difference)