Adds support for callable classes in manager terms (#104)
# Description
This PR adds support for callable classes to the `term_cfg.func`
attribute. This is needed for complex behaviors where users may want to
define certain persistent behaviors as part of the terms.
The callable class should take in the term configuration object and the
environment instance as inputs to its constructor. Additionally, they
should implement the `__call__` function with the signature expected by
the manager.
For example, in the case of observation terms, this looks like:
```python
class complex_function_class:
def __init__(self, cfg: ObservationTermCfg, env: object):
self.cfg = cfg
self.env = env
# define some variables
self.history_length = 2
self._obs_history = torch.zeros(self.env.num_envs, self.history_length, 2, device=self.env.device)
def __call__(self, env: object) -> torch.Tensor:
new_obs = torch.rand(env.num_envs, 2, device=env.device)
# update history
self._obs_history[:, 1:] = self._obs_history[:, :1].clone()
self._obs_history[:, 0] = new_obs
# return obs
return new_obs
```
## Type of change
- New feature (non-breaking change which adds functionality)
- This change requires a documentation update
## Checklist
- [x] I have run the [`pre-commit` checks](https://pre-commit.com/) with
`./orbit.sh --format`
- [ ] I have made corresponding changes to the documentation
- [x] My changes generate no new warnings
- [x] 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
Showing
Please register or sign in to comment