Gym Jiminy, and especially the pipeline design tools, have been heavily refactored to improves performance. The keystone was to share references to avoid copies and memory allocations as such as possible. It also removes automatic clamping of actions/observations. It is up to the user to re-enable it, e.g. using gym wrappers. In addition, the efficiency of computationally demanding gym space helpers and provided PID controller block have been greatly enhanced. 3 times speed-up is to be expected.
Improvements:
* [core/python] Add extra parameter to convertToPython to return either reference or copy.
* [python|gym] Add unsafe set handle for controller to avoid of the cost of handling initialization separately.
* [gym] Refactor observation block chaining to use references for efficiency.
* [gym] Refactor GoalEnv to make it easier to use.
Bug fixes:
* [core] Fix segfault in some cases when 'start' method fails.
Miscellaneous:
* [core] Print error and warning messages on stderr instead of stdout.
* [core] Always remove robot lock when calling Engine.Stop.
* [core/python] Preserve constness of systemState Python bindings.
* [gym] Use np.core.umath.* directly in helper methods for efficiency.
* [gym] Reorder branches in helper methods to find most frequent case first.
* [gym] Add engine/stepper_state/system_state/sensors_state proxies to speed-up attribute lookup.
* [gym] Use 'dict/{}' instead of OrderedDict in 'step' method and calles for efficiency.
* [gym] Observe state as a dict instead of array to avoid memory allocation.
* [gym] Do not clip observation/action by default for efficiency.
* [gym] Pre-compiled PID law for efficiency.
* [gym] Rename _clamp in clip for consistency with numpy.
* [gym] No longer use 'encoder.fieldnames' to define state and pid target fields.