Skip to content

Commit 0caae64

Browse files
StafaHooctipus
andauthored
[Workflow] Default classic core tasks to Newton (#7066)
Splits the Cartpole and shared-renderer defaults from #6980.\n\n- Defaults Cartpole to Newton MJWarp.\n- Defaults `MultiBackendRendererCfg` to the Newton renderer while retaining explicit Isaac RTX selection.\n- Consolidates core environment smoke tests into one three-backend matrix (`newton_mjwarp`, `physx`, `isaacsim_physx`).\n- Removes obsolete Play/MJWarp-discovery test utility logic and the redundant Newton test module.\n\nValidation: `uv run python -m pytest source/isaaclab_tasks/test/core/test_preset_kit_decision.py source/isaaclab_tasks/test/core/test_runtime_compatibility.py -q` (51 passed).\n\nSupersedes the classic-controls portion of #6980. --------- Co-authored-by: ooctipus <zhengyuz@nvidia.com>
1 parent e8dc0bf commit 0caae64

12 files changed

Lines changed: 38 additions & 20 deletions

source/isaaclab_rl/changelog.d/default-newton-classic.skip

Whitespace-only changes.

source/isaaclab_rl/test/test_entrypoints_common.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -376,9 +376,9 @@ def summary(self, title: str, fields: dict[str, str]) -> None:
376376
# ``physx`` reaches the physics backend the same way ``rtx`` reaches the renderer
377377
(["physics=physx", "renderer=rtx"], "physx (ovphysx)", "rtx (ovrtx)", "none"),
378378
# a run that names no backend reports the ones the task pinned as defaults
379-
([], "default (isaacsim_physx)", "default (isaacsim_rtx)", "none"),
379+
([], "default (newton_mjwarp)", "default (newton_renderer)", "none"),
380380
# a domain preset has no row of its own
381-
(["physics=physx", "presets=depth"], "physx (isaacsim_physx)", "default (isaacsim_rtx)", "depth"),
381+
(["physics=physx", "presets=depth"], "physx (ovphysx)", "default (newton_renderer)", "depth"),
382382
],
383383
)
384384
def test_run_summary_reports_the_backends_the_run_resolves_to(
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
Changed
2+
^^^^^^^
3+
4+
* **Breaking:** Changed the Cartpole task family to use Newton MJWarp and the Newton renderer by default.
5+
Pass explicit physics and renderer presets to retain an Isaac Sim PhysX configuration.

source/isaaclab_tasks/isaaclab_tasks/core/cartpole/cartpole_direct_camera_env_cfg.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,9 @@ class BaseCartpoleTiledCameraCfg(CameraCfg):
3434
)
3535
width: int = 96
3636
height: int = 96
37-
renderer_cfg: MultiBackendRendererCfg = MultiBackendRendererCfg(newton_renderer=NewtonWarpRendererCfg())
37+
renderer_cfg: MultiBackendRendererCfg = MultiBackendRendererCfg(
38+
default=NewtonWarpRendererCfg(), newton_renderer=NewtonWarpRendererCfg()
39+
)
3840

3941
default = BaseCartpoleTiledCameraCfg(data_types=["rgb"])
4042
depth = BaseCartpoleTiledCameraCfg(data_types=["depth"])

