Skip to content

Comments

Shadow Hand Environments Newton Implementation#4616

Open
nv-rgresia wants to merge 10 commits intoisaac-sim:dev/newtonfrom
nv-rgresia:shadow-hand-envs-newton
Open

Shadow Hand Environments Newton Implementation#4616
nv-rgresia wants to merge 10 commits intoisaac-sim:dev/newtonfrom
nv-rgresia:shadow-hand-envs-newton

Conversation

@nv-rgresia
Copy link
Contributor

@nv-rgresia nv-rgresia commented Feb 13, 2026

Description

Imports the shadow hand environments to Newton. Currently the working environments are Isaac-Repose-Cube-Shadow-Direct-v0 and 'Isaac-Repose-Cube-Shadow-Vision-Direct-v0', but all around model performance is lacking during testing.

Type of change

  • New feature (non-breaking change which adds functionality)

Checklist

  • I have read and understood the contribution guidelines
  • I have run the pre-commit checks with ./isaaclab.sh --format
  • My changes generate no new warnings
  • I have updated the changelog and the corresponding version in the extension's config/extension.toml file
  • I have added my name to the CONTRIBUTORS.md or my name already exists there

@greptile-apps
Copy link
Contributor

greptile-apps bot commented Feb 13, 2026

Too many files changed for review. (1275 files found, 100 file limit)

@nv-rgresia nv-rgresia changed the base branch from main to dev/newton February 13, 2026 20:50
@github-actions github-actions bot added documentation Improvements or additions to documentation asset New asset feature or request isaac-sim Related to Isaac Sim team isaac-mimic Related to Isaac Mimic team infrastructure labels Feb 13, 2026
Copy link
Contributor

@kellyguo11 kellyguo11 left a comment

Choose a reason for hiding this comment

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

Thanks, looks good overall! Does the Newton renderer actually provide segmentation data? or that's just an empty buffer for now?

I also wonder if the difference in training performance compared to PhysX might be from the tendon setup or missing sensor data?

@nv-rgresia
Copy link
Contributor Author

The segmentation data is indeed empty buffers; I wonder if the lack of color data is impacting it as well.

I'll have to do some benchmarking between all the environments to determine whats going on. The current allegro hand checkpoint looks to be underperforming as well and I can compare it against the basic environment, but i'll need to do the training first.

Also I've added another commit the OpenAI FF environment, the EventCfg has some limitations due to Newton currently, but its able to start training. The OpenAI LSTM should be working as well, although I get a key error in the rl_games train script, is this a known issue?

# if dict, then parse the regular expression
indices, _, values = string_utils.resolve_matching_names_values(cfg_value, self.joint_names)
indices_global = [self._joint_indices[i] for i in indices]
indices_global = [self._joint_indices[i].cpu() for i in indices]
Copy link
Collaborator

Choose a reason for hiding this comment

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

Is that strictly needed?

Comment on lines 2286 to 2290

if len(joint_names) == self.num_joints:
joint_indices = slice(None)
else:
joint_indices = torch.tensor(joint_indices, device=self.device)
Copy link
Collaborator

Choose a reason for hiding this comment

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

Is that actually needed?

Copy link
Collaborator

Choose a reason for hiding this comment

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

That might explain the cpu() in the base actuator?

Copy link
Collaborator

@AntoineRichard AntoineRichard left a comment

Choose a reason for hiding this comment

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

Thanks for PR! I've left a couple comments. I think there is an issue with the joint_pos_limits, but i'm working on making that homogeneous across PhysX and Newton.

Comment on lines 1042 to 1084
def write_joint_position_limit_to_sim(
self,
lower_limits: wp.array | float,
upper_limits: wp.array | float,
limits: wp.array | float,
joint_ids: Sequence[int] | None = None,
env_ids: Sequence[int] | None = None,
joint_mask: wp.array | None = None,
env_mask: wp.array | None = None,
) -> None:
"""Write joint position limits into the simulation.

Args:
lower_limits: Joint lower limits. Shape is (num_instances, num_joints).
upper_limits: Joint upper limits. Shape is (len(env_ids), len(joint_ids)) or (num_instances, num_joints).
joint_ids: The joint indices to set the targets for. Defaults to None (all joints).
env_ids: The environment indices to set the targets for. Defaults to None (all environments).
joint_mask: The joint mask. Shape is (num_joints).
env_mask: The environment mask. Shape is (num_instances,).
"""
# Resolve indices into mask, convert from partial data to complete data, handles the conversion to warp.
if isinstance(upper_limits, torch.Tensor):
if self._temp_joint_pos is None:
self._temp_joint_pos = wp.zeros(
(self.num_instances, self.num_joints), dtype=wp.float32, device=self.device
)

if isinstance(limits, torch.Tensor):
upper_limits = make_complete_data_from_torch_dual_index(
upper_limits,
limits[:, 0, :, 0],
self.num_instances,
self.num_joints,
env_ids,
joint_ids,
dtype=wp.float32,
device=self.device,
out=self._temp_joint_pos,
)
if isinstance(lower_limits, torch.Tensor):
if self._temp_joint_vel is None:
self._temp_joint_vel = wp.zeros(
(self.num_instances, self.num_joints), dtype=wp.float32, device=self.device
)

if isinstance(limits, torch.Tensor):
lower_limits = make_complete_data_from_torch_dual_index(
lower_limits,
limits[:, 0, :, 1],
self.num_instances,
self.num_joints,
env_ids,
joint_ids,
dtype=wp.float32,
device=self.device,
out=self._temp_joint_vel,
)
Copy link
Collaborator

Choose a reason for hiding this comment

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

Why remove the lower and upper limits? in a pure warp path, what would happen?

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 infrastructure isaac-mimic Related to Isaac Mimic team isaac-sim Related to Isaac Sim team

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants