New first-class reward components
This main focus of this release is to introduce a new generic reward component toolbox. Defining new highly-optimised reward components is a breeze thanks to the dynamic computation graph capability of first-class quantities that was previously introduced and significantly extended here. The learning environment pipeline design has been extended to allow for specifying reward components and reference trajectories in configuration files. Regarding the physics engine, simple mechanical reductions are now fully supported, and handling of velocity bounds has been reworked to be physically grounded. For the record, the pre-defined learning environment for Atlas using PD controllers has a real time factor of 120 on a single core (Apple M3 Max).
New features
- [core] Add stairs terrain @mwulfman (#797)
- [core] Implement velocity limits at motor-level. (#798)
- [core] Enable attaching encoders either on motor or joint side. (#798)
- [core] Mechanical reduction is now fully supported. (#798)
- [core] Add velocity-torque slope when approaching maximum torque. (#798)
- [python] Introduce first-class trajectory object. (#790)
- [gym/common] Add simulation vs trajectory quantity evaluation mode. (#791) (#792)
- [gym/common] Add more pre-defined computation graph quantities. (#783) (#784)
- [gym/common] Introduce reward component toolbox leveraging computation graph. (#784) (#786) (#792)
- [gym/common] Support specifying reward in pipeline config. (#787) (#792)
- [gym/rllib] Add symmetry surrogate loss in PPO algorithm. @mwulfman (#780)
Improvements
- [core] Make 'jiminy::Model' and 'jiminy::Robot' copyable. (#791)
- [core] Define position, velocity and effort limits at motor level. (#798)
- [core] Allow direct access to all motors / sensors attached to a robot. (#798)
- [core] Remove spring-damper position bounds dynamics to always use constraints. (#798)
- [core] Remove damper velocity bounds dynamics. (#798)
- [core] Define motor armature option at motor-side. (#798)
- [core] Effort sensors now correctly measure motor effort before transmission. (#801)
Patches and bug fixes
- [core] Fix adding flexibility frame on root joint of fixed-base robot. (#798)
- [python/log] Fix trajectory and sensor data extraction and replay from log. (#800)
- [python/plot] Get around tabbed figure hanging for 'matplotlib>=3.8'. (#795)
- [gym/env] Update all robotic environment to avoid truncation under random actions. (#800) (#801)
- [gym/rllib] Fix checkpoint save location. @mwulfman (#788) (#789)
Miscellaneous
- [core] Remove dedicated robot attributes for position, velocity and effort limits. (#798)
- [core] Remove inefficient motor / sensor convenience helpers of 'Robot'. (#798)
- [core] Log total joint effort instead of confusing motor effort on joint side. (#798)
- [core] Move 'enable(Velocity|Effort)Limit' options from AbstractMotor to SimpleMotor. (#798)
- [gym/common] Do NOT pass 'truncated' argument to 'compute_reward'. (#783)
- [gym/common] Pass 'info' in argument of 'has_terminated' for consistency. (#783)
- [gym/common] Remove BaseJiminyEnv 'enforce_bounded_spaces' option by lack of use-case. (#783)
- [gym/common] Increase timeout ratio from 10 to 15 to avoid Mac OS CI failure. (#786)
- [gym/common] Get around some memory alignment issue with Boost < 1.78. (#794)
- [misc] Update install instructions on windows. (#787)
- [misc] Improve documentation. (#790)