source/isaaclab_tasks/isaaclab_tasks/core/cartpole/cartpole_direct_env_cfg.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@ class CartpolePhysicsCfg(PresetCfg):
3333
isaacsim_physx: PhysxCfg = PhysxCfg()
3434
ovphysx: OvPhysxCfg = OvPhysxCfg()
3535
physx: PhysxAutoCfg = PhysxAutoCfg(isaacsim_physx=isaacsim_physx, ovphysx=ovphysx)
36-
default = isaacsim_physx
3736
newton_mjwarp: NewtonCfg = NewtonCfg(
3837
solver_cfg=MJWarpSolverCfg(
3938
njmax=5,
@@ -51,6 +50,7 @@ class CartpolePhysicsCfg(PresetCfg):
5150
debug_mode=False,
5251
use_cuda_graph=True,
5352
)
53+
default = newton_mjwarp
5454

5555

5656
@configclass

source/isaaclab_tasks/isaaclab_tasks/core/cartpole/cartpole_manager_camera_env_cfg.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,9 @@ class BaseCartpoleTiledCameraCfg(CameraCfg):
4646
)
4747
width: int = 96
4848
height: int = 96
49-
renderer_cfg: MultiBackendRendererCfg = MultiBackendRendererCfg(newton_renderer=NewtonWarpRendererCfg())
49+
renderer_cfg: MultiBackendRendererCfg = MultiBackendRendererCfg(
50+
default=NewtonWarpRendererCfg(), newton_renderer=NewtonWarpRendererCfg()
51+
)
5052

5153
default = BaseCartpoleTiledCameraCfg(data_types=["rgb"])
5254
depth = BaseCartpoleTiledCameraCfg(data_types=["depth"])

