This release introduces many much-wanted features such as geometry collisions and wheel constraint, and lays the foundation for learning locomotion tasks for any robot out-of-the-box without configuration. The accuracy of the integration has been greatly improved by implementing a Runge-Kutta stepper working on Lie-Group.
New features:
* [core] Add 'mechanicalReduction' motor option.
* [core] Add 'successiveIterFailedMax' stepper option.
* [core] Add meshPackageDirs optional argument to model.initialize method.
* [core] Add support of 'continuous' joint type.
* [core] Add support of encoders and motors of any 1-dof type.
* [core] Implement methods to add and remove frames from the robot model.
* [core] Enable to postpone Controller def after engine init, and to change it between simu.
* [core] Add support of analytical wheel constraint.
* [core] Add support of mesh collisions using HPP-FCL. Using convex hull instead of actual geometries for evaluating collisions.
* [core] Implement steppers working inherently on Lie-algebra, including Explicit Euler and Runge-Kutta steppers.
* [python] Enable to specify collision bodies, contact points, and ground model in TOML config file.
* [python] Add automatic default configuration generation based on URDF file.
* [python/robot] Automatically convert box primitive body collision in contact points for numerical robustness.
* [python/simulator] Refactor of engine/simulator classes to be more versatile yet simpler.
* [python/simulator] Add 'plot' method to simulator to display simulation data up to current time.
* [gym] Add base locomotion learning environments.
* [gym] Enable to set camera pose in env 'render' method.
Bug fixes:
* [core] Fix various segfault in case of exceptions.
* [core] More verbose error message when failing to load URDF model.
* [core] Fix systemData returning unusable robot and controller.
* [core] Fix exception catching addCouplingForce.
* [python/dynamics] Fix dynamics quantities not properly initialized at engine reset.
* [python/viewer] Fix play_trajectory 'wait_for_client' option not used.
* [gym] Fix terminal reward computation.
Improvements:
* [core] Expose sensor data individually. Add sensor __repr__. Expose EngineMultiRobot systems vector in Python.
* [core] Add ControllerFunctor default value 'None' for command and internal dynamics arguments.
* [core] More specific Utilities error messages.
* [core] Compute the centers of mass systematically.
* [core] Check that the initial state is not out of bounds.
* [Viewer] Remove deprecation warning of Pinocchio.
* [Viewer] Minor improvement of error handling.
* [python|gym] Improve PEP8 compliance and typing.
* [python/dynamics] 3 points in contact during freeflyer computationg instead of aligned with frame of closest contact point.
* [python/dynamics] Take into account collision body orientation for box primitive when computing freeflyer.
* [python/viewer] Refactor Viewer to make it simpler and clearer.
* [python/viewer] More robust handling of meshcat comms in Jupyter.
* [gym] Enable to refresh observation and action spaces separately.
* [gym] Properly handle step integration failure.
* [gym] Fix 'done' flag handling in 'step' method.
* [gym] Enable to define custom neutral configuration.
* [gym] Minor refactoring to enable getting normal env from goal env without being hacky nor code duplication.
* [gym] Remove 'is_success' info in base env.
Miscellaneous:
* [misc] Update dependency versions.
* [misc] Remove meshes and use primitives for toys models.
* [misc] Remove messy examples and fix the others.
* [misc] Multi-level data folder architecture.
Breaking changes:
* [misc] Remove Python 2 compatibility code.
* [core] Replace state x arguments by configuration q and velocity v for the input arguments of every engine methods .
* [python] Remove EngineAsynchronous and BasicSimulator, add Simulator gathering the features of both.
* [gym] Remove 'TorqueControl' from walker name since it is the default