[Feature]: Support rescaling rigid entity dynamically.
What feature or enhancement are you proposing?
Enable the ability to scale the size of an entity dynamically after a scene has been built.
Motivation
In robot learning, scale randomization is a commonly used technique for domain randomization. During sim2real experiments, I found that the ability to randomly scale entities would significantly enhance robustness of learned policies. Currently, I have to pre-spawn all scaled versions of objects and swap them between episodes, which is inefficient, especially for parallel environments. I believe that scale randomization would be high ROI for Genesis.
Potential Benefit
- [ ] Greatly increase the scope of domain randomization possible in Genesis.
- [ ] Enable training of more robust policies without compromising training speed.
- [ ] Reduce overhead and complexity associated with pre-spawning multiple scaled objects
What is the expected outcome of the implementation work?
- [ ] Ability to scale an entity using a floating point factor.
- [ ] Be able to set this scale after the scene has been built through some method (i.e.,
entity.set_scale(0.7))
Additional information
Without dynamic scaling, training either becomes slower (due to pre-spawning + having to reduce number of parallel environments to support memory constraints) or suffers from reduced domain randomization. If this feature is not planned for Genesis, I could attempt to implement it if given a roadmap outlining the required steps for implementation.
I think this is somewhat related to https://github.com/Genesis-Embodied-AI/Genesis/pull/1589
It would be nice if we can have entity.set_scale(0.7, envs_idx=envs_idx)
This would be super helpful for me too.