Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
46 commits
Select commit Hold shift + click to select a range
c62f718
Add show collision mesh toggle to Newton viewer
vidurv-nvidia Apr 3, 2026
d232e02
Update source/isaaclab_visualizers/isaaclab_visualizers/newton/newton…
vidurv-nvidia Apr 3, 2026
0d0d99a
Update source/isaaclab_visualizers/isaaclab_visualizers/newton/newton…
vidurv-nvidia Apr 3, 2026
9e6d2ff
Update newton_visualizer_cfg.py
vidurv-nvidia Apr 3, 2026
2ec08d9
Remove duplicate variable definitions in NewtonVisualizerCfg
vidurv-nvidia Apr 3, 2026
82e14f9
Add show inertia boxes toggle to Newton viewer
vidurv-nvidia Apr 3, 2026
803da43
Add SDF and Hydroelastic collisions in ISaacLab
vidurv-nvidia Apr 2, 2026
c195a2a
Integrate Octi's changes to the collision pipline creation from https…
vidurv-nvidia Apr 2, 2026
2331815
Add unit tests for SDF and Hydroelastic configuration
vidurv-nvidia Apr 2, 2026
9a2b417
Update source/isaaclab_newton/isaaclab_newton/physics/newton_manager.py
vidurv-nvidia Apr 3, 2026
b8afb8b
Move the import to the top level
vidurv-nvidia Apr 3, 2026
114c25a
Make config variable access consistent
vidurv-nvidia Apr 3, 2026
9aaeff8
Update body and shape pattern matching
vidurv-nvidia Apr 3, 2026
e48fbf6
Apply SDF mesh conversion before the enviorment is replicated
vidurv-nvidia Apr 3, 2026
a0ac249
Raise TypeError for invalid collision_cfg instead of silent fallback
vidurv-nvidia Apr 3, 2026
91cf1b9
Guard against None PhysicsManager._cfg in _apply_sdf_config
vidurv-nvidia Apr 3, 2026
b7c2c76
Fix lint and formatting issues from pre-commit
vidurv-nvidia Apr 3, 2026
bd1189d
Merge branch 'vidur/feature/newton-viewer-collision' into vidur/featu…
vidurv-nvidia Apr 7, 2026
9b112c7
Add show visual geometries toggle to Newton viewer
vidurv-nvidia Apr 7, 2026
3fca0dc
Fix SDF config bugs: skip redundant rebuilds, respect hydro patterns,…
vidurv-nvidia Apr 8, 2026
d827975
Unify physics randomization events across PhysX and Newton
vidurv-nvidia Apr 10, 2026
532df39
Add num_shapes_per_body to Newton RigidObject
vidurv-nvidia Apr 10, 2026
eec33cc
Bump isaaclab_newton to 0.5.11 for IK integration
vidurv-nvidia Apr 21, 2026
4a73334
Scaffold isaaclab_newton.controllers package
vidurv-nvidia Apr 21, 2026
cae5913
Scaffold isaaclab_newton.envs.mdp.actions package
vidurv-nvidia Apr 21, 2026
b12251d
Add single-arm IK model builder for Newton IK
vidurv-nvidia Apr 21, 2026
7a4f298
Add NewtonIKControllerCfg dataclass
vidurv-nvidia Apr 21, 2026
92bc1c0
Add NewtonInverseKinematicsActionCfg dataclass
vidurv-nvidia Apr 21, 2026
17edbe0
Add NewtonIKController skeleton with batched solver
vidurv-nvidia Apr 21, 2026
23e6335
Apply pre-commit formatting to controllers code
vidurv-nvidia Apr 21, 2026
cd43066
Wire set_command to push EE targets into IK objectives
vidurv-nvidia Apr 21, 2026
61f5703
Add NewtonInverseKinematicsAction term
vidurv-nvidia Apr 21, 2026
5f2152e
Implement batched compute for NewtonIKController
vidurv-nvidia Apr 21, 2026
54b57a1
Fix IK action term joint-q shape handling
vidurv-nvidia Apr 21, 2026
179847a
Add reset and perturbed-target accuracy test
vidurv-nvidia Apr 21, 2026
ecb2d3a
Add Franka reach env with Newton IK relative-pose action
vidurv-nvidia Apr 21, 2026
3c3a75b
Fix IK model builder to resolve remote USD paths to local cache
vidurv-nvidia Apr 21, 2026
85a29e2
Regenerate isaaclab_newton API docs for Newton IK
vidurv-nvidia Apr 21, 2026
0b56f29
Tune Newton IK knobs and match PhysX action scale
vidurv-nvidia Apr 21, 2026
d6ee0f7
Add rsl_rl entry points to Franka IK-Abs and IK-Rel envs
vidurv-nvidia Apr 21, 2026
34461cd
Raise NewtonIKControllerCfg position_weight default to 100
vidurv-nvidia Apr 21, 2026
f7543d9
Tune Newton IK to single-step with higher damping for RL tracking
vidurv-nvidia Apr 21, 2026
8b090c7
Balance Newton IK rotation weight with position weight
vidurv-nvidia Apr 21, 2026
2a02dd0
Tighten Newton IK orientation tracking with 2 iters and rw=100
vidurv-nvidia Apr 21, 2026
ad4505e
Set Newton IK to iter=2 with unit-balanced rotation weight
vidurv-nvidia Apr 22, 2026
39edc49
Revert Newton IK to iter=1 config (Pareto-best for reach)
vidurv-nvidia Apr 22, 2026
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: 2 additions & 0 deletions docs/source/api/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -152,6 +152,7 @@ The following modules are available in the ``isaaclab_newton`` extension:

