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
36 changes: 0 additions & 36 deletions docs/source/api/lab_contrib/isaaclab_contrib.deformable.rst
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,6 @@ isaaclab_contrib.deformable

deformable_object.DeformableObject
deformable_object_data.DeformableObjectData
newton_manager_cfg.NewtonModelCfg
newton_manager_cfg.NewtonModelSolverCfg
newton_manager_cfg.VBDSolverCfg
newton_manager_cfg.CoupledMJWarpVBDSolverCfg
vbd_manager.NewtonVBDManager

Deformable Object
-----------------
Expand All @@ -28,34 +23,3 @@ Deformable Object
:inherited-members:
:show-inheritance:
:exclude-members: __init__

Newton Solver Configurations
----------------------------

.. autoclass:: isaaclab_contrib.deformable.newton_manager_cfg.NewtonModelCfg
:members:
:show-inheritance:
:exclude-members: __init__

.. autoclass:: isaaclab_contrib.deformable.newton_manager_cfg.NewtonModelSolverCfg
:members:
:show-inheritance:
:exclude-members: __init__

.. autoclass:: isaaclab_contrib.deformable.newton_manager_cfg.VBDSolverCfg
:members:
:show-inheritance:
:exclude-members: __init__

.. autoclass:: isaaclab_contrib.deformable.newton_manager_cfg.CoupledMJWarpVBDSolverCfg
:members:
:show-inheritance:
:exclude-members: __init__

Newton Solver Managers
----------------------

.. autoclass:: isaaclab_contrib.deformable.vbd_manager.NewtonVBDManager
:members:
:inherited-members:
:show-inheritance:
18 changes: 18 additions & 0 deletions docs/source/api/lab_newton/isaaclab_newton.physics.rst
Original file line number Diff line number Diff line change
Expand Up @@ -9,15 +9,18 @@

NewtonManager
NewtonCfg
NewtonSoftContactCfg
NewtonCollisionPipelineCfg
NewtonFeatherstoneManager
NewtonKaminoManager
NewtonMPMManager
NewtonMJWarpManager
NewtonVBDManager
NewtonShapeCfg
NewtonSolverCfg
NewtonXPBDManager
MJWarpSolverCfg
VBDSolverCfg
XPBDSolverCfg
FeatherstoneSolverCfg
KaminoCollisionDetectorCfg
Expand Down Expand Up @@ -50,6 +53,11 @@ Physics Configuration
:show-inheritance:
:exclude-members: __init__

.. autoclass:: NewtonSoftContactCfg
:members:
:show-inheritance:
:exclude-members: __init__

.. autoclass:: NewtonSolverCfg
:members:
:show-inheritance:
Expand All @@ -60,6 +68,11 @@ Physics Configuration
:show-inheritance:
:exclude-members: __init__

.. autoclass:: VBDSolverCfg
:members:
:show-inheritance:
:exclude-members: __init__

.. autoclass:: XPBDSolverCfg
:members:
:show-inheritance:
Expand Down Expand Up @@ -143,6 +156,11 @@ Solver Managers
:inherited-members:
:show-inheritance:

.. autoclass:: NewtonVBDManager
:members:
:inherited-members:
:show-inheritance:

.. autoclass:: NewtonXPBDManager
:members:
:inherited-members:
Expand Down
4 changes: 0 additions & 4 deletions docs/source/migration/migrating_deformables.rst
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,6 @@ from the physics backend package:
* - ``from isaaclab_physx.assets import DeformableObjectCfg``
- ``from isaaclab.assets import DeformableObjectCfg``


Removed Properties
^^^^^^^^^^^^^^^^^^

Expand Down Expand Up @@ -245,9 +244,6 @@ Limitations
deformable will raise a ``ValueError``.
- **Surface-specific solver properties** (``collision_pair_update_frequency``,
``collision_iteration_multiplier``) have no effect on volume deformables.
- **Newton deformables are experimental.** They are implemented in
:mod:`isaaclab_contrib.deformable` and currently target VBD-based solvers and
coupled rigid-deformable workflows.


.. _Omni Physics documentation: https://docs.omniverse.nvidia.com/kit/docs/omni_physics/110.0/dev_guide/deformables/deformable_bodies.html
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -35,8 +35,9 @@ the following solver pages:

* :doc:`mjwarp-solver` — the primary, validated solver path.
* :doc:`kamino-solver` — beta support on selected classic tasks.
* :doc:`using-vbd-solver`: experimental VBD solver for cloth and soft bodies,
with MJWarp and VBD proxy coupling through :mod:`isaaclab_contrib.coupling`.
* :doc:`using-vbd-solver`: VBD solver for cloth and soft bodies. Standalone VBD
is available through :mod:`isaaclab_newton.physics`; MJWarp and VBD proxy and
ADMM coupling is available through :mod:`isaaclab_contrib.coupling`.
* :doc:`using-mpm`: experimental implicit MPM for particle materials, including
rigid-MPM proxy coupling.

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -140,7 +140,7 @@ The MJWarp + VBD deformable manager is a concrete example:

* :class:`~isaaclab_contrib.custom_coupling.CoupledMJWarpVBDSolverCfg` stores a
``rigid_solver_cfg`` for :class:`~isaaclab_newton.physics.MJWarpSolverCfg`, a
``soft_solver_cfg`` for :class:`~isaaclab_contrib.deformable.VBDSolverCfg`,
``soft_solver_cfg`` for :class:`~isaaclab_newton.physics.VBDSolverCfg`,
and a ``coupling_mode``.
* ``NewtonCoupledMJWarpVBDManager._build_solver()`` constructs
``SolverMuJoCo`` and ``SolverVBD`` from those sub-configs.
Expand Down Expand Up @@ -232,13 +232,15 @@ Tune the coupled contact behavior before training a policy:
* Lower the arm actuator stiffness enough that the arm can respond to contact
penalties. Prefer the arm being pushed back over the gripper clipping into the
deformable.
* Tune :attr:`~isaaclab_contrib.deformable.NewtonModelCfg.soft_contact_ke`
* Tune :attr:`~isaaclab_newton.physics.NewtonSoftContactCfg.soft_contact_ke`
first. Increase it only as much as needed to prevent clipping, then adjust
:attr:`~isaaclab_contrib.deformable.NewtonModelCfg.soft_contact_mu` so the
:attr:`~isaaclab_newton.physics.NewtonSoftContactCfg.soft_contact_mu` so the
gripper can carry the object without requiring an obviously unphysical
friction value. Use
:attr:`~isaaclab_contrib.deformable.NewtonModelCfg.soft_contact_kd` for
:attr:`~isaaclab_newton.physics.NewtonSoftContactCfg.soft_contact_kd` for
stabilization if contacts chatter.
Set this configuration on the outer
:attr:`~isaaclab_newton.physics.NewtonCfg.soft_contact_cfg` field.
* Tune the ``soft_contact_*`` values together with the rigid shape contact
material, because the shape's ``ke``/``kd``/``mu`` also affect the effective
contact. Set shape defaults via
Expand All @@ -254,7 +256,7 @@ Tune the coupled contact behavior before training a policy:
increase ``particle_radius`` in the deformable material so contact is detected
earlier from a larger distance.
* If the rigid shapes still clip through the deformable, increase
:attr:`~isaaclab_contrib.deformable.VBDSolverCfg.iterations`; more VBD
:attr:`~isaaclab_newton.physics.VBDSolverCfg.iterations`; more VBD
iterations can improve contact convergence.


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -56,16 +56,17 @@ isaaclab
isaaclab_newton
^^^^^^^^^^^^^^^^

* Standalone VBD deformable solver

* Implicit Material Point Method (MPM) solver and declarative particle assets
* Fixed and capture-compatible capacity-bounded sparse MPM grids
* Standard visual-material binding for MPM particle visualization

isaaclab_contrib
^^^^^^^^^^^^^^^^

* Experimental Newton deformable objects
* VBD deformable solver (see :doc:`using-vbd-solver`)
* MJWarp and VBD proxy coupling
* Newton deformable object integration
* MJWarp and VBD proxy and ADMM coupling
* Proxy-based coupling for rigid and particle solvers, including MJWarp + MPM

The following sensors are backend-agnostic (implemented in ``isaaclab`` core)
Expand Down Expand Up @@ -112,10 +113,10 @@ Solver Coverage
* **Kamino solver**: beta. Currently validated on ``Isaac-Cartpole-Direct``,
``Isaac-Ant-Direct``, ``Isaac-Cartpole``, and ``Isaac-Ant``. See
:doc:`kamino-solver`.
* **VBD solver**: experimental, exposed through :mod:`isaaclab_contrib.deformable`
for cloth, soft-body, and cable simulation. Rigid and deformable scenes can use
proxy coupling from :mod:`isaaclab_contrib.coupling` so MJWarp advances rigid
bodies and VBD advances deformable particles. Cable objects work with standalone
* **VBD solver**: experimental, exposed through :mod:`isaaclab_newton.physics`
for standalone cloth, soft-body, and cable simulation. Rigid and deformable
scenes can use proxy or ADMM coupling from :mod:`isaaclab_contrib.coupling` so
MJWarp advances rigid bodies and VBD advances deformable particles. Cable objects work with standalone
VBD and with :class:`~isaaclab_contrib.coupling.CouplerProxyCfg` when a named VBD
entry owns the cable. See :doc:`using-vbd-solver` and
:doc:`newton-manager-abstraction`.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -132,13 +132,11 @@ Picking a Solver

Cables can **only** be simulated under Newton's VBD solver, which is the only
solver that steps ``JointType.CABLE`` joints. A cable-only scene uses a
standalone :class:`~isaaclab_contrib.deformable.VBDSolverCfg`:
standalone :class:`~isaaclab_newton.physics.VBDSolverCfg`:

.. code-block:: python

from isaaclab_newton.physics import NewtonCfg

from isaaclab_contrib.deformable import VBDSolverCfg
from isaaclab_newton.physics import NewtonCfg, VBDSolverCfg

sim_cfg = sim_utils.SimulationCfg(
dt=0.01,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,24 +5,22 @@ VBD Solver

Vertex Block Descent (VBD) is a Newton solver for cloth and soft-body
simulation. In Isaac Lab, VBD is enabled by selecting a
:class:`~isaaclab_newton.physics.NewtonCfg` whose ``solver_cfg`` is provided by
:mod:`isaaclab_contrib.deformable`.
:class:`~isaaclab_newton.physics.NewtonCfg` whose ``solver_cfg`` is a
:class:`~isaaclab_newton.physics.VBDSolverCfg`.

VBD support is experimental. The solver managers, configuration fields, and
recommended tuning values may change while Newton deformable support is under
active development. A task that works with PhysX or with Newton's MuJoCo-Warp
solver may still need deformable assets, materials, contacts, and coupling tuned
before it works well with VBD.
A task that works with PhysX or with Newton's MuJoCo-Warp solver may still need
deformable assets, materials, contacts, and coupling tuned before it works well
with VBD.

VBD is usually exposed through a task-specific physics preset rather than a
general ``newton_vbd`` preset. Deformable-only scenes can use
:class:`~isaaclab_contrib.deformable.VBDSolverCfg` directly. Robot or
rigid-body scenes can use either:
:class:`~isaaclab_newton.physics.VBDSolverCfg` directly. For robot or
rigid-body scenes, the named-entry coupling options are:

* :class:`~isaaclab_contrib.coupling.CouplerProxyCfg` for the proxy coupling
used by the core Franka tasks.
* :class:`~isaaclab_contrib.custom_coupling.CoupledMJWarpVBDSolverCfg` for the
opt-in shared-model example with custom substep ordering.
* :class:`~isaaclab_contrib.coupling.CouplerAdmmCfg` for linearized ADMM
coupling between named solver entries.

Start from a Supported Deformable Task
--------------------------------------
Expand All @@ -42,8 +40,7 @@ Start from a Supported Deformable Task

./isaaclab.sh -i tetrahedralization

Before adding VBD to a new task, first run one of the experimental Franka
deformable tasks:
Before adding VBD to a new task, first run one of the Franka deformable tasks:

.. tab-set::

Expand Down Expand Up @@ -86,9 +83,9 @@ Add a VBD Physics Preset

Tasks that support multiple physics options usually store ``SimulationCfg.physics``
as a :class:`~isaaclab_tasks.utils.hydra.PresetCfg`. For deformable Newton tasks,
the preset is a plain :class:`~isaaclab_newton.physics.NewtonCfg` whose solver
config carries :class:`~isaaclab_contrib.deformable.NewtonModelCfg` through its
:class:`~isaaclab_contrib.deformable.NewtonModelSolverCfg` base class.
the preset is a plain :class:`~isaaclab_newton.physics.NewtonCfg`. Standalone
VBD and soft-contact configuration live in :mod:`isaaclab_newton.physics`, while
proxy and ADMM coupling live in :mod:`isaaclab_contrib.coupling`.

The Franka soft-body and cloth tasks define task-specific proxy presets.

Expand All @@ -102,8 +99,8 @@ The important pieces are:
* Add :class:`~isaaclab_contrib.coupling.CouplerProxyMappingCfg` entries for the
collidable rigid bodies exposed to VBD. Leave
``integrate_with_external_rigid_solver=False`` for proxy-coupled VBD entries.
* Set the solver config's ``model_cfg`` to a
:class:`~isaaclab_contrib.deformable.NewtonModelCfg` when body-particle or
* Set the outer :attr:`~isaaclab_newton.physics.NewtonCfg.soft_contact_cfg` to a
:class:`~isaaclab_newton.physics.NewtonSoftContactCfg` when body-particle or
self-contact values need task-level tuning.
* Keep the preset at the same config path used by the task's
:class:`~isaaclab.sim.SimulationCfg`, for example ``env.sim.physics``.
Expand Down Expand Up @@ -164,8 +161,8 @@ task, validate the following before tuning solver parameters:
* Proxy-coupled robot tasks should expose only the collidable bodies needed for
deformable contact.
* Contact-heavy scenes usually need task-specific ``num_substeps``,
:class:`~isaaclab_contrib.deformable.VBDSolverCfg`, and
:class:`~isaaclab_contrib.deformable.NewtonModelCfg` values. Start from the
:class:`~isaaclab_newton.physics.VBDSolverCfg`, and
:class:`~isaaclab_newton.physics.NewtonSoftContactCfg` values. Start from the
Franka soft-body or cloth preset that most closely resembles the scene.
* Use a small visual smoke test before training. Confirm that the deformable
spawns, renders, deforms, and contacts rigid bodies as expected.
Expand All @@ -174,7 +171,7 @@ VBD Solver Parameters
---------------------

The following fields are specific to
:class:`~isaaclab_contrib.deformable.VBDSolverCfg`. They are grouped by the part
:class:`~isaaclab_newton.physics.VBDSolverCfg`. They are grouped by the part
of the solver they affect.

Core Solve
Expand Down Expand Up @@ -258,8 +255,8 @@ coupling when deformable contact is localized to selected rigid bodies.

.. _newton-vbd-proxy-coupling:

Proxy-Coupled MJWarp + VBD
--------------------------
Coupled MJWarp + VBD
--------------------

:class:`~isaaclab_contrib.coupling.CouplerProxyCfg` is the coupling used by
the core Franka tasks. It partitions the model between named solver entries and
Expand Down Expand Up @@ -347,6 +344,11 @@ Key proxy-specific parameters:
Body selectors must use full Newton body-label regexes, such as
``/World/envs/env_.*/Robot``. Proxy mappings also accept raw Newton body ids.

:class:`~isaaclab_contrib.coupling.CouplerAdmmCfg` provides linearized ADMM
coupling between the same named solver entries. Set ``contact_pairs`` to select
entry pairs explicitly, or leave it as ``None`` to detect every distinct pair.
Use ``iterations`` and ``rho`` to tune the ADMM solve.

Try the demo:

.. tab-set::
Expand Down Expand Up @@ -378,8 +380,9 @@ Contact and Material Parameters
Contact Model
^^^^^^^^^^^^^

:class:`~isaaclab_contrib.deformable.NewtonModelCfg` applies contact parameters
to the finalized Newton model:
:class:`~isaaclab_newton.physics.NewtonSoftContactCfg` applies contact parameters
to the finalized Newton model through
:attr:`~isaaclab_newton.physics.NewtonCfg.soft_contact_cfg`:

.. list-table::
:header-rows: 1
Expand All @@ -390,7 +393,7 @@ to the finalized Newton model:
* - ``soft_contact_ke``
- Default: ``1.0e3`` [N/m]. Stiffness for body-particle and particle self-contact. Increase it to reduce clipping through rigid shapes or through other deformable particles. If it is too high, the object can stop visibly deforming or require more VBD iterations and substeps.
* - ``soft_contact_kd``
- Default: ``1.0e-2`` [N*s/m]. Contact damping. Increase it to reduce chatter or bouncing. Too much damping can make contact response sticky or overdamped.
- Default: ``1.0e1`` [N*s/m]. Contact damping. Increase it to reduce chatter or bouncing. Too much damping can make contact response sticky or overdamped.
* - ``soft_contact_mu``
- Default: ``0.5``. Friction coefficient for body-particle and particle self-contact. Increase it when a gripper cannot carry the deformable object without slipping.

Expand Down Expand Up @@ -467,12 +470,12 @@ Use the following sequence when bringing up a new VBD task:
the expected range without rigid contact.
5. Increase ``num_substeps`` or decrease ``dt`` if the object is unstable before
increasing stiffness further.
6. Increase :attr:`~isaaclab_contrib.deformable.VBDSolverCfg.iterations` when
6. Increase :attr:`~isaaclab_newton.physics.VBDSolverCfg.iterations` when
contacts or stiff materials do not converge within a substep.
7. Tune :attr:`~isaaclab_contrib.deformable.NewtonModelCfg.soft_contact_ke` to
7. Tune :attr:`~isaaclab_newton.physics.NewtonSoftContactCfg.soft_contact_ke` to
reduce rigid/deformable clipping, then tune
:attr:`~isaaclab_contrib.deformable.NewtonModelCfg.soft_contact_mu` for grip
and :attr:`~isaaclab_contrib.deformable.NewtonModelCfg.soft_contact_kd` for
:attr:`~isaaclab_newton.physics.NewtonSoftContactCfg.soft_contact_mu` for grip
and :attr:`~isaaclab_newton.physics.NewtonSoftContactCfg.soft_contact_kd` for
chatter.
8. Enable self-contact only after body-particle contact is stable, then tune
``particle_self_contact_radius`` for active self-contact thickness,
Expand Down
3 changes: 2 additions & 1 deletion docs/source/tutorials/01_assets/run_deformable_object.rst
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,8 @@ surface deformables (cloth), see the deformable demo at ``scripts/demos/deformab

The deformable object API and schema define/modify functions are shared across backends, while deformable
property and material configuration classes are backend-specific. PhysX simulates soft bodies using the Finite
Element Method (FEM); the Newton experimental backend uses VBD-based deformable support from
Element Method (FEM); the Newton experimental backend uses the core VBD solver from
:mod:`isaaclab_newton.physics` with the deformable object integration from
:mod:`isaaclab_contrib.deformable`.
The volume deformable comprises of two tetrahedral meshes -- a simulation mesh and a collision mesh. The simulation
mesh is used to simulate the deformations of the soft body, while the collision mesh is used to detect collisions
Expand Down
4 changes: 2 additions & 2 deletions scripts/demos/deformables.py
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@
from isaaclab.assets import DeformableObject

if args_cli.physics == "newton_vbd":
from isaaclab_contrib.deformable.newton_manager_cfg import NewtonModelCfg # isort:skip
from isaaclab_newton.physics import NewtonSoftContactCfg # isort:skip
from isaaclab_newton.sim.schemas import NewtonDeformableBodyPropertiesCfg as DeformableBodyPropertiesCfg
from isaaclab_newton.sim.spawners.materials import (
NewtonDeformableBodyMaterialCfg as VolumeDeformableMaterialCfg,
Expand Down Expand Up @@ -270,7 +270,7 @@ def main():
physics_cfg.solver_cfg.particle_self_contact_radius = 0.0001
physics_cfg.solver_cfg.particle_self_contact_margin = 0.1
physics_cfg.num_substeps = 4
physics_cfg.solver_cfg.model_cfg = NewtonModelCfg(
physics_cfg.soft_contact_cfg = NewtonSoftContactCfg(
soft_contact_ke=1.0e5,
soft_contact_kd=1.0e0,
soft_contact_mu=0.01,
Expand Down
Loading
Loading