Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
85 commits
Select commit Hold shift + click to select a range
9afd8fc
Add RIGID_BODY_* TensorType aliases
AntoineRichard Apr 28, 2026
4b3503b
Relocate shared Warp kernels to isaaclab_ovphysx.assets.kernels
AntoineRichard Apr 28, 2026
5f8c4c6
Add asset_kind='rigid_object' mode to MockOvPhysxBindingSet
AntoineRichard Apr 28, 2026
65084f7
Scaffold OVPhysX RigidObjectData skeleton
AntoineRichard Apr 28, 2026
0a79c66
Fix RigidObjectData defaults and is_primed gating
AntoineRichard Apr 28, 2026
3cb5de1
Implement RigidObjectData root-state properties
AntoineRichard Apr 28, 2026
b2afe59
Reset buffer timestamps in _invalidate_caches
AntoineRichard Apr 28, 2026
95dc4fa
Implement body-state and body-frame derived properties
AntoineRichard Apr 28, 2026
1e9e9aa
Fix projected_gravity_b test to use unit-vector gravity
AntoineRichard Apr 28, 2026
5963cfe
Implement RigidObjectData body mass/inertia/COM properties
AntoineRichard Apr 28, 2026
9a69088
Scaffold OVPhysX RigidObject skeleton
AntoineRichard Apr 28, 2026
af2e8a9
Apply Marco's RIGID_BODY_* contract corrections
AntoineRichard Apr 28, 2026
0ec4611
Add RigidObject _create_buffers and _process_cfg
AntoineRichard Apr 28, 2026
af529eb
Implement RigidObject root pose and velocity writers
AntoineRichard Apr 28, 2026
fed5d23
Implement RigidObject mass/COM/inertia setters
AntoineRichard Apr 28, 2026
6cb0c36
Implement RigidObject.write_data_to_sim wrench application
AntoineRichard Apr 28, 2026
f10f59c
Implement RigidObject lifecycle methods
AntoineRichard Apr 28, 2026
bbad12b
Export RigidObject and RigidObjectData publicly
AntoineRichard Apr 28, 2026
5c07601
Add OVPhysX backend to test_rigid_object_iface
AntoineRichard Apr 28, 2026
0a950bd
Add OVPhysX preset to Allegro hand env
AntoineRichard Apr 28, 2026
6b16fe9
Bump isaaclab_ovphysx to 0.2.0 for RigidObject
AntoineRichard Apr 28, 2026
db27e50
Drop RIGID_BODY_ACCELERATION dependency, FD acc from velocity
AntoineRichard Apr 28, 2026
a07c425
Fix stale-buffer bug in body_com_pose_b lazy read
AntoineRichard Apr 28, 2026
6e81211
Add kitless guard to test_rigid_object_iface
AntoineRichard Apr 28, 2026
cd38c46
Fix shape mismatch in 1-D body-property setter writes
AntoineRichard Apr 28, 2026
b3b93b3
Replace mock test_rigid_object with PhysX-copy kitless adapter
AntoineRichard Apr 28, 2026
b9eb426
Add kitless real-OvPhysxManager warmup + load tests
AntoineRichard Apr 28, 2026
e320fe1
Rewrite test_rigid_object to use real SimulationContext + Nucleus assets
AntoineRichard Apr 28, 2026
45557cd
Fix RigidObject._initialize_impl swallows on body_names and device
AntoineRichard Apr 28, 2026
aa0ee90
Match Newton's pattern in external_force_on_single_body
AntoineRichard Apr 28, 2026
7153229
Address W1 audit fixes: is_primed, naming, body_names, set_coms reshape
AntoineRichard Apr 29, 2026
e762ab5
Revert RigidObject.reset auto-write to match PhysX/Newton
AntoineRichard Apr 29, 2026
1e3dcf8
Port test_external_force_at_position to PhysX/Newton pattern
AntoineRichard Apr 29, 2026
b1a841e
Derive root_link_vel_w from root_com_vel_w via lever-arm kernel
AntoineRichard Apr 29, 2026
231e9be
Implement deprecated state-concat properties on RigidObjectData
AntoineRichard Apr 29, 2026
482e7af
Address remaining audit investigates: docstring, demotions, removal
AntoineRichard Apr 29, 2026
5e09119
Reorganize RigidObjectData to match PhysX/Newton structure
AntoineRichard Apr 29, 2026
b0532f2
Polish RigidObject docstrings + rename _write_root_state
AntoineRichard Apr 29, 2026
ed30c2c
Add docstrings to every kernel in isaaclab_ovphysx.assets.kernels
AntoineRichard Apr 29, 2026
7adf3b6
Polish test_rigid_object.py: drop gates, GPU coverage, docstring cleanup
AntoineRichard Apr 29, 2026
66df142
Unify _configure_physx_scene_prim across CPU and GPU
AntoineRichard Apr 29, 2026
2bd2752
Align test_rigid_object.py 1-to-1 with isaaclab_physx
AntoineRichard Apr 29, 2026
f06e64b
Use session-scoped sim fixture for rigid-object tests
AntoineRichard Apr 29, 2026
0887d2d
Mirror PhysX/Newton patterns in OVPhysX RigidObject
AntoineRichard Apr 29, 2026
8b180fb
Update RigidObject tests for new contract; document two-pass CI
AntoineRichard Apr 29, 2026
e2b2f55
Compact 0.2.15 changelog entry
AntoineRichard Apr 30, 2026
588c1c8
Squash 0.2.x changelog entries into a single 0.2.15 release
AntoineRichard Apr 30, 2026
d74e904
Drop full_data and dead helpers from OVPhysX RigidObject
AntoineRichard Apr 30, 2026
5cdc178
Cache flat wrench-buffer view in _create_buffers
AntoineRichard Apr 30, 2026
abbeda4
Trim kitless module stubs in iface test guards
AntoineRichard Apr 30, 2026
b340a55
Fix OVPhysX iface fixture to mirror PhysX/Newton setup
AntoineRichard Apr 30, 2026
08180d3
Move ovphysx lifecycle workaround into OvPhysxManager
AntoineRichard May 5, 2026
8bc3a4a
Address PR #5426 review feedback
AntoineRichard May 5, 2026
26a442b
Merge branch 'develop' into antoiner/feat/ovphysx_rigidobject
AntoineRichard May 5, 2026
c453822
Switch isaaclab_ovphysx PR changelog to fragments
AntoineRichard May 5, 2026
658e73c
Make OVPhysX RigidObject._get_binding strict
AntoineRichard May 5, 2026
cf1adf0
Address PR review on RigidObjectData
AntoineRichard May 5, 2026
1b62917
Convert IsaacLab regex prim-path to wheel glob in RigidObject
AntoineRichard May 6, 2026
e164b65
Bump rigid-object changelog fragment to major tier
AntoineRichard May 6, 2026
f2e5e2a
[OVPHYSX] Articulation rewrite (data class + asset class + kernels)
AntoineRichard May 5, 2026
18c90dc
Wire OVPhysX preset into Allegro Repose direct task
AntoineRichard May 6, 2026
edc83fd
Merge branch 'develop' into antoiner/feat/ovphysx_rigidobject
kellyguo11 May 11, 2026
08bb545
Merge branch 'develop' into antoiner/feat/ovphysx_articulation
kellyguo11 May 11, 2026
1ff4c21
Align OVPhysX RigidObject layout with PhysX/Newton
AntoineRichard May 11, 2026
0ef8d77
Align OVPhysX articulation kernels with PhysX style
AntoineRichard May 11, 2026
22c4698
Reorder Articulation properties and trim dev cruft
AntoineRichard May 11, 2026
f21cd1f
Align ArticulationData class docstring and __init__ comments
AntoineRichard May 11, 2026
f8dd86f
Align Articulation module/class docstring with PhysX reference
AntoineRichard May 11, 2026
0e00d64
Use PhysX-style class docstring for Articulation
AntoineRichard May 11, 2026
d6e9187
Merge branch 'cp/rigidobject' into cp/articulation
AntoineRichard May 12, 2026
e50ec6e
Fix stale articulation reads with FK update in step()
AntoineRichard May 12, 2026
375f31d
Allocate _body_incoming_joint_wrench_buf in ArticulationData
AntoineRichard May 12, 2026
3abc6a5
Update tests for renamed JointDrive cfg field names
AntoineRichard May 12, 2026
5c5a5cd
Refresh forward kinematics in body_link_pose_w getter
AntoineRichard May 12, 2026
53cf7c1
Merge branch 'develop' into antoiner/feat/ovphysx_rigidobject
AntoineRichard May 12, 2026
922cd72
Skip test_rigid_object.py when the ovphysx wheel is absent
AntoineRichard May 12, 2026
2f7ea69
Merge branch 'cp/rigidobject' into cp/articulation
AntoineRichard May 12, 2026
1d850ee
Merge remote-tracking branch 'origin/develop' into antoiner/feat/ovph…
AntoineRichard May 13, 2026
98c0734
Simplify ArticulationData constructor
AntoineRichard May 13, 2026
3430279
Skip test_articulation.py when the ovphysx wheel is absent
AntoineRichard May 13, 2026
4aeb4d6
Mock ovphysx wheel during sphinx autodoc
AntoineRichard May 13, 2026
7965b72
Merge branch 'develop' into antoiner/feat/ovphysx_articulation
kellyguo11 May 14, 2026
8429d54
Merge branch 'develop' into antoiner/feat/ovphysx_articulation
AntoineRichard May 14, 2026
311604b
Merge branch 'develop' into antoiner/feat/ovphysx_articulation
kellyguo11 May 14, 2026
0ca998c
Merge branch 'develop' into antoiner/feat/ovphysx_articulation
kellyguo11 May 15, 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
1 change: 1 addition & 0 deletions docs/conf.py
Original file line number Diff line number Diff line change
Expand Up @@ -170,6 +170,7 @@
"omni.client",
"omni.physx",
"omni.physics",
"ovphysx",
"usdrt",
"pxr.PhysxSchema",
"pxr.PhysicsSchemaTools",
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
Test-only: update the OVPhysX iface test factory in
``source/isaaclab/test/assets/test_articulation_iface.py`` to match the
simplified :class:`isaaclab_ovphysx.assets.ArticulationData` constructor
signature. No isaaclab core API change.
15 changes: 7 additions & 8 deletions source/isaaclab/test/assets/test_articulation_iface.py
Original file line number Diff line number Diff line change
Expand Up @@ -287,21 +287,20 @@ def create_ovphysx_articulation(
object.__setattr__(articulation, "_num_fixed_tendons", num_fixed_tendons)
object.__setattr__(articulation, "_num_spatial_tendons", num_spatial_tendons)

# Create ArticulationData
# Create ArticulationData; counts come from the bindings, names are set after.
data = OvPhysxArticulationData(mock_bindings.bindings, device)
data._num_instances = num_instances
data._num_joints = num_joints
data._num_bodies = num_bodies
data._num_fixed_tendons = num_fixed_tendons
data._num_spatial_tendons = num_spatial_tendons
data._is_fixed_base = False
data.body_names = body_names
data.joint_names = joint_names
data.fixed_tendon_names = fixed_tendon_names
data.spatial_tendon_names = spatial_tendon_names
data._create_buffers()
data._is_fixed_base = False
object.__setattr__(articulation, "_data", data)

# Allocate the articulation-side index/mask caches and wrench buffer that
# _initialize_impl would normally populate. Wrench composers created here
# are immediately overwritten by the mocks below.
articulation._create_buffers()

# Wrench composers
mock_inst_wrench = MockWrenchComposer(articulation)
mock_perm_wrench = MockWrenchComposer(articulation)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
Added
^^^^^

* Added :class:`~isaaclab_ovphysx.assets.Articulation` and
:class:`~isaaclab_ovphysx.assets.ArticulationData` for multi-DOF articulated
robots against the OVPhysX backend, satisfying the
:class:`~isaaclab.assets.BaseArticulation` and
:class:`~isaaclab.assets.BaseArticulationData` contracts. Public surface
matches the PhysX/Newton conventions: kwarg-only ``write_*_to_sim_index`` /
``write_*_to_sim_mask`` writers and ``set_*_index`` / ``set_*_mask`` setters
for root state, joint state, joint properties, body properties, joint
command targets, fixed/spatial tendon properties, and external wrenches via
:attr:`~isaaclab_ovphysx.assets.Articulation.instantaneous_wrench_composer`
/ :attr:`~isaaclab_ovphysx.assets.Articulation.permanent_wrench_composer`.
The full IsaacLab actuator pipeline (``compute`` /
``_apply_actuator_model`` / ``_process_actuators_cfg``) is implemented on
top of the wheel's ``DOF_ACTUATION_FORCE`` /
``DOF_POSITION_TARGET`` / ``DOF_VELOCITY_TARGET`` bindings.
* Added articulation-specific Warp kernels in
:mod:`isaaclab_ovphysx.assets.articulation.kernels`: soft-limit refresh,
default-joint-pos clamp, friction-component scatter (index + mask
variants). Six articulation kernels were also folded into the shared
:mod:`isaaclab_ovphysx.assets.kernels` module for reuse with
:class:`~isaaclab_ovphysx.assets.RigidObject` and
:class:`~isaaclab_ovphysx.assets.RigidObjectCollection`.
* Added init-time validation in
:meth:`~isaaclab_ovphysx.assets.Articulation._initialize_impl` that raises
``RuntimeError`` when ``cfg.prim_path`` resolves to no
``UsdPhysics.ArticulationRootAPI`` prim or to multiple roots, and
``ValueError`` (via :meth:`_validate_cfg`) when any default joint
position is outside ``[lower, upper]`` or any default joint velocity
exceeds the per-joint maximum. Mirrors the PhysX backend.
* Added support for ``cfg.articulation_root_prim_path`` in
:meth:`~isaaclab_ovphysx.assets.Articulation._initialize_impl`: when the
user supplies an explicit subpath the binding pattern is extended
directly instead of running the auto-discovery walk, and a
``RuntimeError`` is raised when the resulting expression resolves to no
prim in the USD stage.

Changed
^^^^^^^

* **Breaking:** Renamed ``Articulation`` write/set methods to the dual
``*_index`` / ``*_mask`` form and dropped the legacy ``full_data``
flag. Index methods accept partial data shaped
``(len(env_ids), len(joint_or_body_ids), ...)``; mask methods accept
full-shape data and a ``wp.bool`` mask. All keyword-only arguments live
after ``*,``; no positional fall-through. Migration: replace
``write_X_to_sim(..., from_mask=True)`` with ``write_X_to_sim_mask(..., mask=...)``.
* **Breaking:** Removed the ``_write_body_state`` plumbing layer.
Deprecated state-writer shims (``write_root_state_to_sim``,
``write_root_com_state_to_sim``, ``write_root_link_state_to_sim``,
joint-state equivalents) now call the public ``write_*_to_sim_index``
methods directly. Behaviour is preserved.
* Changed ``Articulation.root_view`` to return the per-tensor-type bindings
dict (``self._bindings``). The OVPhysX wheel does not expose a single
``ArticulationView`` object; callers that previously walked
``root_view.shared_metatype`` / ``root_view.max_dofs`` should read from
:attr:`~isaaclab_ovphysx.assets.Articulation.num_joints` /
:attr:`~isaaclab_ovphysx.assets.Articulation.num_bodies` /
:attr:`~isaaclab_ovphysx.assets.Articulation.body_names` /
:attr:`~isaaclab_ovphysx.assets.Articulation.joint_names` instead.
* Changed every ``ArticulationData`` public property to return a
:class:`~isaaclab.utils.ProxyArray` (warp + torch dual view); raw
``wp.array`` is reserved for one-shot config buffers. Eager
``TimestampedBufferWarp`` allocation in :meth:`_create_buffers` makes
every buffer a single source of truth — no
``_invalidate_caches`` / ``_ensure_*_buffers`` machinery.
* Changed ``Articulation`` body and DOF property writers to honor the
wheel's actual binding device. Tensor-type membership in
:data:`isaaclab_ovphysx.tensor_types._CPU_ONLY_TYPES` now reflects what
the wheel exposes: ``BODY_MASS``, ``BODY_COM_POSE``, ``BODY_INERTIA``,
``DOF_STIFFNESS``, ``DOF_DAMPING``, ``DOF_LIMIT``, ``DOF_MAX_VELOCITY``,
``DOF_MAX_FORCE``, ``DOF_ARMATURE``, ``DOF_FRICTION_PROPERTIES`` are
CPU-only (write goes through pinned-host staging); fixed and spatial
tendon bindings write directly from sim-device buffers.
* Changed :meth:`~isaaclab_ovphysx.assets.Articulation.write_joint_friction_coefficient_to_sim_index`
/ ``_mask`` to accept ``joint_dynamic_friction_coeff`` and
``joint_viscous_friction_coeff`` keyword arguments (each
``float | torch.Tensor | wp.array | None``). ``None`` preserves the
existing component on the wheel; matches the PhysX backend.
* Changed :meth:`~isaaclab_ovphysx.assets.Articulation.write_joint_position_limit_to_sim_index`
/ ``_mask`` to clamp ``default_joint_pos`` and refresh
``soft_joint_pos_limits`` when the new hard limits invalidate the
defaults, matching the PhysX backend (with a
``warn_limit_violation`` log).
* Changed every fixed/spatial tendon ``set_*_index`` / ``set_*_mask`` setter
to accept a scalar :class:`float` for the value argument; broadcast is
materialized via :meth:`_broadcast_scalar_to_2d`. Mirrors PhysX.
* Implemented the previously stubbed
:meth:`~isaaclab_ovphysx.assets.Articulation.write_fixed_tendon_properties_to_sim_index`
/ ``_mask`` and
:meth:`~isaaclab_ovphysx.assets.Articulation.write_spatial_tendon_properties_to_sim_index`
/ ``_mask``: each iterates the per-tensor bindings since the OVPhysX
wheel has no batch ``set_*_tendon_properties`` setter.

Removed
^^^^^^^

* **Breaking:** Removed the ``full_data`` keyword-argument from every
``Articulation`` ``*_index`` writer/setter. Index methods now strictly
accept partial data; full-data callers should use the matching
``*_mask`` overload.
* Removed the stop-gap :mod:`isaaclab_ovphysx.assets.kernels_old` module;
the six articulation kernels it housed
(``_compose_root_com_pose``, ``_compute_heading``, ``_copy_first_body``,
``_projected_gravity``, ``_world_vel_to_body_ang``,
``_world_vel_to_body_lin``) are now in
:mod:`isaaclab_ovphysx.assets.kernels`.
Loading
Loading