assets
cloner
controllers
physics
renderers
scene_data_providers
Expand All @@ -162,6 +163,7 @@ The following modules are available in the ``isaaclab_newton`` extension:

lab_newton/isaaclab_newton.assets
lab_newton/isaaclab_newton.cloner
lab_newton/isaaclab_newton.controllers
lab_newton/isaaclab_newton.physics
lab_newton/isaaclab_newton.renderers
lab_newton/isaaclab_newton.scene_data_providers
Expand Down
4 changes: 4 additions & 0 deletions docs/source/api/lab_newton/isaaclab_newton.controllers.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
isaaclab\_newton.controllers
============================

.. automodule:: isaaclab_newton.controllers
2 changes: 2 additions & 0 deletions source/isaaclab/isaaclab/envs/mdp/__init__.pyi
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ __all__ = [
"randomize_physics_scene_gravity",
"randomize_rigid_body_collider_offsets",
"randomize_rigid_body_com",
"randomize_rigid_body_inertia",
"randomize_rigid_body_mass",
"randomize_rigid_body_material",
"randomize_rigid_body_scale",
Expand Down Expand Up @@ -195,6 +196,7 @@ from .events import (
randomize_physics_scene_gravity,
randomize_rigid_body_collider_offsets,
randomize_rigid_body_com,
randomize_rigid_body_inertia,
randomize_rigid_body_mass,
randomize_rigid_body_material,
randomize_rigid_body_scale,
Expand Down
782 changes: 621 additions & 161 deletions source/isaaclab/isaaclab/envs/mdp/events.py

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion source/isaaclab_newton/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.5.9"
version = "0.5.11"

# Description
title = "Newton simulation interfaces for IsaacLab core package"
Expand Down
45 changes: 45 additions & 0 deletions source/isaaclab_newton/docs/CHANGELOG.rst
Original file line number Diff line number Diff line change
@@ -1,6 +1,51 @@
Changelog
---------

0.5.11 (2026-04-21)
~~~~~~~~~~~~~~~~~~~

Added
^^^^^

* Initial scaffolding for Newton inverse-kinematics integration.
* Added :class:`~isaaclab_newton.controllers.IKModelInfo` and
:func:`~isaaclab_newton.controllers.build_single_arm_ik_model` for
constructing a single-arm Newton model from an IsaacLab asset cfg.
* Added :class:`~isaaclab_newton.controllers.NewtonIKControllerCfg`
configuration dataclass for the Newton inverse-kinematics controller.
* Added :class:`~isaaclab_newton.controllers.NewtonIKController` skeleton
with batched IK solver construction across all envs.
* Added :class:`~isaaclab_newton.envs.mdp.actions.NewtonInverseKinematicsActionCfg`
configuration dataclass for the Newton IK action term.
* Added :class:`~isaaclab_newton.envs.mdp.actions.NewtonInverseKinematicsAction`
action term that drives Newton's batched IK across all envs in one fused
pass per env step.
* Added :meth:`~isaaclab_newton.controllers.NewtonIKController.compute`
for batched IK solving across all envs in one fused pass.
* Added Gym task ``Isaac-Reach-Franka-Newton-IK-Rel-v0`` (and ``Isaac-Reach-Franka-Newton-IK-Rel-Play-v0``)
using Newton physics with the Newton IK action term for relative-pose EE
control.


0.5.10 (2026-04-02)
~~~~~~~~~~~~~~~~~~~

Added
^^^^^

* Added :class:`~isaaclab_newton.physics.NewtonCollisionPipelineCfg` for configuring
Newton's collision pipeline parameters (broad phase, contact limits, triangle pairs).
Set via :attr:`~isaaclab_newton.physics.NewtonCfg.collision_cfg`.
* Added :class:`~isaaclab_newton.physics.SDFCfg` for configuring SDF-based mesh
collisions via Newton's ``mesh.build_sdf()`` API. Supports per-body and per-shape
regex pattern matching, per-pattern resolution overrides, and optional creation of
collision shapes from visual meshes.
* Added :class:`~isaaclab_newton.physics.HydroelasticCfg` for distributed surface
contacts computed via SDF overlap with marching cubes.
* Added SDF pattern skip in the Newton cloner to preserve original triangle
meshes for shapes that will use SDF collision.


0.5.9 (2026-03-16)
~~~~~~~~~~~~~~~~~~

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,19 @@ def root_view(self) -> ArticulationView:
"""
return self._root_view

@property
def num_shapes_per_body(self) -> list[int]:
"""Number of collision shapes per body in the rigid object.

Returns a list where each element is the number of shapes for
the corresponding body. Cached after first access.
"""
if not hasattr(self, "_num_shapes_per_body"):
self._num_shapes_per_body = []
for shapes in self._root_view.body_shapes:
self._num_shapes_per_body.append(len(shapes))
return self._num_shapes_per_body

@property
def instantaneous_wrench_composer(self) -> WrenchComposer:
"""Instantaneous wrench composer.
Expand Down
43 changes: 41 additions & 2 deletions source/isaaclab_newton/isaaclab_newton/cloner/newton_replicate.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,17 @@

from __future__ import annotations

import re
from collections.abc import Callable

import torch
import warp as wp
from newton import ModelBuilder, solvers
from newton import GeoType, ModelBuilder, solvers
from newton._src.usd.schemas import SchemaResolverNewton, SchemaResolverPhysx

from pxr import Usd, UsdGeom

from isaaclab.physics import PhysicsManager
from isaaclab.physics.scene_data_requirements import VisualizerPrebuiltArtifacts

from isaaclab_newton.physics import NewtonManager
Expand Down Expand Up @@ -62,6 +64,17 @@ def _build_newton_builder_from_mapping(
# The prototype is built from env_0 in absolute world coordinates.
# add_builder xforms are deltas from env_0 so positions don't get double-counted.
env0_pos = positions[0]

# SDF collision requires original triangle meshes for mesh.build_sdf().
# Convex hull approximation destroys the source geometry, so shapes
# matching SDF patterns must be excluded from approximation here.
# _apply_sdf_config() builds the SDF on each prototype after approximation.
cfg = PhysicsManager._cfg
sdf_cfg = getattr(cfg, "sdf_cfg", None) if cfg is not None else None
body_pats = [re.compile(x) for x in sdf_cfg.body_patterns] if sdf_cfg and sdf_cfg.body_patterns else None
shape_pats = [re.compile(x) for x in sdf_cfg.shape_patterns] if sdf_cfg and sdf_cfg.shape_patterns else None
has_sdf_patterns = body_pats is not None or shape_pats is not None

protos: dict[str, ModelBuilder] = {}
for src_path in sources:
p = ModelBuilder(up_axis=up_axis)
Expand All @@ -74,7 +87,33 @@ def _build_newton_builder_from_mapping(
schema_resolvers=schema_resolvers,
)
if simplify_meshes:
p.approximate_meshes("convex_hull", keep_visual_shapes=True)
if has_sdf_patterns:
sdf_bodies: set[int] = set()
if body_pats is not None:
for bi in range(len(p.body_label)):
if any(pat.search(p.body_label[bi]) for pat in body_pats):
sdf_bodies.add(bi)

approx_indices = []
for i in range(len(p.shape_type)):
if p.shape_type[i] != GeoType.MESH:
continue
# Skip shapes that will use SDF (matched by body or shape pattern)
if p.shape_body[i] in sdf_bodies:
continue
if shape_pats is not None:
lbl = p.shape_label[i] if i < len(p.shape_label) else ""
if any(pat.search(lbl) for pat in shape_pats):
continue
approx_indices.append(i)
if approx_indices:
p.approximate_meshes("convex_hull", shape_indices=approx_indices, keep_visual_shapes=True)
else:
p.approximate_meshes("convex_hull", keep_visual_shapes=True)
# Build SDF on prototype before add_builder copies it N times.
# Mesh objects are shared by reference, so SDF is built once and
# all environments inherit it.
NewtonManager._apply_sdf_config(p)
protos[src_path] = p

# create a separate world for each environment (heterogeneous spawning)
Expand Down
17 changes: 17 additions & 0 deletions source/isaaclab_newton/isaaclab_newton/controllers/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# Copyright (c) 2022-2026, The Isaac Lab Project Developers (https://github.com/isaac-sim/IsaacLab/blob/main/CONTRIBUTORS.md).
# All rights reserved.
#
# SPDX-License-Identifier: BSD-3-Clause

"""Newton-native controllers for IsaacLab (IK, etc.)."""

from .newton_ik import NewtonIKController
from .newton_ik_cfg import NewtonIKControllerCfg
from .newton_ik_model_builder import IKModelInfo, build_single_arm_ik_model

__all__ = [
"IKModelInfo",
"NewtonIKController",
"NewtonIKControllerCfg",
"build_single_arm_ik_model",
]
Loading