source/isaaclab_tasks/isaaclab_tasks/core/cartpole/cartpole_manager_env_cfg.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,6 @@ class CartpolePhysicsCfg(PresetCfg):
4343
isaacsim_physx: PhysxCfg = PhysxCfg()
4444
ovphysx: OvPhysxCfg = OvPhysxCfg()
4545
physx: PhysxAutoCfg = PhysxAutoCfg(isaacsim_physx=isaacsim_physx, ovphysx=ovphysx)
46-
default: PhysxCfg = isaacsim_physx
4746
newton_mjwarp: NewtonCfg = NewtonCfg(
4847
solver_cfg=MJWarpSolverCfg(
4948
njmax=5,
@@ -56,6 +55,7 @@ class CartpolePhysicsCfg(PresetCfg):
5655
debug_mode=False,
5756
use_cuda_graph=True,
5857
)
58+
default: NewtonCfg = newton_mjwarp
5959
newton_kamino: NewtonCfg = NewtonCfg(
6060
solver_cfg=KaminoPADMMSolverCfg(sparse_jacobian=True),
6161
debug_mode=False,

source/isaaclab_tasks/test/core/test_rendering_registered_tasks.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -63,8 +63,8 @@ def _collect_camera_outputs(env: object) -> dict[str, dict[str, torch.Tensor]]:
6363

6464
# Task IDs that expose camera/tiled_camera image observations; each is validated for non-blank
6565
# rendering. The max different pixels percentage is set based on the screen space taken up by the
66-
# env. The ``presets`` column selects a data-type variant on the consolidated cartpole camera task;
67-
# ``None`` uses the default.
66+
# env. These golden baselines validate Isaac Sim PhysX with Isaac RTX. The ``presets`` column
67+
# selects a data-type variant on the consolidated cartpole camera task; ``None`` uses its default.
6868
_RENDER_CORRECTNESS_TASK_IDS = [
6969
("Isaac-Cartpole-Camera-Direct", None, "cartpole"),
7070
("Isaac-Cartpole-Camera-Direct", "albedo", "cartpole"),
@@ -96,7 +96,10 @@ def test_rendering_registered_tasks(task_id: str, presets: str | None, env_name:
9696
from isaaclab_tasks.utils.parse_cfg import load_cfg_from_registry
9797

9898
env_cfg = load_cfg_from_registry(task_id, "env_cfg_entry_point")
99-
env_cfg = resolve_presets(env_cfg, {presets} if presets else frozenset())
99+
selected_presets = {"isaacsim_physx", "isaacsim_rtx"}
100+
if presets:
101+
selected_presets.add(presets)
102+
env_cfg = resolve_presets(env_cfg, selected_presets)
100103
env_cfg.sim.device = "cuda:0"
101104
env_cfg.scene.num_envs = 4
102105

source/isaaclab_tasks/test/core/test_runtime_compatibility.py

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import sys
1717

1818
import pytest
19+
from isaaclab_newton.physics import NewtonCfg
1920
from isaaclab_ov.physics import OvPhysxCfg
2021
from isaaclab_ov.renderers import OVRTXRendererCfg
2122
from isaaclab_physx.physics import PhysxCfg
@@ -199,13 +200,15 @@ def test_newton_plus_ovrtx_is_valid():
199200
validate_runtime_compatibility(env_cfg)
200201

201202

202-
def test_default_isaacsim_physx_plus_ovrtx_raises():
203-
"""The concrete default Isaac Sim PhysX backend is incompatible with OVRTX."""
203+
def test_default_newton_plus_ovrtx_is_valid():
204+
"""The default Newton backend supports the default OVRTX renderer."""
204205
env_cfg = _resolve_with_presets("ovrtx")
205206

206-
assert isinstance(env_cfg.sim.physics, PhysxCfg)
207-
with pytest.raises(ValueError, match="PhysxCfg"):
208-
validate_runtime_compatibility(env_cfg)
207+
assert isinstance(env_cfg.sim.physics, NewtonCfg)
208+
config_scan = validate_runtime_compatibility(env_cfg)
209+
210+
assert isinstance(env_cfg.tiled_camera.renderer_cfg, OVRTXRendererCfg)
211+
assert config_scan.needs_kit is False
209212

210213

211214
def test_explicit_auto_physx_plus_ovrtx_resolves_to_ovphysx():
@@ -270,19 +273,19 @@ def test_auto_physx_explicit_experience_resolves_to_isaac_sim_backends():
270273

271274

272275
def test_default_preset_is_valid():
273-
"""The default preset (PhysX + Isaac RTX) is supported."""
276+
"""The default preset (Newton + Newton renderer) is supported."""
274277
env_cfg = _resolve_with_presets("default")
275278
validate_runtime_compatibility(env_cfg)
276279

277280

278-
def test_rtx_with_default_physx_is_valid_and_resolves_to_isaac_sim_backends():
279-
"""The RTX selector follows the default concrete Isaac Sim PhysX backend."""
281+
def test_rtx_with_default_newton_is_valid_and_resolves_to_ovrtx():
282+
"""The RTX selector resolves to OVRTX with the default Newton backend."""
280283
env_cfg = _resolve_with_presets("rtx")
281284
config_scan = validate_runtime_compatibility(env_cfg)
282285

283-
assert isinstance(env_cfg.sim.physics, PhysxCfg)
284-
assert isinstance(env_cfg.tiled_camera.renderer_cfg, IsaacRtxRendererCfg)
285-
assert config_scan.needs_kit is True
286+
assert isinstance(env_cfg.sim.physics, NewtonCfg)
287+
assert isinstance(env_cfg.tiled_camera.renderer_cfg, OVRTXRendererCfg)
288+
assert config_scan.needs_kit is False
286289

287290

288291
def test_renderer_selector_physx_rtx_is_valid_and_resolves_to_ovphysx_and_ovrtx():

source/isaaclab_tasks/test/core/test_video_recording.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,13 +100,15 @@ def _cartpole_cfg_newton(*, num_envs: int = 1):
100100

101101
def _cartpole_camera_cfg_physx(*, num_envs: int = 1):
102102
from isaaclab_physx.physics import PhysxCfg
103+
from isaaclab_physx.renderers import IsaacRtxRendererCfg
103104

104105
from isaaclab_tasks.core.cartpole.cartpole_direct_camera_env_cfg import CartpoleCameraEnvCfg
105106

106107
cfg = CartpoleCameraEnvCfg()
107108
cfg = cfg.default
108109
cfg.scene.num_envs = num_envs
109110
cfg.sim.physics = PhysxCfg()
111+
cfg.tiled_camera.renderer_cfg = IsaacRtxRendererCfg()
110112
return cfg
111113

112114

0 commit comments

Comments
 (0)