Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
Changed
^^^^^^^

* **Breaking:** Changed Newton MJWarp velocity environments to use two physics substeps from their

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.

🟡 Warning · Api — Changelog omits removed preset classes

This fragment covers only substeps, but the change also deletes importable PhysicsCfg classes from nine flat_env_cfg modules plus KukaAllegroPhysicsCfg and SO101StackPhysicsCfg, and makes flat velocity envs inherit the family collision/shape settings. Downstream imports of those symbols now fail with no documented replacement. List the removed classes, their shared-preset replacements, and how to restore the previous single-substep configuration.

shared family configuration. Robot-specific velocity configs no longer override the substep count.
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,10 @@
# SPDX-License-Identifier: BSD-3-Clause

from isaaclab.assets import ArticulationCfg, RigidObjectCfg
from isaaclab.physics import PhysxAutoCfg
from isaaclab.utils.configclass import configclass

from isaaclab_tasks.contrib.stack import mdp
from isaaclab_tasks.contrib.stack.stack_env_cfg import (
PhysicsCfg,
StackEnvCfg,
StackEventCfg,
apply_default_semantics,
Expand Down Expand Up @@ -52,21 +50,6 @@
_SO101_BASE_SEAT_ROT = (0.0, 0.0, 0.70710678, 0.70710678)


@configclass
class SO101StackPhysicsCfg(PhysicsCfg):
"""Physics presets for the SO-101 stack tasks.

Extends the stack-family presets with
:attr:`~isaaclab_physx.physics.PhysxCfg.solve_articulation_contact_last` so contacts
are solved after the articulation position drive and can stall the closing jaw at the
object surface instead of letting it tunnel through grasped objects.
"""

isaacsim_physx = PhysicsCfg().isaacsim_physx.replace(solve_articulation_contact_last=True)
physx = PhysxAutoCfg(isaacsim_physx=isaacsim_physx)
default = isaacsim_physx


@configclass
class SO101CubeStackEnvCfg(StackEnvCfg):
"""Configuration for the SO-101 Cube Stack Environment (joint-position control).
Expand Down Expand Up @@ -144,7 +127,3 @@ def __post_init__(self):
],
marker_scale=(0.05, 0.05, 0.05),
)

# simulation settings: solve finger contacts after the position drive so they can
# stall the closing jaw at the object surface (see SO101StackPhysicsCfg).
self.sim.physics = SO101StackPhysicsCfg()
Original file line number Diff line number Diff line change
Expand Up @@ -296,6 +296,8 @@ class PhysicsCfg(PresetCfg):
gpu_found_lost_aggregate_pairs_capacity=1024 * 1024 * 4,
gpu_total_aggregate_pairs_capacity=2**21,
friction_correlation_distance=0.00625,
# Let object contacts stall position-driven grippers before they tunnel through a grasp.
solve_articulation_contact_last=True,

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.

🟡 Warning · Design Architecture — SO-101 contact workaround applied family-wide

solve_articulation_contact_last was previously scoped to SO101StackPhysicsCfg with a docstring describing it as an SO-101 gripper workaround. Placing it on the shared stack PhysicsCfg changes PhysX contact solve ordering for every environment deriving from StackEnvCfg, altering grasp dynamics for other stack robots. Either keep the flag on the SO-101 config or record this family-wide default change in the changelog fragment.

)
newton_mjwarp = NewtonCfg(
solver_cfg=MJWarpSolverCfg(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,46 +3,21 @@
#
# SPDX-License-Identifier: BSD-3-Clause

from isaaclab_newton.physics import KaminoPADMMSolverCfg, MJWarpSolverCfg, NewtonCfg
from isaaclab_ov.physics import OvPhysxCfg
from isaaclab_physx.physics import PhysxCfg

from isaaclab.physics import PhysxAutoCfg
from isaaclab.sim import SimulationCfg
from isaaclab.utils.configclass import configclass

from isaaclab_tasks.utils import PresetCfg

from .rough_env_cfg import UnitreeA1RoughEnvCfg


@configclass
class PhysicsCfg(PresetCfg):
isaacsim_physx = PhysxCfg(gpu_max_rigid_patch_count=10 * 2**15)
ovphysx = OvPhysxCfg(gpu_max_rigid_patch_count=10 * 2**15)
physx = PhysxAutoCfg(isaacsim_physx=isaacsim_physx, ovphysx=ovphysx)
newton_mjwarp = NewtonCfg(
solver_cfg=MJWarpSolverCfg(
njmax=60,
nconmax=30,
cone="pyramidal",
impratio=1,
integrator="implicitfast",
),
num_substeps=1,
debug_mode=False,
)
newton_kamino = NewtonCfg(solver_cfg=KaminoPADMMSolverCfg(max_contacts_per_world=64))
default = isaacsim_physx


@configclass
class UnitreeA1FlatEnvCfg(UnitreeA1RoughEnvCfg):
sim: SimulationCfg = SimulationCfg(physics=PhysicsCfg())

def __post_init__(self):
super().__post_init__()

# physics
newton_mjwarp = self.sim.physics.newton_mjwarp
newton_mjwarp.solver_cfg.njmax = 60
newton_mjwarp.solver_cfg.nconmax = 30
self.sim.physics.default = self.sim.physics.isaacsim_physx
# scene
self.scene.terrain.terrain_type = "plane"
self.scene.terrain.terrain_generator = None
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,46 +3,23 @@
#
# SPDX-License-Identifier: BSD-3-Clause

from isaaclab_newton.physics import KaminoPADMMSolverCfg, MJWarpSolverCfg, NewtonCfg
from isaaclab_ov.physics import OvPhysxCfg
from isaaclab_physx.physics import PhysxCfg

from isaaclab.physics import PhysxAutoCfg
from isaaclab.sim import SimulationCfg
from isaaclab.utils.configclass import configclass

from isaaclab_tasks.utils import PresetCfg

from .rough_env_cfg import AnymalBRoughEnvCfg


@configclass
class PhysicsCfg(PresetCfg):
isaacsim_physx = PhysxCfg(gpu_max_rigid_patch_count=10 * 2**15)
ovphysx = OvPhysxCfg(gpu_max_rigid_patch_count=10 * 2**15)
physx = PhysxAutoCfg(isaacsim_physx=isaacsim_physx, ovphysx=ovphysx)
newton_mjwarp = NewtonCfg(
solver_cfg=MJWarpSolverCfg(
njmax=75,
nconmax=15,
cone="elliptic",
impratio=100,
integrator="implicitfast",
),
num_substeps=1,
debug_mode=False,
)
newton_kamino = NewtonCfg(solver_cfg=KaminoPADMMSolverCfg(max_contacts_per_world=64))
default = isaacsim_physx


@configclass
class AnymalBFlatEnvCfg(AnymalBRoughEnvCfg):
sim: SimulationCfg = SimulationCfg(physics=PhysicsCfg())

def __post_init__(self):
super().__post_init__()

# physics
newton_mjwarp = self.sim.physics.newton_mjwarp
newton_mjwarp.solver_cfg.njmax = 75
newton_mjwarp.solver_cfg.nconmax = 15
newton_mjwarp.solver_cfg.cone = "elliptic"
newton_mjwarp.solver_cfg.impratio = 100.0
self.sim.physics.default = self.sim.physics.isaacsim_physx
# scene
self.scene.terrain.terrain_type = "plane"
self.scene.terrain.terrain_generator = None
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,46 +3,23 @@
#
# SPDX-License-Identifier: BSD-3-Clause

from isaaclab_newton.physics import KaminoPADMMSolverCfg, MJWarpSolverCfg, NewtonCfg
from isaaclab_ov.physics import OvPhysxCfg
from isaaclab_physx.physics import PhysxCfg

from isaaclab.physics import PhysxAutoCfg
from isaaclab.sim import SimulationCfg
from isaaclab.utils.configclass import configclass

from isaaclab_tasks.utils import PresetCfg

from .rough_env_cfg import AnymalCRoughEnvCfg


@configclass
class PhysicsCfg(PresetCfg):
isaacsim_physx = PhysxCfg(gpu_max_rigid_patch_count=10 * 2**15)
ovphysx = OvPhysxCfg(gpu_max_rigid_patch_count=10 * 2**15)
physx = PhysxAutoCfg(isaacsim_physx=isaacsim_physx, ovphysx=ovphysx)
newton_mjwarp = NewtonCfg(
solver_cfg=MJWarpSolverCfg(
njmax=120,
nconmax=15,
cone="elliptic",
impratio=100,
integrator="implicitfast",
),
num_substeps=1,
debug_mode=False,
)
newton_kamino = NewtonCfg(solver_cfg=KaminoPADMMSolverCfg(max_contacts_per_world=64))
default = isaacsim_physx


@configclass
class AnymalCFlatEnvCfg(AnymalCRoughEnvCfg):
sim: SimulationCfg = SimulationCfg(physics=PhysicsCfg())

def __post_init__(self):
super().__post_init__()

# physics
newton_mjwarp = self.sim.physics.newton_mjwarp
newton_mjwarp.solver_cfg.njmax = 120
newton_mjwarp.solver_cfg.nconmax = 15
newton_mjwarp.solver_cfg.cone = "elliptic"
newton_mjwarp.solver_cfg.impratio = 100.0
self.sim.physics.default = self.sim.physics.isaacsim_physx
# scene
self.scene.terrain.terrain_type = "plane"
self.scene.terrain.terrain_generator = None
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,46 +3,21 @@
#
# SPDX-License-Identifier: BSD-3-Clause

from isaaclab_newton.physics import KaminoPADMMSolverCfg, MJWarpSolverCfg, NewtonCfg
from isaaclab_ov.physics import OvPhysxCfg
from isaaclab_physx.physics import PhysxCfg

from isaaclab.physics import PhysxAutoCfg
from isaaclab.sim import SimulationCfg
from isaaclab.utils.configclass import configclass

from isaaclab_tasks.utils import PresetCfg

from .rough_env_cfg import UnitreeGo1RoughEnvCfg


@configclass
class PhysicsCfg(PresetCfg):
isaacsim_physx = PhysxCfg(gpu_max_rigid_patch_count=10 * 2**15)
ovphysx = OvPhysxCfg(gpu_max_rigid_patch_count=10 * 2**15)
physx = PhysxAutoCfg(isaacsim_physx=isaacsim_physx, ovphysx=ovphysx)
newton_mjwarp = NewtonCfg(
solver_cfg=MJWarpSolverCfg(
njmax=60,
nconmax=25,
cone="pyramidal",
impratio=1,
integrator="implicitfast",
),
num_substeps=1,
debug_mode=False,
)
newton_kamino = NewtonCfg(solver_cfg=KaminoPADMMSolverCfg(max_contacts_per_world=64))
default = isaacsim_physx


@configclass
class UnitreeGo1FlatEnvCfg(UnitreeGo1RoughEnvCfg):
sim: SimulationCfg = SimulationCfg(physics=PhysicsCfg())

def __post_init__(self):
super().__post_init__()

# physics
newton_mjwarp = self.sim.physics.newton_mjwarp
newton_mjwarp.solver_cfg.njmax = 60
newton_mjwarp.solver_cfg.nconmax = 25
self.sim.physics.default = self.sim.physics.isaacsim_physx
# scene
self.scene.terrain.terrain_type = "plane"
self.scene.terrain.terrain_generator = None
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ class PhysicsCfg(PresetCfg):
use_mujoco_contacts=False,
),
collision_cfg=NewtonCollisionPipelineCfg(max_triangle_pairs=2_500_000),
num_substeps=1,
num_substeps=2,
debug_mode=False,
default_shape_cfg=NewtonShapeCfg(margin=0.01),
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,13 +3,10 @@
#
# SPDX-License-Identifier: BSD-3-Clause

from isaaclab_ov.physics import OvPhysxCfg

from isaaclab.assets import ArticulationCfg
from isaaclab.managers import EventTermCfg as EventTerm
from isaaclab.managers import RewardTermCfg as RewTerm
from isaaclab.managers import SceneEntityCfg
from isaaclab.physics import PhysxAutoCfg
from isaaclab.sensors import CameraCfg, ContactSensorCfg
from isaaclab.utils.configclass import configclass

Expand All @@ -24,20 +21,6 @@
FINGER_SENSORS = [f"{name}_object_s" for name in FINGERTIP_LIST if name != "thumb_link_3"]


@configclass
class KukaAllegroPhysicsCfg(lift.PhysicsCfg):
"""Physics presets supported by the Kuka Allegro tasks."""

isaacsim_physx = lift.PhysicsCfg().isaacsim_physx
ovphysx = OvPhysxCfg(
gpu_max_rigid_patch_count=4 * 5 * 2**15,
gpu_found_lost_pairs_capacity=2**26,
)
physx = PhysxAutoCfg(isaacsim_physx=isaacsim_physx, ovphysx=ovphysx)
newton_mjwarp = lift.PhysicsCfg().newton_mjwarp
default = newton_mjwarp


@configclass
class KukaAllegroSceneCfg(lift.SceneCfg):
"""KukaAllegro scene for the Lift and Reorient tasks.
Expand Down Expand Up @@ -105,7 +88,6 @@ class KukaAllegroMixinCfg:

def __post_init__(self: lift.ReorientEnvCfg):
super().__post_init__()
self.sim.physics = KukaAllegroPhysicsCfg()
self.commands.object_pose.body_name = "palm_link"
events = self.events.conditional_reset.params["terms"]
events["reset_robot_wrist_joint"].params["asset_cfg"] = SceneEntityCfg("robot", joint_names="iiwa7_joint_7")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@
from dataclasses import MISSING

from isaaclab_newton.physics import MJWarpSolverCfg, NewtonCfg, NewtonCollisionPipelineCfg, NewtonShapeCfg

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 Optional backend breaks lift imports

If isaaclab_tasks is installed without the separately packaged isaaclab_ov backend, this unconditional import fails before physics preset selection, causing every core lift configuration that imports the shared module—including Franka tasks using Newton or Isaac Sim PhysX—to raise ModuleNotFoundError during loading.

Knowledge Base Used:

from isaaclab_ov.physics import OvPhysxCfg
from isaaclab_physx.physics import PhysxCfg

import isaaclab.sim as sim_utils
Expand Down Expand Up @@ -490,6 +491,10 @@ class PhysicsCfg(PresetCfg):
gpu_max_rigid_patch_count=4 * 5 * 2**15,
gpu_found_lost_pairs_capacity=2**26,
)
ovphysx = OvPhysxCfg(
gpu_max_rigid_patch_count=4 * 5 * 2**15,
gpu_found_lost_pairs_capacity=2**26,
)
newton_mjwarp = NewtonCfg(
solver_cfg=MJWarpSolverCfg(
solver="newton",
Expand All @@ -509,7 +514,7 @@ class PhysicsCfg(PresetCfg):
num_substeps=2,
debug_mode=False,
)
physx = PhysxAutoCfg(isaacsim_physx=isaacsim_physx)
physx = PhysxAutoCfg(isaacsim_physx=isaacsim_physx, ovphysx=ovphysx)
default = newton_mjwarp


Expand Down
Loading
Loading