Skip to content

Commit 4384bfb

Browse files
Refactor OVPhysX SDP to mirror PhysX single-binding shape
Drop per-articulation TT.LINK_POSE bindings now that the wheel's RIGID_BODY_POSE matcher is confirmed (probe + wheel docs) to accept patterns matching any UsdPhysics.RigidBodyAPI prim, including articulation links. The provider now bucket-by-relative-path: one RIGID_BODY_POSE + RIGID_BODY_VELOCITY binding per distinct env-wildcard form (cartpole -> 2 bindings, Allegro hand -> ~17), each covering all envs. Mirrors PhysX's single-RigidBodyView intent while respecting the wheel's one-pattern-per-binding API. Other changes pulled in by the same refactor: * Add UsdPhysics.RigidBodyAPI filter on Newton body paths so joints and articulation-root xforms are excluded from binding patterns (mirrors PhysxSceneDataProvider._setup_rigid_body_view at physx_scene_data_provider.py:281). * Migrate to the wheel-0.4 binding.read(dst) API with pre-allocated warp destination buffers so per-step reads are allocation-free. * Drop _classify_paths_by_articulation_root, _apply_articulation_bindings, _articulation_link_bindings, _bindings dict, _get_binding, and the velocity-aggregation loop in get_velocities. * Update tests: replace partition test with one-per-distinct-rigid-path test, retarget merge test to rigid+xform, fix get_velocities test to exercise the new read(dst) API.
1 parent 6acf21e commit 4384bfb

3 files changed

Lines changed: 174 additions & 230 deletions

File tree

source/isaaclab_ovphysx/changelog.d/antoiner-feat-ovphysx-scene-data-provider.minor.rst

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,15 @@ Added
44
* Added :class:`~isaaclab_ovphysx.scene_data_providers.OvPhysxSceneDataProvider`,
55
the OVPhysX-backend implementation of
66
:class:`~isaaclab.physics.base_scene_data_provider.BaseSceneDataProvider`.
7-
Builds a Newton model from the scene's per-group :class:`~isaaclab.cloner.ClonePlan`
8-
map (gated on ``SceneDataRequirement.requires_newton_model``) and syncs
9-
ovphysx body poses into the Newton state on every ``update()``. Reads
10-
body poses via ``TT.RIGID_BODY_POSE`` and ``TT.LINK_POSE``
11-
bindings, with :class:`~isaaclab.sim.views.FrameView` fallback for
12-
prims neither binding covers. Enables Rerun, Viser, and the native
13-
Newton viewport to render OVPhysX simulations.
7+
Builds a Newton model from the scene's :class:`~isaaclab.cloner.ClonePlan`
8+
(gated on ``SceneDataRequirement.requires_newton_model``) and syncs ovphysx
9+
body poses into the Newton state on every ``update()``. Reads body poses
10+
through ``TT.RIGID_BODY_POSE`` bindings — one binding per distinct RB-prim
11+
path in env-wildcard form, covering free rigid bodies and articulation
12+
links uniformly (the wheel's ``RIGID_BODY_POSE`` matcher accepts any prim
13+
with ``UsdPhysics.RigidBodyAPI``). Velocities come from the parallel
14+
``TT.RIGID_BODY_VELOCITY`` bindings. Pre-allocates warp destination
15+
buffers so per-step ``binding.read(dst)`` calls are allocation-free.
16+
:class:`~isaaclab.sim.views.FrameView` fallback handles prims without
17+
``RigidBodyAPI``. Enables Rerun, Viser, and the native Newton viewport to
18+
render OVPhysX simulations.

0 commit comments

Comments
 (0)