Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion source/isaaclab/config/extension.toml
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
[package]

# Note: Semantic Versioning is used: https://semver.org/
version = "0.47.11"
version = "0.47.12"

# Description
title = "Isaac Lab framework for Robot Learning"
Expand Down
9 changes: 9 additions & 0 deletions source/isaaclab/docs/CHANGELOG.rst
Original file line number Diff line number Diff line change
@@ -1,6 +1,15 @@
Changelog
---------

0.47.12 (2025-10-15)
Copy link
Contributor

Choose a reason for hiding this comment

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

style: Date shows 2025-10-15 which appears to be in the future (today is 2025-11-07). Verify this date is correct.

~~~~~~~~~~~~~~~~~~~~

Changed
^^^^^^^

* Add :attr:`preserve_order` flag to :class:`~isaaclab.envs.mdp.actions.actions_cfg.JointPositionToLimitsActionCfg`


0.47.11 (2025-11-03)
~~~~~~~~~~~~~~~~~~~~

Expand Down
3 changes: 3 additions & 0 deletions source/isaaclab/isaaclab/envs/mdp/actions/actions_cfg.py
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,9 @@ class JointPositionToLimitsActionCfg(ActionTermCfg):
This operation is performed after applying the scale factor.
"""

preserve_order: bool = False
"""Whether to preserve the order of the joint names in the action output. Defaults to False."""


@configclass
class EMAJointPositionToLimitsActionCfg(JointPositionToLimitsActionCfg):
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,9 @@ def __init__(self, cfg: actions_cfg.JointPositionToLimitsActionCfg, env: Manager
super().__init__(cfg, env)

# resolve the joints over which the action term is applied
self._joint_ids, self._joint_names = self._asset.find_joints(self.cfg.joint_names)
self._joint_ids, self._joint_names = self._asset.find_joints(
self.cfg.joint_names, preserve_order=cfg.preserve_order
)
self._num_joints = len(self._joint_ids)
# log the resolved joint names for debugging
omni.log.info(
Expand All @@ -75,17 +77,22 @@ def __init__(self, cfg: actions_cfg.JointPositionToLimitsActionCfg, env: Manager
elif isinstance(cfg.scale, dict):
self._scale = torch.ones(self.num_envs, self.action_dim, device=self.device)
# resolve the dictionary config
index_list, _, value_list = string_utils.resolve_matching_names_values(self.cfg.scale, self._joint_names)
index_list, _, value_list = string_utils.resolve_matching_names_values(
self.cfg.scale, self._joint_names, preserve_order=cfg.preserve_order
)
self._scale[:, index_list] = torch.tensor(value_list, device=self.device)
else:
raise ValueError(f"Unsupported scale type: {type(cfg.scale)}. Supported types are float and dict.")

# parse clip
if self.cfg.clip is not None:
if isinstance(cfg.clip, dict):
self._clip = torch.tensor([[-float("inf"), float("inf")]], device=self.device).repeat(
self.num_envs, self.action_dim, 1
)
index_list, _, value_list = string_utils.resolve_matching_names_values(self.cfg.clip, self._joint_names)
index_list, _, value_list = string_utils.resolve_matching_names_values(
self.cfg.clip, self._joint_names, preserve_order=cfg.preserve_order
)
self._clip[:, index_list] = torch.tensor(value_list, device=self.device)
else:
raise ValueError(f"Unsupported clip type: {type(cfg.clip)}. Supported types are dict.")
Expand Down
Loading