Unverified Commit 560e7b89 authored by ooctipus's avatar ooctipus Committed by GitHub

Fixes advanced indexing shape mismatch when resetting prev_action...

Fixes advanced indexing shape mismatch when resetting prev_action isaaclab.envs.mdp.actions.JointPositionToLimitsAction (#3865)

# Description

This PR fixes the issue reported in #3753 where the advanced indexing
failed due to shape mismatch.
This PR is an alternative solution to #3754,

The fixes is tricky, the most elegant and performant way I found so far
is separate code path when env_id is None vs env_id is tensor. if we
don't do so, applying left hand side with
self._prev_applied_actions[env_ids, :] where env_ids is 2d will cause
the lfs shape to be ill formed.


Fixes #3753 

<!-- As a practice, it is recommended to open an issue to have
discussions on the proposed pull request.
This makes it easier for the community to keep track of what is being
developed or added, and if a given feature
is demanded by more than one party. -->

## Type of change

<!-- As you go through the list, delete the ones that are not
applicable. -->

- Bug fix (non-breaking change which fixes an issue)

## Screenshots

Please attach before and after screenshots of the change if applicable.

<!--
Example:

| Before | After |
| ------ | ----- |
| _gif/png before_ | _gif/png after_ |

To upload images to a PR -- simply drag and drop an image while in edit
mode and it should upload the image directly. You can then paste that
source into the above before/after sections.
-->

## Checklist

- [x] I have read and understood the [contribution
guidelines](https://isaac-sim.github.io/IsaacLab/main/source/refs/contributing.html)
- [x] I have run the [`pre-commit` checks](https://pre-commit.com/) with
`./isaaclab.sh --format`
- [ ] I have made corresponding changes to the documentation
- [x] My changes generate no new warnings
- [ ] I have added tests that prove my fix is effective or that my
feature works
- [x] I have updated the changelog and the corresponding version in the
extension's `config/extension.toml` file
- [x] I have added my name to the `CONTRIBUTORS.md` or my name already
exists there

<!--
As you go through the checklist above, you can mark something as done by
putting an x character in it

For example,
- [x] I have done this task
- [ ] I have not done this task
-->

---------
Signed-off-by: 's avatarooctipus <zhengyuz@nvidia.com>
Signed-off-by: 's avatarKelly Guo <kellyg@nvidia.com>
Co-authored-by: 's avatarKelly Guo <kellyg@nvidia.com>
parent df2c5c32
[package] [package]
# Note: Semantic Versioning is used: https://semver.org/ # Note: Semantic Versioning is used: https://semver.org/
version = "0.50.0" version = "0.50.1"
# Description # Description
title = "Isaac Lab framework for Robot Learning" title = "Isaac Lab framework for Robot Learning"
......
Changelog Changelog
--------- ---------
0.50.1 (2025-11-25)
~~~~~~~~~~~~~~~~~~~
Fixed
^^^^^
* Fixed advanced indexing issue in resetting prev action
in :class:`~isaaclab.envs.mdp.actions.JointPositionToLimitsAction` .
0.50.0 (2025-12-8) 0.50.0 (2025-12-8)
~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~
...@@ -14,6 +24,9 @@ Added ...@@ -14,6 +24,9 @@ Added
0.49.3 (2025-12-03) 0.49.3 (2025-12-03)
~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~
Added
^^^^^
* Added :class:`G1TriHandUpperBodyMotionControllerGripperRetargeter` and :class:`G1TriHandUpperBodyMotionControllerGripperRetargeterCfg` for retargeting the gripper state from motion controllers. * Added :class:`G1TriHandUpperBodyMotionControllerGripperRetargeter` and :class:`G1TriHandUpperBodyMotionControllerGripperRetargeterCfg` for retargeting the gripper state from motion controllers.
* Added unit tests for the retargeters. * Added unit tests for the retargeters.
...@@ -75,6 +88,7 @@ Changed ...@@ -75,6 +88,7 @@ Changed
0.48.6 (2025-11-18) 0.48.6 (2025-11-18)
~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~
......
...@@ -266,12 +266,12 @@ class EMAJointPositionToLimitsAction(JointPositionToLimitsAction): ...@@ -266,12 +266,12 @@ class EMAJointPositionToLimitsAction(JointPositionToLimitsAction):
def reset(self, env_ids: Sequence[int] | None = None) -> None: def reset(self, env_ids: Sequence[int] | None = None) -> None:
# check if specific environment ids are provided # check if specific environment ids are provided
if env_ids is None: if env_ids is None:
env_ids = slice(None) super().reset(slice(None))
self._prev_applied_actions[:] = self._asset.data.joint_pos[:, self._joint_ids]
else: else:
env_ids = env_ids[:, None] super().reset(env_ids)
super().reset(env_ids) curr_applied_actions = self._asset.data.joint_pos[env_ids[:, None], self._joint_ids].view(len(env_ids), -1)
# reset history to current joint positions self._prev_applied_actions[env_ids, :] = curr_applied_actions
self._prev_applied_actions[env_ids, :] = self._asset.data.joint_pos[env_ids, self._joint_ids]
def process_actions(self, actions: torch.Tensor): def process_actions(self, actions: torch.Tensor):
# apply affine transformations # apply affine transformations
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment