Skip to content
Open
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
2 changes: 1 addition & 1 deletion source/isaaclab/config/extension.toml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
[package]

# Note: Semantic Versioning is used: https://semver.org/
version = "0.46.2"
version = "0.46.3"

# Description
title = "Isaac Lab framework for Robot Learning"
Expand Down
11 changes: 11 additions & 0 deletions source/isaaclab/docs/CHANGELOG.rst
Original file line number Diff line number Diff line change
@@ -1,6 +1,17 @@
Changelog
---------

0.46.3 (2025-09-17)
~~~~~~~~~~~~~~~~~~~

Changed
^^^^^^^

* Exposed parameter :attr:`~isaaclab.sim.spawners.PhysxCfg.solve_articulation_contact_last`
to configure USD attribute ``physxscene:solveArticulationContactLast``. This parameter may
help improve solver stability with grippers, which previously required reducing simulation time-steps.
:class:`~isaaclab.sim.spawners.PhysxCfg`


0.46.2 (2025-09-13)
~~~~~~~~~~~~~~~~~~~
Expand Down
20 changes: 20 additions & 0 deletions source/isaaclab/isaaclab/sim/simulation_cfg.py
Original file line number Diff line number Diff line change
Expand Up @@ -160,6 +160,26 @@ class PhysxCfg:
gpu_max_particle_contacts: int = 2**20
"""Size of particle contacts stream buffer allocated in pinned host memory. Default is 2 ** 20."""

solve_articulation_contact_last: bool = False
"""Changes the ordering inside the articulation solver. Default is False.

PhysX employs a strict ordering for handling constraints in an articulation. The outcome of
each constraint resolution modifies the joint and associated link speeds. However, the default
ordering may not be ideal for gripping scenarios because the solver favours the contraint
types that are resolved last. This is particularly true of stiff constraint systems that are hard
to resolve without resorting to vanishingly small simulation timesteps.

With dynamic contact resolution being such an important part of gripping, it may make
more sense to solve dynamic contact towards the end of the solver rather than at the
beginning. This parameter modifies the default ordering to enable this change.

For more information, please check `here <https://docs.omniverse.nvidia.com/kit/docs/omni_physics/107.3/dev_guide/guides/articulation_stability_guide.html#articulation-solver-order>`__.

.. versionadded:: v2.3
This parameter is only available with Isaac Sim 5.1.

"""


@configclass
class RenderCfg:
Expand Down
6 changes: 5 additions & 1 deletion source/isaaclab/isaaclab/sim/simulation_context.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@
from isaacsim.core.utils.carb import get_carb_setting, set_carb_setting
from isaacsim.core.utils.viewports import set_camera_view
from isaacsim.core.version import get_version
from pxr import Gf, PhysxSchema, Usd, UsdPhysics
from pxr import Gf, PhysxSchema, Sdf, Usd, UsdPhysics

from isaaclab.sim.utils import create_new_stage_in_memory, use_stage

Expand Down Expand Up @@ -758,6 +758,10 @@ def _set_additional_physx_params(self):
physx_scene_api.CreateGpuCollisionStackSizeAttr(self.cfg.physx.gpu_collision_stack_size)
# -- Improved determinism by PhysX
physx_scene_api.CreateEnableEnhancedDeterminismAttr(self.cfg.physx.enable_enhanced_determinism)
# -- Set solve_articulation_contact_last by add attribute to the PhysxScene prim, and add attribute there.
physx_prim = physx_scene_api.GetPrim()
if self.cfg.physx.solve_articulation_contact_last:
Copy link
Contributor

Choose a reason for hiding this comment

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

what is parameter is False? Shouldn't that be set as well?

Copy link
Collaborator Author

Choose a reason for hiding this comment

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

good point, the small issue with set to false is that we break the backward compatibility, I think such flag does not exist pre isaac-sim 5.1

Copy link
Contributor

Choose a reason for hiding this comment

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

let's test to see if it will break 5.0, we may want to add in a check if that's the case

physx_prim.CreateAttribute("physxScene:solveArticulationContactLast", Sdf.ValueTypeNames.Bool).Set(True)

# -- Gravity
# note: Isaac sim only takes the "up-axis" as the gravity direction. But physics allows any direction so we
Expand Down
Loading