Unverified Commit 6bc4d0a0 authored by dtc103's avatar dtc103 Committed by GitHub

Fixes body IDs selection when computing `feet_slide` reward for locomotion-velocity task (#1277)

# Description

Since I wanted to use Isaac Lab for training a Unitree Go2, I played
around with the examples to get used to the framework. While playing
around, I got the following error message:

```
reward = torch.sum(body_vel.norm(dim=-1) * contacts, dim=1)
RuntimeError: The size of tensor a (19) must match the size of tensor b (4) at non-singleton dimension 1
```

The reward term was added as follows:
``` 
sliding_feet = RewTerm(
        func=mdp.feet_slide,
        params={"sensor_cfg": SceneEntityCfg("contact_forces", body_names=".*foot")},
        weight=0.1
    )
``` 

After some code investigation, I found out, that inside the feet_slide
function, the body velocities are queried as
"asset.data.body_lin_vel_w[:, asset_cfg.body_ids, :2]". This would
return the velocity of all body parts, since asset_cfg.body_ids contains
the ids of all body parts.

Therefore we need to change the line to "body_vel =
asset.data.body_lin_vel_w[:, sensor_cfg.body_ids, :2]" since we only
want the velocity of the body parts that contain the force sensors.
This means we have to change `asset_cfg.body_ids` to
`sensor_cfg.body_ids` inside the tensor call

Doing this leads to the successful running of the simulation without failure.

No additional dependencies are necessary for this fix.  

## Type of change

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

## Checklist

- [x] I have run the [`pre-commit` checks](https://pre-commit.com/) with
`./isaaclab.sh --format`
- [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
parent 54c4b47f
...@@ -45,6 +45,7 @@ Guidelines for modifications: ...@@ -45,6 +45,7 @@ Guidelines for modifications:
* Gary Lvov * Gary Lvov
* Giulio Romualdi * Giulio Romualdi
* HoJin Jeon * HoJin Jeon
* Jan Kerner
* Jean Tampon * Jean Tampon
* Jia Lin Yuan * Jia Lin Yuan
* Jingzhou Liu * Jingzhou Liu
......
[package] [package]
# Note: Semantic Versioning is used: https://semver.org/ # Note: Semantic Versioning is used: https://semver.org/
version = "0.10.7" version = "0.10.8"
# Description # Description
title = "Isaac Lab Environments" title = "Isaac Lab Environments"
......
Changelog Changelog
--------- ---------
0.10.8 (2024-10-22)
~~~~~~~~~~~~~~~~~~~
Fixed
^^^^^
* Fixed the wrong selection of body id's in the :meth:`omni.isaac.lab_tasks.manager_based.locomotion.velocity.mdp.rewards.feet_slide`
reward function. This makes sure the right IDs are selected for the bodies.
0.10.7 (2024-10-02) 0.10.7 (2024-10-02)
~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~
......
...@@ -77,7 +77,7 @@ def feet_slide(env, sensor_cfg: SceneEntityCfg, asset_cfg: SceneEntityCfg = Scen ...@@ -77,7 +77,7 @@ def feet_slide(env, sensor_cfg: SceneEntityCfg, asset_cfg: SceneEntityCfg = Scen
contact_sensor: ContactSensor = env.scene.sensors[sensor_cfg.name] contact_sensor: ContactSensor = env.scene.sensors[sensor_cfg.name]
contacts = contact_sensor.data.net_forces_w_history[:, :, sensor_cfg.body_ids, :].norm(dim=-1).max(dim=1)[0] > 1.0 contacts = contact_sensor.data.net_forces_w_history[:, :, sensor_cfg.body_ids, :].norm(dim=-1).max(dim=1)[0] > 1.0
asset = env.scene[asset_cfg.name] asset = env.scene[asset_cfg.name]
body_vel = asset.data.body_lin_vel_w[:, asset_cfg.body_ids, :2] body_vel = asset.data.body_lin_vel_w[:, sensor_cfg.body_ids, :2]
reward = torch.sum(body_vel.norm(dim=-1) * contacts, dim=1) reward = torch.sum(body_vel.norm(dim=-1) * contacts, dim=1)
return reward return reward
......
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