This release mainly focuses on fixing a bugs across the codebase, including long lasting bugs related to impulse forces since inception. The latest version of gymnasium
and ray[rllib]
are now fully supported and has been validated on a production environment. Environment pipeline design should be ready for production. It is expected to be significantly slower (~20%) than unified environment due to the large overhead of nested function calls in python. Nevertheless, modular design enables to iterate faster and to leverage existing blocks that have been extensively validated already.
New features
- [python/tree] Add specialized 'deepcopy' operator for nested data structure. (#852)
- [gym_jiminy/common] Add 'BodyObserver' to get orientation and angular velocity of IMUs' parent bodies. (#844)
- [gym_jiminy/common] Add soft motor effort limit to 'MotorSafetyLimit' block. (#846)
- [gym_jiminy/common] Add PD controller mode to force instantaneous state update. (#847)
- [gym_jiminy/common] Add option to avoid clipping target motor accelerations of PD controller. (#849)
- [gym_jiminy/common] Add target joint velocity deadband to PD controller. (#849)
- [gym_jiminy/common] Add support of time offset to trajectory dataset. (#855)
- [gym_jiminy/common] Add 'order' input argument to 'build_flatten'. Speed up 1D special case. (#859)
Improvements
- [core] Improve error handling in 'Engine.read_log'. (#859)
- [python/dynamics] 'Trajectory.get' systematically returns by value. (#846)
- [gym_jiminy/common] Move leaky twist from mahony filter to body observer. (#849)
- [gym_jiminy/common] Add estimated IMU angular velocity to Mahony filter observation. (#844)
- [gym_jiminy/common] Share base engine measurement through all the layers of the pipeline. (#845)
- [gym_jiminy/common] Stop relying on 'true' sensor measurements in computations. (#845)
- [gym_jiminy/common] Stop relying on 'stepper_state' to get current time. (#845)
- [gym_jiminy/common] Add aggregated 'terminated', 'truncated' info key for composite env. (#847)
- [gym_jiminy/common] Do not overwrite 'BaseJiminyEnv.(observation|action)' if already defined. (#849)
- [gym_jiminy/common] More robust random seed initialization. (#849)
- [gym_jiminy/common] Support additional 'special' string when loading pipeline from toml. (#849)
- [gym_jiminy/common] Plot variables in reverse registeration order. (#852)
- [gym_jiminy/common] Only register block telemetry variables in debug or evaluation mode. (#852)
- [gym_jiminy/common] Robust ZMP computation when robot is free falling. (#854)
- [gym_jiminy/common] 'BaseJiminyEnv.evaluate' now returns both reward and info history. (#856)
- [gym_jiminy/common] Refactor 'StackedQuantity' to improve performance for aggregated large stack. (#857)
- [gym_jiminy/common] Refactor evaluation log file logics to allow for parallel evaluation. (#859)
- [gym_jiminy/rllib] Log num steps instead of num iterations in abscisse. Robust eval to unavailable log file. (#847)
- [gym_jiminy/rllib] Specify infer obs/act mirroring spec in args w/o relying on space. Only support vector obs/act. (#859)
Patches and bug fixes
- [core] Fix rounding error when computing impulse force breakpoints. (#852)
- [core] Fix wrong time 't' when computing derivative after successful integration. (#852)
- [core] Fix joint jacobian not systematically updated when dealing with external forces. (#852)
- [core] Fix impulse forces internal state not properly reset. (#853)
- [python/simulator] Fix replay of extra log files and trajectories. (#848)
- [python/robot] Fix default hardware generation. (#852)
- [gym_jiminy/common] Fix wrong initial RPY observation for Mahony filter. (#844)
- [gym_jiminy/common] Fix 'BaseJiminyEnv.play_interactive'. (#845)
- [gym_jiminy/common] Fix sensor noise/bias for locomotion env. (#846)
- [gym_jiminy/common] Fix plot of manually registered env variables. (#848)
- [gym_jiminy/common] Fix 'ControlledJiminyEnv.action' not reset during setup. (#849)
- [gym_jiminy/common] Fix Mahony filter angular velocity estimate. (#850)
- [gym_jiminy/common] Fix partially broken deformation observer. (#850)
- [gym_jiminy/common] Fix 'ShiftTrackingQuantityTermination' grace period shorter than horizon. (#853)
- [gym_jiminy/common] Fix Capture Point quantity initialization messing up with global state. (#854)
- [gym_jiminy/common] Fix 'evaluate' total reward computation. (#856)
- [gym_jiminy/rllib] Fix extremely slow shallow batch copy. (#859)
- [gym_jiminy/rllib] Fix true action mean computation and additional loss scalar reduction. (#860)
- [gym_jiminy/rllib] Monkey patch RLlib to fix numerous bugs harming convergence. (#860)
Miscellaneous
- [core] Rename 'positionLimit(Min|Max)' in 'positionLimit(Lower|Upper)' for consistency with Pinocchio. (#849)
- [core] Move 'logInternalStepperSteps' from 'stepper' to 'telemetry' options for consistency. (#852)
- [gym_jiminy/common] Use fortran order for flattening wrappers 'Flatten(Observation|Action)'. (#859)
- [misc] Rename 'mesh_path_dir' in 'mesh_dir_path' for consistency. (#848)
- [misc] Add support of 'gymnasium==1.0'. (#859)
- [misc] Add support of 'ray[rllib]==2.40'. (#859)