Skip to content
Closed
Show file tree
Hide file tree
Changes from 2 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,2 @@
Internal coupler type-check update accompanying the public Kamino solver
configuration base class.
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,7 @@

import warp as wp
from isaaclab_newton.physics import (
KaminoDVISolverCfg,
KaminoPADMMSolverCfg,
KaminoSolverCfgBase,
MJWarpSolverCfg,
MPMSolverCfg,
NewtonCollisionPipelineCfg,
Expand Down Expand Up @@ -64,7 +63,7 @@ def _requires_external_contacts(solver_cfg: NewtonSolverCfg) -> bool:
"""
if isinstance(solver_cfg, MJWarpSolverCfg):
return not solver_cfg.use_mujoco_contacts
if isinstance(solver_cfg, (KaminoPADMMSolverCfg, KaminoDVISolverCfg)):
if isinstance(solver_cfg, KaminoSolverCfgBase):
Comment thread
rubengrandia marked this conversation as resolved.
return not solver_cfg.use_collision_detector
if isinstance(solver_cfg, MPMSolverCfg):
return False
Expand Down Expand Up @@ -153,7 +152,7 @@ def _validate_config(cls, solver_cfg: CouplerCfg) -> None:
f"CouplerEntryCfg {entry.name!r} uses {type(nested_cfg).__name__}, whose manager "
"does not implement nested solver construction."
)
if isinstance(nested_cfg, (KaminoPADMMSolverCfg, KaminoDVISolverCfg)):
if isinstance(nested_cfg, KaminoSolverCfgBase):
raise NotImplementedError(
f"CouplerEntryCfg {entry.name!r} uses a Kamino solver config, whose manager-specific FK/reset "
"lifecycle cannot yet be preserved inside Newton's coupled-solver entry API."
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
Added
^^^^^

* Added :class:`~isaaclab_newton.physics.KaminoSolverCfgBase` as the public
base configuration class for Kamino solvers.
2 changes: 2 additions & 0 deletions source/isaaclab_newton/isaaclab_newton/physics/__init__.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ __all__ = [
"KaminoMaterialsCfg",
"KaminoPADMMCfg",
"KaminoPADMMSolverCfg",
"KaminoSolverCfgBase",
Comment thread
rubengrandia marked this conversation as resolved.
"MPMSolverCfg",
"MJWarpSolverCfg",
"NewtonCfg",
Expand Down Expand Up @@ -43,6 +44,7 @@ from .kamino_manager_cfg import (
KaminoMaterialsCfg,
KaminoPADMMCfg,
KaminoPADMMSolverCfg,
KaminoSolverCfgBase,
)
from .mjwarp_manager import NewtonMJWarpManager
from .mjwarp_manager_cfg import MJWarpSolverCfg
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@

from isaaclab.physics import PhysicsManager

from .kamino_manager_cfg import _KaminoSolverCfgBase
from .kamino_manager_cfg import KaminoSolverCfgBase
from .newton_manager import NewtonManager

logger = logging.getLogger(__name__)
Expand Down Expand Up @@ -58,12 +58,12 @@ class NewtonKaminoManager(NewtonManager):
_solver: SolverKamino

@classmethod
def _get_kamino_solver_cfg(cls) -> _KaminoSolverCfgBase:
def _get_kamino_solver_cfg(cls) -> KaminoSolverCfgBase:
cfg = PhysicsManager._cfg
if cfg is None:
raise RuntimeError("Physics manager is not initialized.")
solver_cfg = getattr(cfg, "solver_cfg", None)
if not isinstance(solver_cfg, _KaminoSolverCfgBase):
if not isinstance(solver_cfg, KaminoSolverCfgBase):
raise TypeError(f"Expected a Kamino solver configuration, got {type(solver_cfg).__name__}.")
return solver_cfg

Expand Down Expand Up @@ -112,12 +112,12 @@ def _reset_solver_internals(cls, world_mask: wp.array | None) -> None:
"""

@classmethod
def _create_solver(cls, model: Model, solver_cfg: _KaminoSolverCfgBase) -> SolverKamino:
def _create_solver(cls, model: Model, solver_cfg: KaminoSolverCfgBase) -> SolverKamino:
"""Construct the configured Kamino solver."""
return SolverKamino(model, solver_cfg.to_solver_config())

@classmethod
def _build_solver(cls, model: Model, solver_cfg: _KaminoSolverCfgBase) -> None:
def _build_solver(cls, model: Model, solver_cfg: KaminoSolverCfgBase) -> None:
"""Construct :class:`SolverKamino` and populate the base-class slots.

Sets :attr:`NewtonManager._needs_collision_pipeline` to ``True`` only
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -223,7 +223,7 @@ class KaminoMaterialsCfg:


@configclass
class _KaminoSolverCfgBase(NewtonSolverCfg):
class KaminoSolverCfgBase(NewtonSolverCfg):
Comment thread
rubengrandia marked this conversation as resolved.
Comment thread
rubengrandia marked this conversation as resolved.
"""Common configuration for Kamino solver-related parameters.

Kamino simulates constrained rigid multi-body systems in maximal coordinates with
Expand Down Expand Up @@ -393,7 +393,7 @@ def to_solver_config(self) -> SolverKamino.Config:


@configclass
class KaminoPADMMSolverCfg(_KaminoSolverCfgBase):
class KaminoPADMMSolverCfg(KaminoSolverCfgBase):
"""Configuration for Kamino with the P-ADMM forward-dynamics solver."""

dynamics_solver_cfg: KaminoPADMMCfg = field(default_factory=KaminoPADMMCfg)
Expand All @@ -405,7 +405,7 @@ def _get_dynamics_solver_config(self) -> tuple[Literal["padmm"], dict[str, Any]]


@configclass
class KaminoDVISolverCfg(_KaminoSolverCfgBase):
class KaminoDVISolverCfg(KaminoSolverCfgBase):
"""Configuration for Kamino with the DVI forward-dynamics solver."""

dynamics_solver_cfg: KaminoDVICfg = field(default_factory=KaminoDVICfg)
Expand Down
Loading