Skip to content

[Task Clean-up][Contrib] Dexterous Part 8/10: Move the OpenAI Shadow Hand variants to contrib - #6954

Draft
hujc7 wants to merge 3 commits into
isaac-sim:developfrom
hujc7:jichuanh/reorient-openai-contrib-p8
Draft

[Task Clean-up][Contrib] Dexterous Part 8/10: Move the OpenAI Shadow Hand variants to contrib#6954
hujc7 wants to merge 3 commits into
isaac-sim:developfrom
hujc7:jichuanh/reorient-openai-contrib-p8

Conversation

@hujc7

@hujc7 hujc7 commented Aug 7, 2026

Copy link
Copy Markdown
Collaborator

Review Map

PR Status Depends on Exact changes
#6411 Part 1/10: Newton cloner/cubric/visualizer fixes merged
#6412 Part 2/10: OVPhysX articulation + manager runtime merged
#6413 Part 3/10: Reorient Direct, torch changes
#6414 Part 4/10: MARL-to-single-agent fix + handover/camera Direct #6413 changes
#6418 Part 5/10: Reorient manager counterparts #6413 changes
#6421 Part 6/10: Handover + camera manager counterparts #6413, #6414, #6418 changes
#6410 Part 7/10: Environment overview docs #6421 changes
📌 #6954 Part 8/10: OpenAI Shadow variants → contrib (draft) #6421 changes
#6415 Part 9/10: Benchmark success-rate utilities #6421 changes
#6582 Part 10/10: Warp variants → experimental (draft; merges last) #6413 changes
#6324 [DO-NOT-MERGE] Lumped validation reference ALL

Summary

  • Moves the four OpenAI Shadow Hand identifiers into contrib as two tasks; the feed-forward and recurrent policies now share one environment and are chosen with --agent.
  • Keeps the observation architecture in core as presets=openai — a 42-dimensional actor limited to what a physical hand can measure, plus a 187-dimensional privileged critic. One preset token switches both the environment and the RSL-RL agent.
  • Replaces the obs_type string with independent reduced_obs / asymmetric_obs flags, so a task may narrow the actor, add a privileged critic, or both.
  • Net: 7 Shadow tasks instead of 8, with a capability (presets=openai on the manager workflow) added rather than lost.

Task identifiers

Before After
Isaac-Reorient-Cube-Shadow-OpenAI-FF IsaacContrib-Reorient-Cube-Shadow-OpenAI
Isaac-Reorient-Cube-Shadow-OpenAI-LSTM IsaacContrib-Reorient-Cube-Shadow-OpenAI --agent rsl_rl_lstm_cfg_entry_point
Isaac-Reorient-Cube-Shadow-OpenAI-FF-Direct IsaacContrib-Reorient-Cube-Shadow-OpenAI-Direct
Isaac-Reorient-Cube-Shadow-OpenAI-LSTM-Direct IsaacContrib-Reorient-Cube-Shadow-OpenAI-Direct --agent rsl_rl_lstm_cfg_entry_point

On the removal without deprecation aliases

AGENTS.md requires prior deprecation for public API removals. These four identifiers are being removed outright, deliberately: the equivalent tasks exist under IsaacContrib- names in the same release, the changelog fragment carries the full mapping above, and retaining four alias registrations plus an obs_type translation would preserve a naming scheme this series exists to retire. Raised in review — happy to add aliases if maintainers prefer.

Series

Part 8 of 10. Depends on Part 6/10 (#6421), which owns Isaac-Reorient-Cube-Shadow-Camera; this branch is based on it, so the diff contains #6421's commits until it merges. Review from 75eee1e7211 onward.

Validation

  • 98 tests pass (test_reorient_value_parity.py, test_reorient_utils.py, test_hydra.py)
  • All 7 Shadow task entry points resolve; presets=openai verified on the Direct and manager workflows
  • Pre-commit clean; update_environments_rst.py --check regenerated

hujc7 added 3 commits August 7, 2026 03:04
Adds manager-based Allegro and Shadow cube reorientation environments that
mirror their Direct counterparts, sharing the reward, termination, command and
event definitions so the two workflows stay numerically in step. A value-parity
test pins the shared task-defining values.

Moves the shared task helpers into the reorientation task package and renames
the manager Allegro configurations after the robot rather than the object.
Adds the manager-based handover task and the Shadow camera reorientation task,
each mirroring its Direct counterpart's observation, reward and termination
contracts. Extends the value-parity test to the handover pair.

Retargets the handover recorder import to the reorientation helpers, which the
previous part moved out of core/utils.py.
The four OpenAI identifiers reproduced a specific sim-to-real setup -- 20 Hz
control, action and observation noise, and an episode budget spent per goal --
which does not generalize to other reorientation work. They now live in contrib
as two tasks, with the feed-forward and recurrent policies sharing one
environment and selected with --agent.

The observation architecture does generalize, so it stays in the core task as
presets=openai: a 42-dimensional actor restricted to what a physical hand can
measure, paired with a 187-dimensional privileged critic. One preset token
switches both the environment and the RSL-RL agent.

Replaces the obs_type string with the independent reduced_obs and
asymmetric_obs flags.
return SceneEntityCfg(name, joint_names=".*")


def _fingertip_entity(name: str) -> SceneEntityCfg:

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

you can set a constant instead of create a funciton

)


def _hand_entity(name: str) -> SceneEntityCfg:

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

constant instead of function

# soft limits equal the hard limits here: soft_joint_pos_limits_factor defaults to 1.0
right_joint_pos = ObsTerm(func=mdp.joint_pos_limit_normalized, params={"asset_cfg": _hand_entity("right_hand")})
right_joint_vel = ObsTerm(func=mdp.joint_vel, scale=0.2, params={"asset_cfg": _hand_entity("right_hand")})
right_fingertip_pos = ObsTerm(func=mdp.fingertip_pos, params={"asset_cfg": _fingertip_entity("right_hand")})

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

why not use the one function to return finger tip state?

@hujc7
hujc7 force-pushed the jichuanh/reorient-openai-contrib-p8 branch from 75eee1e to b0d2d84 Compare August 7, 2026 10:05
rewards: OpenAIRewardsCfg = OpenAIRewardsCfg()
terminations: OpenAITerminationsCfg = OpenAITerminationsCfg()

enable_domain_randomization: bool = True

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

does this needs to exist?

physics=PhysicsCfg(),
)
# a looser goal, chased repeatedly, with falls punished
fall_penalty = -50.0

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

we shouldn't need this kind of direc env style field creation/overrride if we are in manager style.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

asset New asset feature or request documentation Improvements or additions to documentation

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants