Skip to content

Commit

Permalink
Adds dict conversion test for ActuatorBase configs (isaac-sim#1608)
Browse files Browse the repository at this point in the history
# Description

<!--
Thank you for your interest in sending a pull request. Please make sure
to check the contribution guidelines.

Link: https://isaac-sim.github.io/IsaacLab/source/refs/contributing.html
-->

A recent PR
(isaac-sim#1530 (comment))
causes issues with joint_parameter_lookup attributes of Articulation
Configs. The `class_to_dict` utility function needs to return a
primitive dict. Returning a torch.Tensor conflicts with OmegaConf.

This PR adds a unittest for the dict conversion as requested by @lgulich
so that the issue can be fixed. The test case fails on main branch as
expected according to my understanding. Passes on v1.3.0.

<!-- 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. -->

- Breaking change (fix or feature that would cause existing
functionality to not work as expected)

<!--
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 run the [`pre-commit` checks](https://pre-commit.com/) with
`./isaaclab.sh --format`
- [ ] I have made corresponding changes to the documentation
- [ ] My changes generate no new warnings
- [ ] I have added tests that prove my fix is effective or that my
feature works
- [ ] 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
-->
  • Loading branch information
mschweig authored and AntoineRichard committed Jan 15, 2025
1 parent e4c28cc commit 113c574
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 0 deletions.
1 change: 1 addition & 0 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ repos:
- id: codespell
additional_dependencies:
- tomli
exclude: "CONTRIBUTORS.md"
# FIXME: Figure out why this is getting stuck under VPN.
# - repo: https://github.com/RobertCraigie/pyright-python
# rev: v1.1.315
Expand Down
1 change: 1 addition & 0 deletions CONTRIBUTORS.md
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,7 @@ Guidelines for modifications:
* Lionel Gulich
* Louis Le Lay
* Lorenz Wellhausen
* Manuel Schweiger
* Masoud Moghani
* Michael Gussert
* Michael Noseworthy
Expand Down
22 changes: 22 additions & 0 deletions source/extensions/omni.isaac.lab/test/utils/test_configclass.py
Original file line number Diff line number Diff line change
Expand Up @@ -143,6 +143,16 @@ class BasicDemoTorchCfg:
some_tensor: torch.Tensor = torch.Tensor([1, 2, 3])


@configclass
class BasicActuatorCfg:
"""Dummy configuration class for ActuatorBase config."""

joint_names_expr: list[str] = ["some_string"]
joint_parameter_lookup: list[list[float]] = [[1, 2, 3], [4, 5, 6]]
stiffness: float = 1.0
damping: float = 2.0


"""
Dummy configuration to check type annotations ordering.
"""
Expand Down Expand Up @@ -530,6 +540,18 @@ def test_dict_conversion(self):
self.assertEqual(torch_cfg_dict["some_number"], 0)
self.assertTrue(torch.all(torch_cfg_dict["some_tensor"] == torch.tensor([1, 2, 3])))

def test_actuator_cfg_dict_conversion(self):
"""Test dict conversion of ActuatorConfig."""
# create a basic RemotizedPDActuator config
actuator_cfg = BasicActuatorCfg()
# return writable attributes of config object
actuator_cfg_dict_attr = actuator_cfg.__dict__
# check if __dict__ attribute of config is not empty
self.assertTrue(len(actuator_cfg_dict_attr) > 0)
# class_to_dict utility function should return a primitive dictionary
actuator_cfg_dict = class_to_dict(actuator_cfg)
self.assertTrue(isinstance(actuator_cfg_dict, dict))

def test_dict_conversion_order(self):
"""Tests that order is conserved when converting to dictionary."""
true_outer_order = ["device_id", "env", "robot_default_state", "list_config"]
Expand Down

0 comments on commit 113c574

Please sign in to comment.