[Task Clean-up][Manager][Camera] Dexterous Part 10/11: Add the Shadow camera manager counterpart - #6420
[Task Clean-up][Manager][Camera] Dexterous Part 10/11: Add the Shadow camera manager counterpart#6420hujc7 wants to merge 8 commits into
Conversation
Manager-based counterpart for the Shadow Hand camera reorientation task with Play and Benchmark variants, registered with the rendering correctness suite and reference golden images for both the Direct and manager camera tasks. Validated by full camera manager training and rendering-correctness runs on RTX.
| _DIRECT_CAMERA_CFG = ShadowHandCameraEnvCfg() | ||
| _FINGERTIP_BODY_NAMES = _DIRECT_CAMERA_CFG.fingertip_body_names |
There was a problem hiding this comment.
Module-level config instantiation to read two constants
ShadowHandCameraEnvCfg() is instantiated at import time solely to read fingertip_body_names and force_torque_obs_scale. Since both values are defined directly on ShadowHandEnvCfg (the parent class) as class-level fields, they can be retrieved without creating a full env config object. The current approach works but adds unnecessary initialization cost on every import of this module, and any future side effect added to ShadowHandCameraEnvCfg.__post_init__ would silently fire at import time.
Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!
| self.observations.policy.camera_features.params["feature_extractor_cfg"] = self.feature_extractor | ||
|
|
||
| def validate_config(self): | ||
| """Check every unresolved scene alternative or the selected camera pipeline.""" | ||
| if isinstance(self.scene, PresetCfg): | ||
| scenes = (self.scene.physx, self.scene.newton_mjwarp, self.scene.ovphysx) | ||
| else: | ||
| scenes = (self.scene,) | ||
| for scene in scenes: | ||
| validate_shadow_hand_camera_settings(scene.tiled_camera, self.feature_extractor) |
There was a problem hiding this comment.
validate_config hardcodes preset attribute names
The three backend names physx, newton_mjwarp, and ovphysx are accessed by string-literal attribute lookup. All concrete subclasses in this PR define those three attributes, so this is safe today. However, any future subclass that overrides scene with a PresetCfg that omits or renames one of these backends will hit an AttributeError from PresetCfg.__getattr__ (which only handles known legacy aliases). Iterating via dataclasses.fields() and filtering out default and underscore-prefixed entries would make the validation self-describing and forward-compatible.
Carries the camera enablement deferred from the renderer-preset part (shared validation helper, Warp cube-keypoint function with parity tests and deprecation shim, manager observation terms in the mdp package), drops the consumer-less manager Benchmark registration, and removes the camera benchmark row's unreachable reward gate.
CI's RTX output differs from locally rendered frames beyond the color gate; use the frames CI itself rendered as the references.
The camera manager reads the fingertip names and force-torque scale from the constants module instead of instantiating the Direct cfg, and the cube-keypoint feature path writes into a pre-allocated buffer.
The camera manager reads the fingertip names and force-torque scale from the constants module instead of instantiating the Direct cfg, and the cube-keypoint feature path writes into a pre-allocated buffer.
The camera manager reads the fingertip names and force-torque scale from the constants module instead of instantiating the Direct cfg, and the cube-keypoint feature path writes into a pre-allocated buffer.
The camera manager row gains an interim reward gate (150) that catches pipeline breakage well below the truncated manager plateau (~174-290); success gates stay off until a full-budget manager run calibrates them. The camera observation terms and feature extractor pick up the Warp kernel conversion, the camera env drops its redundant fingertip force-sensor update (the base Direct env's Warp observation build owns the refresh), and the keypoint parity test file is dropped in favor of the consolidated kernel behavior suite that ships with Part 11.
The camera Direct and manager configurations define their scalars as per-paradigm literals; the cube-keypoint helpers now come from the family kernel module reorient_kernels (the feature-extractor re-export keeps the deprecated shim working).
…nager runtime (#6412) ## Summary - Fixes OVPhysX actuator joint indices to follow the common actuator indexing contract. - Fixes OVPhysX initialization alongside Kit by reusing Kit's registered PhysX schema provider. - Fixes the OVPhysX manager to support both the declared public runtime API and the current runtime API. - Regression tests included. Validated by full dexterous training runs on the OVPhysX backend; split out of the lumped validation branch #6324 (Part 2 of 11). ## Dependencies - None. ## Series review map Full integrated diff + training/validation evidence: the lumped validation PR #6324 (DO-NOT-MERGE). | Part | PR | |---|---| | Docs: regenerate the environment overview table | #6410 | | Part 1/11: Newton runtime fixes (cloner rows, cubric fallback, viz teardown) | #6411 | | **Part 2/11: OVPhysX runtime fixes (this PR)** | #6412 | | Part 3/11: success-rate metrics for the Direct reorientation tasks | #6413 | | Part 4/11: RSL-RL training for the handover Direct task | #6414 | | Part 5/11: success-rate support in the benchmark utilities | #6415 | | Part 6/11: renderer presets for the Direct camera task | #6416 | | Part 7/11: OVPhysX presets for the dexterous tasks | #6417 | | Part 8/11: Allegro manager counterpart | #6418 | | Part 9/11: Shadow + OpenAI manager counterparts | #6419 | | Part 10/11: Shadow camera manager counterpart | #6420 | | Part 11/11: Shadow handover manager counterpart | #6421 | --- ### Exact changes in this PR - OVPhysX backend changes + tests: 1f7a433
Summary
compute_keypointsis deprecated in favor offeature_extractor.compute_cube_keypoints), and the camera observation terms in the task mdp package.Dependencies
Review updates (2026-07-09)
Review updates (2026-07-11)
Series review map
Full integrated diff + training/validation evidence: the lumped validation PR #6324 (DO-NOT-MERGE).
Builds on: #6413, #6416. This PR's own commits relative to each parent branch: