Skip to content

Upgrade Isaac Lab to Beta 2#903

Open
alexmillane wants to merge 22 commits into
mainfrom
alex/feature/upgrade_lab_to_beta2
Open

Upgrade Isaac Lab to Beta 2#903
alexmillane wants to merge 22 commits into
mainfrom
alex/feature/upgrade_lab_to_beta2

Conversation

@alexmillane

@alexmillane alexmillane commented Jul 14, 2026

Copy link
Copy Markdown
Collaborator

Summary

Update our Isaac Lab submodule to Isaac Lab 3.0 Beta 2.

Detailed description

  • Bump the submodules/IsaacLab pointer to Isaac Lab 3.0 Beta 2; the rest is downstream fallout.
  • Fix configclass imports repo-wide (from isaaclab.utils.configclass import configclass), required now that lazy_export makes the shallow import bind the submodule instead of the decorator.
  • Point Arena-hosted assets at the staging nucleus bucket via a new ARENA_NUCLEUS_DIR, since Beta 2 moved ISAACLAB_NUCLEUS_DIR to the production bucket where Arena assets aren't published yet.
  • Adapt to Newton/Warp API changes (MJWarpSolverCfg move, set_local_poses warp args).
  • Workaround: Add a carb-setting workaround for the contact-filter regression (IsaacLab #6424).
  • Workaround: AppLauncher minting a duplicate ArticulationCfg (which caused "Unknown asset config type for robot") by purging leaked isaaclab_assets presets after app launch in the interop callback; also defer cfg imports in tests to avoid the same class duplication (IsaacLab #6424).

@alexmillane alexmillane 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/nucleus.py Outdated
Comment thread isaaclab_arena/assets/nucleus.py Outdated
Comment thread isaaclab_arena/assets/nucleus.py Outdated
Comment thread isaaclab_arena/environments/isaaclab_arena_manager_based_env_cfg.py
Comment thread isaaclab_arena/environments/isaaclab_interop.py Outdated
Comment thread isaaclab_arena/tests/test_object_on_microwave_tray.py Outdated
Comment thread isaaclab_arena/tests/test_object_on_microwave_tray.py Outdated
Comment thread isaaclab_arena/tests/test_object_on_microwave_tray.py Outdated
Comment thread isaaclab_arena/tests/test_physics_presets.py Outdated
Comment thread isaaclab_arena/tests/test_physics_presets.py Outdated
@alexmillane alexmillane marked this pull request as ready for review July 14, 2026 10:03
@greptile-apps

greptile-apps Bot commented Jul 14, 2026

Copy link
Copy Markdown
Contributor

Greptile Summary

This PR updates Arena for Isaac Lab 3.0 Beta 2. The main changes are:

  • Direct configclass imports across Arena configs.
  • New staging nucleus root for Arena-hosted assets.
  • Newton and Warp API updates.
  • Contact-filter and isaaclab_assets class-duplication workarounds.
  • Updated and added simulation tests for the migration.

Confidence Score: 4/5

The asset-root migration needs a fix for custom or mirrored nucleus deployments.

  • The staging root is built with a string replacement that can silently do nothing.
  • The import, Warp, Newton, and app-launch changes are targeted and covered by the updated tests.
  • No security issue was identified in the changed code.

isaaclab_arena/assets/nucleus.py

Important Files Changed

Filename Overview
isaaclab_arena/assets/nucleus.py Adds ARENA_NUCLEUS_DIR by rewriting the Isaac Lab nucleus URL, with a fragile no-op path for custom roots.
isaaclab_arena/environments/isaaclab_interop.py Purges leaked isaaclab_assets modules after app launch so later Arena imports bind to restored Isaac Lab cfg classes.
isaaclab_arena/variations/camera_extrinsics_variation.py Adapts camera pose reads and writes to Warp-backed Isaac Lab pose APIs.
isaaclab_arena/environments/isaaclab_arena_manager_based_env_cfg.py Moves the MJWarp solver config import and adds the contact-filter carb setting workaround.

Reviews (1): Last reviewed commit: "Added note about import issues bug." | Re-trigger Greptile

from isaaclab.utils.assets import ISAACLAB_NUCLEUS_DIR

# TODO(2026.07.14, Point Arena assets to the production bucket before release)
ARENA_NUCLEUS_DIR: str = ISAACLAB_NUCLEUS_DIR.replace("omniverse-content-production", "omniverse-content-staging")

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

P1 Staging Root Can Stay Production

When ISAACLAB_NUCLEUS_DIR is a custom Omniverse root, local mirror, or any value that does not contain omniverse-content-production, this replacement is a no-op. All changed Arena asset paths then keep using the non-staging Isaac Lab root, so staging-only Arena USDs and textures fail to load at runtime.

from isaaclab.utils.assets import ISAACLAB_NUCLEUS_DIR

# TODO(2026.07.14, Point Arena assets to the production bucket before release)
ARENA_NUCLEUS_DIR: str = ISAACLAB_NUCLEUS_DIR.replace("omniverse-content-production", "omniverse-content-staging")

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🔵 .replace() silently no-ops if the substring isn't there

If ISAACLAB_NUCLEUS_DIR ever stops containing omniverse-content-production — a future URL change, or a user who overrides the asset root to an on-prem/custom Nucleus — this replace quietly returns the string unchanged, so ARENA_NUCLEUS_DIR points at a bucket that doesn't host Arena assets and every asset load fails with a confusing not-found. Since it's a temporary staging shim, could we at least log (or assert, if custom roots aren't a concern) when the substring isn't found, so the assumption fails loudly rather than pointing everything at the wrong bucket?

Tracked upstream at https://github.com/isaac-sim/IsaacLab/issues/6514.
TODO: remove this workaround once IsaacLab #6514 is resolved.
"""
import sys

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

🔵 Hoist import sys to the top

sys is stdlib and doesn't need the sim running or break a cycle, so it can move to the module-level imports rather than sitting inside the function.

@arena-review-bot

Copy link
Copy Markdown
Contributor

🤖 Isaac Lab-Arena Review Bot

Summary

This PR bumps the Isaac Lab submodule to 3.0 Beta 2 and threads through the downstream fallout: repo-wide configclass import fixes, a new ARENA_NUCLEUS_DIR that redirects Arena-hosted assets to the staging bucket, Newton/Warp API adjustments (MJWarpSolverCfg move, .torch/wp.from_torch on get_local_poses/set_local_poses), and two documented upstream workarounds. The mechanical parts are clean and thorough — I confirmed no stray ISAACLAB_NUCLEUS_DIR references were left behind and that ISAAC_NUCLEUS_DIR (production-hosted standard assets) was correctly left untouched. Only a couple of minor nits.

Findings

🔵 isaaclab_arena/assets/nucleus.py:14ISAACLAB_NUCLEUS_DIR.replace("omniverse-content-production", ...) silently no-ops if the substring is absent (URL change, or a custom/on-prem asset root), leaving Arena assets pointed at a bucket that does not host them. Worth logging when the replacement does not fire.

🔵 isaaclab_arena/environments/isaaclab_interop.py:107import sys sits inside _purge_leaked_isaaclab_assets_presets; it can be hoisted to module top (no sim/cycle reason to defer).

Test Coverage

The new test_object_on_microwave_tray.py is a solid regression test for the contact-filter workaround — it uses the inner/outer run_simulation_app_function pattern, reads Isaac Lab attributes via env.unwrapped, and asserts the success termination actually fires (not just "no exception"). test_physics_presets.py correctly moves the preset-lookup checks into the sim-app pattern now that importing the env cfg drags in the Newton/Warp cfg classes, and the live-endpoint test gains a sensible skipif. Markers are consistent with sibling tests (persistent in-process app → Phase 1).

Verdict

Minor fixes needed — nits only; the upgrade itself looks well-executed. (PR is still marked DRAFT / Greptile check pending.)

- Migrate the two remaining 'from isaaclab.utils import configclass' imports
  (light_color/light_direction variations) to the module path used by the rest
  of the upgrade; the package no longer re-exports the decorator, so these were
  failing collection with 'module object is not callable'.
- Import MJWarpSolverCfg/NewtonCfg from the isaaclab_newton.physics package root
  so it resolves whether MJWarpSolverCfg lives in newton_manager_cfg (older) or
  mjwarp_manager_cfg (Beta 2).

Signed-off-by: alex <amillane@nvidia.com>
@alexmillane alexmillane changed the title DRAFT: Upgrade Isaac Lab to Beta 2 Upgrade Isaac Lab to Beta 2 Jul 14, 2026
The test handed ArenaEnvBuilder the raw argparse Namespace, which lacks the
builder-cfg fields (language_instruction) after the typed-config migration;
translate the CLI args with arena_env_builder_cfg_from_argparse like the
other tests.

Signed-off-by: alex <amillane@nvidia.com>

@peterd-NV peterd-NV 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.

Overall looks good to me, just left some questions regarding compatibility with the curobo features that were recently merged.

"""Pytest entry point for Galbot arm reaching goal test."""
result = run_simulation_app_function(
_test_galbot_arm_reaches_goal,
headless=False,

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.

This changes headless to True now (which I assume is what we want) but just flagging in case there's a particular reason this was set to false before.

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.

I think this was a mistake. I just sort of noticed running tests on my machine that the GUI was popping up during testing 😓

Comment thread .github/workflows/ci.yml Outdated

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.

Does curobo related code/test image also need to bump up to Isaac Lab 3.0 Beta 2? Looks like it's still using the old Lab version right now.

@xyao-nv added some curobo features recently which I think would also need to have the registry path updated from ISAACLAB_NUCLEUS_DIR to ARENA_NUCLEUS_DIR (e.g. here)

Comment thread .github/workflows/ci.yml

container:
image: nvcr.io/nvstaging/isaac-amr/isaaclab_arena:latest
image: nvcr.io/nvstaging/isaac-amr/isaaclab_arena:lab_beta_2_testing

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.

Note: after the upgrade we could push a new image with latest tag and restore this

ARENA_NUCLEUS_DIR is defined in isaaclab_arena.assets.nucleus, not in
Isaac Lab's isaaclab.utils.assets, so the previous import failed at
module load.

Signed-off-by: alex <amillane@nvidia.com>
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.

2 participants