[Task Clean-up][OVPhysX] Dexterous Part 7/11: Add OVPhysX presets to the dexterous tasks#6417
[Task Clean-up][OVPhysX] Dexterous Part 7/11: Add OVPhysX presets to the dexterous tasks#6417hujc7 wants to merge 5 commits into
Conversation
The Shadow Hand reorientation and handover environments gain OVPhysX physics presets (spawned without fixed-tendon overrides, which the OVPhysX runtime does not expose), and the Shadow Hand task frame is corrected on OVPhysX. Validated by full training runs on the OVPhysX backend.
Greptile SummaryThis PR adds OVPhysX physics presets to the Shadow Hand reorientation and handover environments, and fixes the Shadow Hand task frame on OVPhysX by clearing
Confidence Score: 4/5Safe to merge; the changes are additive config-only additions with no runtime logic changes, and training runs on the OVPhysX backend have been validated. The only issue found is a single stale module-level comment in handover_env_cfg.py that still says J0 after the joint was renamed to J1 in both the code and the docstring. All OVPhysX preset additions are consistent: fixed_tendons_props is correctly cleared, rotations match the PhysX baseline, and joint_pos is preserved via SHADOW_HAND_CFG.init_state.replace(...) which carries {".*": 0.0}. The three new test files provide solid coverage across 15 env variants. handover_env_cfg.py has the one stale comment; all other files are clean. Important Files Changed
Flowchart%%{init: {'theme': 'neutral'}}%%
flowchart TD
A[resolve_presets called with preset key] --> B{preset key}
B -- physx --> C[PhysxCfg\nSHADOW_HAND_CFG\nfixed_tendons_props set]
B -- newton_mjwarp --> D[NewtonCfg\nShadowHandNewton USD\nJ1 distal_passive override]
B -- ovphysx --> E[OvPhysxCfg\nSHADOW_HAND_CFG\nfixed_tendons_props = None]
B -- default --> C
C --> F[ShadowHandRobotCfg.physx\nrot=0,0,0,1]
D --> G[ShadowHandRobotCfg.newton_mjwarp\nrot=-0.707,0.707\nJ1 passive actuator]
E --> H[ShadowHandRobotCfg.ovphysx\nrot=0,0,0,1\nno tendon overrides]
style E fill:#d4edda,stroke:#28a745
style H fill:#d4edda,stroke:#28a745
%%{init: {'theme': 'base', 'themeVariables': {"darkMode": true, "background": "#0d1117", "primaryColor": "#21262d", "primaryTextColor": "#e6edf3", "primaryBorderColor": "#8b949e", "lineColor": "#8b949e", "textColor": "#e6edf3", "edgeLabelBackground": "#161b22", "actorBkg": "#21262d", "actorBorder": "#8b949e", "actorTextColor": "#e6edf3", "actorLineColor": "#8b949e", "signalColor": "#8b949e", "signalTextColor": "#e6edf3", "noteBkgColor": "#373320", "noteBorderColor": "#d4a72c", "noteTextColor": "#f0e6c0", "labelBoxBkgColor": "#21262d", "labelBoxBorderColor": "#8b949e", "labelTextColor": "#e6edf3", "loopTextColor": "#e6edf3", "activationBkgColor": "#30363d", "activationBorderColor": "#8b949e"}}}%%
flowchart TD
A[resolve_presets called with preset key] --> B{preset key}
B -- physx --> C[PhysxCfg\nSHADOW_HAND_CFG\nfixed_tendons_props set]
B -- newton_mjwarp --> D[NewtonCfg\nShadowHandNewton USD\nJ1 distal_passive override]
B -- ovphysx --> E[OvPhysxCfg\nSHADOW_HAND_CFG\nfixed_tendons_props = None]
B -- default --> C
C --> F[ShadowHandRobotCfg.physx\nrot=0,0,0,1]
D --> G[ShadowHandRobotCfg.newton_mjwarp\nrot=-0.707,0.707\nJ1 passive actuator]
E --> H[ShadowHandRobotCfg.ovphysx\nrot=0,0,0,1\nno tendon overrides]
style E fill:#d4edda,stroke:#28a745
style H fill:#d4edda,stroke:#28a745
|
The earlier commit was meant to ship the reduced Direct-only test set but the reduction was accidentally committed on a detached HEAD and never reached the branch. The manager-importing test rows and the handover configuration test move to the final manager PR, which is where their imports resolve.
Mirrors the per-backend actuated-joint mapping, composed hand rotations, and contact substeps shipped in the handover enablement PR; this file remains the superset with the OVPhysX preset.
The handover cfg carries the Newton fixes from Part 4 plus the OVPhysX presets; the Shadow cfg consumes the shared fingertip constants from Part 3.
The Shadow and OpenAI Direct cfgs default their scalar fields from the per-variant task constants and promote the shared scene and noise cfg objects to module scope, so the manager counterparts consume one source without instantiating a throwaway Direct cfg. The handover cfg carries the same treatment plus the float64 hand-rotation composition.
Summary
Dependencies
handover_env_cfg.py: this PR carries the identical distal-joint hunks, so either merge order is clean.Review updates (2026-07-09)