Skip to content

Releases: duburcqa/jiminy

Comprehensive environment pipeline design

02 Dec 13:12
9d0f5aa
Compare
Choose a tag to compare

The environment pipeline design has been streamlined. It is not only more versatile and faster but also less buggy. It should be ready now to be used for real-world applications.

New features

  • [gym_jiminy/common] Add 'AdaptLayoutObservation' that generalizes 'FilterObservation'. (#835)
  • [gym_jiminy/common] Add 'QuantityObserver' block. (#838)
  • [gym_jiminy/common] Enable env composition to augment the observation space with trajectory reference. (#838)
  • [gym_jiminy/common] Add 'ScaleObservation', 'ScaleAction' env pipeline wrapper blocks. (#839)

Improvements

  • [python/dynamics] Take into account stride offset when trajectory time is wrapping. (#838)
  • [python|gym_jiminy] More natural figure layout to improve readability. (#837)
  • [gym_jiminy/common] Do not permanently alter original simulation options with enabling debug and/or evaluation modes. (#832)
  • [gym_jiminy/common] Rewrite binary log file automatically when calling 'BaseJiminyEnv.stop' in debug or evaluation mode. (#832)
  • [gym_jiminy/common] Add previous action as input argument for evaluation policy callback. (#832)
  • [gym_jiminy/common] Automatic environment pipeline update. (#832)
  • [gym_jiminy/common] Improve numerical stability and speed of 'swing_from_vector'. (#834)
  • [gym_jiminy/common] Add support of 'none' in pipeline config files. (#834)
  • [gym_jiminy/common] Add 'ignore_unbounded' optional argument to flatten obs/act wrappers. (#834)
  • [gym_jiminy/common] Add 'compute_rpy' optional argument to mahony observer. (#837)
  • [gym_jiminy/common] Add 'compute_rpy' optional argument to deformation estimator. (#837)
  • [gym_jiminy/common] Add locking mechanism to trajectory databaset. (#838)
  • [gym_jiminy/common] More robust pipeline registration mechanism. (#838)
  • [gym_jiminy/common] Support string representation of enums in pipeline config. (#838)
  • [gym_jiminy/common] Faster env pipeline. (#841) (#842)
  • [gym_jiminy/toolbox] Add support of arbitrarily nested task-settable env. (#832)
  • [gym_jiminy/envs] Add mirror mat to obs/action spaces. (#832)

Patches and bug fixes

  • [core] Fix symbol visibility issues for some classes on windows. (#836)
  • [core] Fix bindings and serialization of convex geometry meshes. (#836)
  • [core] Fix 'array_copyto' helper. (#841)
  • [python/viewer] Fix 'add_camera'. (#831)
  • [python/viewer] Use firefox instead of chromium for offscreen rendering with meshcat to fix rendering on MacOS VM. (#832)
  • [python/viewer] Fix support of '-' in robot name. (#834)
  • [python/viewer] Fix conversion of 'hppfcl.Convex' to Panda3D. (#836)
  • [gym_jiminy/common] Disallow switch between evaluation and training mode when a simulation is running. (#832)
  • [gym_jiminy/common] Fix replay if no simulation is running. (#832)
  • [gym_jiminy/common] Fix composed reward computation. (#832)
  • [gym_jiminy/common] Use metaclass instead of inheritence for abstract classes. (#832)
  • [gym_jiminy/common] Enable typing of the obs and action spaces for 'gym.Env'. (#832)
  • [gym_jiminy/common] Fix nested gym space helpers. (#832)
  • [gym_jiminy/common] Fix missing final state when writing eval/debug log. (#834)
  • [gym_jiminy/common] Fix 'quat_multiply' to support in-place operation. (#834)
  • [gym_jiminy/common] Add twist estimate in internal mahony state if estimated. (#834)
  • [gym_jiminy/common] Fix mahony filter leaky integration for very small time constant. (#834)
  • [gym_jiminy/common] Check IMU and flex frames not empty when adding Mahony filter. (#834)
  • [gym_jiminy/common] Fix base 'BaseJiminyEnv.stop' not called in pipeline. (#834)
  • [gym_jiminy/common] Support pipelines without any layer. (#834)
  • [gym_jiminy/common] Make sure that the initial PD controller state is within bounds. (#835)
  • [gym_jiminy/common] Fix trajectory file never closed if loading fails. (#838)
  • [gym_jiminy/common] Add composition wrapper before observer-controller blocks. (#838)
  • [gym_jiminy/common] Fix 'AdditiveMixtureReward' for 'order=inf'. (#838)
  • [gym_jiminy/common] Fix partially broken 'spaces.build_reduce'. (#839)
  • [gym_jiminy/rllib] Full refactoring to support ray-rllib 2.38. (#832)
  • [misc] Drop support of Python<3.10. (#831)

Full set of termination conditions

17 Jul 10:55
e58bdb5
Compare
Choose a tag to compare

This release introduces composition of termination conditions via a first-class abstraction, in the same way as generic quantities and reward components. Apart from that, the viewer now supports adding extra camera to the scene, including depth map. In the later case, the implementation has been heavily optimised for speed. It takes about 400us on a laptop with intel integrated chipset to render a 128 x 128 depth map. One last new important feature is the support of smooth random ground generation through 2D Perlin processes. Querying the ground height at multiple locations in a LIDAR fashion has also been optimised for speed. It takes about 5us for 100 points. Finally, some critical components has been sped up, notably quantity management and evaluation is now one order of magnitude faster (10% to 25% overhead compare to physics evaluation for a full set of about 20 reward and termination conditions), and the viewer should be about twice faster for both onscreen and offscreen rendering with Panda3D.

image

image

New features

  • [core] All random processes are now differentiable. (#799)
  • [core] Add Perlin ground generators. (#799) (#823) (#825)
  • [python/viewer] Add support of user-specified extra cameras (rgb and depth). (#826)
  • [gym/common] Add multi-ary operator quantity. (#814)
  • [gym/common] Add termination condition abstraction. (#812)
  • [gym/common] Add support of termination composition in pipeline environments. (#812)
  • [gym/common] Add quantity shift and drift tracking termination conditions. (#812)
  • [gym/common] Add base roll/pitch termination condition. (#813)
  • [gym/common] Add base relative height termination condition. (#813)
  • [gym/common] Add foot collision termination condition. (#813)
  • [gym/common] Add safety limits termination condition. (#814)
  • [gym/common] Add robot flying termination condition. (#815)
  • [gym/common] Add power consumption termination condition. (#816)
  • [gym/common] Add ground impact force termination condition. (#816)
  • [gym/common] Add base odometry pose drift tracking termination condition. (#817)
  • [gym/common] Add motor positions shift tracking termination condition. (#817)
  • [gym/common] Add relative foot odometry pose shift tracking termination conditions. (#820)

Improvements

  • [core] Make all Perlin processes faster and copy-able. (#799) (#824)
  • [python/viewer] Significantly speed-up both offscreen and onscreen rendering for Panda3D. (#826)
  • [gym/common] More generic stacking quantity. (#812)
  • [gym/common] More generic actuated joint kinematic quantity. (#814)
  • [gym/common] Add 'order' option to 'AdditiveReward'. (#821)
  • [gym/common] Refactor quantity management to dramatically improve its performance. (#821)

Patches and bug fixes

  • [core] Fix robot serialization issue. (#821)
  • [core] Fix negative time support for all existing random processes. (#799)
  • [python/tree] Fix 'tree.unflatten_as' mixing up key order for 'gym.spaces.Dict'. (#819)
  • [python/simulator] Consistent keyword arguments between 'Simulator.build' and 'Simulator.add_robot'. (#821)
  • [python/viewer] Fix MacOS support. (#822)
  • [gym/common] Fix quantity hash collision issue in quantity manager. (#821)

Full set of quantities and reward components

19 Jun 05:23
Compare
Choose a tag to compare

The previous release populates the quantities and reward component toolboxes recently introduced with generic and commonly used building blocks of a complete learning pipeline. Various bugs attributed to the early stage development of this toolbox has been fixed and now its core is expected to be significantly more mature.

New features

  • [core] Add option to log constraint lambda multipliers. (#809)
  • [python|gym] Add contraint lambda multipliers to state and extracted trajectory. (#809)
  • [gym/common] Add 'log3|6', 'exp3|6', '(xyz)quat_difference', and 'quat_apply' vectorized math utils. (#807)
  • [gym/common] Add unary operator quantity. (#803)
  • [gym/common] Add odometry pose quantity. (#803)
  • [gym/common] Add mean quaternion quantity. (#804)
  • [gym/common] Add foot odometry pose quantity. (#804)
  • [gym/common] Add relative foot poses quantity. (#805)
  • [gym/common] Add foot vertical forces quantity. (#810)
  • [gym/common] Add base angular momentum quantity and reward. (#807)
  • [gym/common] Add relative foot positions and orientations tracking reward. (#807)
  • [gym/common] Add actuated joint tracking reward. (#803)
  • [gym/common] Add tracking base height reward. (#803)
  • [gym/common] Add foot pose tracking reward. (#806)
  • [gym/common] Add cature point quantity and capture point tracking reward. (#803)
  • [gym/common] Add angular momentum minimisation reward. (#808)
  • [gym/common] Add projected support polygon zmp stability margin maximisation reward. (#808)
  • [gym/common] Add ground contact friction minimisation reward. (#808)
  • [gym/common] Add foot force distribution reward. (#810)

Improvements

  • [gym/common] Add support of multi-frame quantities. (#804)
  • [gym/common] Unify all frame orientation representations as one quantity. (#805)

Patches and bug fixes

  • [core] Allow integer reduction ratio at motor level for unbounded revolute joints. (#803)
  • [core] Make sure no constraint is added/removed if simulation is running. (#809)
  • [python/dynamics] Fix trajectory interpolation preferring t+ over t-. (#809)
  • [gym/common] Robust deletion of quantities in control flow. (#803)
  • [gym/common] Fix reset of automatically refreshed quantities. (#803)
  • [gym/common] Fix quantity eval mode handling. (#803)
  • [gym/common] Fix reward deletion cleanup. (#803)
  • [gym/common] Fix env action not cleanup at reset. (#803)
  • [gym/common] Refresh state quantities only if needed. (#809)

Miscellaneous

  • [core] Enforce unique constraint name per registry not globally, then remove now irrelevant helpers. (#809)
  • [core] Replace constraint tree 'node' terminology by 'registry' for clarity. (#809)
  • [core] Rename 'runge_kutta_dopri5' in 'runge_kutta_dopri' for clarity. (#810)
  • [python/viewer] Fix support of 'matplotlib>=3.9.0'. (#803)
  • [gym/common] Remove error-prone, confusing and slow __getattr__ fallback in pipelines. (#808)
  • [misc] Fix segfault on windows due to vcruntime conflicts. (#808)

New first-class reward components

24 May 12:55
8ff3ac6
Compare
Choose a tag to compare

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)

Maintenance release

28 Apr 20:33
Compare
Choose a tag to compare

Robots are now fully serialized in log files, including all their hardware but not their controller. This means that they can be used for running new simulation without any issue. Previously, they are only suitable for viewer replay. Apart from that, some outdated environment pipeline wrappers have been refactored to significantly improve their performance.

New features

  • [core] Full support of serialization of 'Robot'. (#770) (#775)

Improvements

  • [core] Log the acceleration both at the end and the beginning of a step if dynamics has changed. (#779)
  • [python/simulator] 'plot' now support multi-robot simulations. (#770)
  • [gym/common] Speedup 'PDController' env pipeline block. (#770)
  • [gym/common] Speedup 'StackedJiminyEnv' wrapper. (#770)
  • [gym/common] More generic 'FilterObservation', 'StackedJiminyEnv' wrappers. (#770) (#776)

Patches and bug fixes

  • [core] Fix pessimistic step adjustment that could lead to undeserved integration failure.
  • [core] Fix inconsistent acceleration after updating discrete-time controller command. (#779)
  • [gym/common] Improve 'Env.render_mode' support.
  • [gym/rllib] Fix multi-GPU support using custom PPO (#774)

Miscellaneous

  • [gym/zoo] Cleanup and speedup toy model environments. (#770)
  • [misc] Add RL tutorial notebook.

New first-class quantity manager

19 Apr 17:05
60f60ec
Compare
Choose a tag to compare

A new API for defining quantities in reward and termination conditions computations has been added. The first objective is to make much easier to new comers that are not used to rigid body dynamics, and secondly, to compute them as efficiently as possible. In this regard, a new quantity manager is responsible for keeping track of all quantities involved in computations and optimisation the overall computation path, by avoiding redundant computations through caching and sharing of intermediary quantities, but also by aggregating them whenever possible to take advantage of vectorisation optimally. Apart from that, the multi-robot simulations have been made much easier by supporting them via Python API. Finally, backlash in simple motor transmission are now natively supported, modelled an extra virtual joint together with a massless body.

New features

  • [core] Add backlash support at motor-level. (#767)
  • [python/simulator|python/plot] First-class multi-robot support. (#754) (#764) (#766)
  • [gym/common] Introduce new first-class quantity manager. (#749) (#751) (#752) (#756)

Improvements

  • [core] Clarify terminology: 'Rigid' by 'Mechanical', 'Original' by 'Theoretical', 'Actual' by 'Extended'. (#753) (#762) (#763)
  • [core] User is now systematically responsible for serializing constants before telemetry registration. (#753)
  • [core] Consistent export/import/get/set options between single- and multi-robot simulations. (#758) (#760) (#761)
  • [core/python] Add method to query heightmaps on multiple positions at once. (#750)
  • [gym/common] Plot state, action and features of all pipeline blocks. (#750)
  • [gym/common] PD controller now satisfies position, velocity and acceleration bounds. (#750) (#765) (#768)
  • [gym/common] Allows PD control with position action. (#750)
  • [gym/common] Decouple PD controller action order adapter from acceleration integration. (#764)

Patches and bug fixes

  • [core] Fix bias/noise check for EncoderSensor. (#744)
  • [core] Fix exception not caught during stepper integration. (#747)
  • [core] More appropriate tolerance when checking GCD to avoid false positive. (#753)
  • [python/viewer] Fix arrow maker with panda3d backend.
  • [python/viewer] Fix viewer automatic closing during replay not working. (#756)
  • [gym/common] Fix corrupted robot proxy if model changes. (#746)

Miscellaneous

  • [core] Fix some symbols not exported by mistake. (#742)
  • [gym/common] Refactor 'compute_command' to operate in-place. (#764)
  • [gym/rllib] Migrate from ray[rllib]==2.5.0 to 2.9.*. (#739)
  • [misc] More robust build procedure. (#739) (#746)
  • [misc] Upgrade C++ dependencies. (#741)
  • [misc] Fix numpy version requirement. (#750)

Add deformation estimator block

07 Mar 11:03
4e977cb
Compare
Choose a tag to compare

A observer block for multiple punctual deformations has been implemented at position-level only. This is based on the work of Matthieu Vigne et al.. In addition, a bunch of minor bugs has been fixed as usual.

New features

  • [gym/common] Add 'DeformationEstimator' block. (#732)

Improvements

  • [core] More bad control flow checks. (#730)
  • [core/python] 'Model' can now be instantiated from Python. (#730)
  • [gym/common] Add 'compute_tilt_from_quat', 'swing_from_vector', and 'remove_twist_from_quat'. (#731)
  • [gym/common] Allow negative block update period to match env step. (#734)

Patches and bug fixes

  • [core] Fix broken 'getRigidVelocityFromFlexible'. (#732)
  • [core/python] Fix partially broken 'FunctionalController' bindings. (#730)
  • [core/python] Fix multiple typos. (#731)
  • [python/simulator] Fix 'robot' and 'robot_state' corrupted if robot is replaced. (#731)
  • [gym/common] Fix 'refresh_observation' being called before 'initialize_buffers' at simulation start. (#731)
  • [gym/common] Fix broken mahony filter for 'twist_time_constant != None'. (#731)
  • [gym/common] Fix support of non-batched mode for generic math. (#731)
  • [gym/common] Fix 'matrix_to_rpy' to be consistent with 'pin.matrixToRpy'. (#731)
  • [gym/envs] Fix broken 'Ant' environment. (#731)

Miscellaneous

  • [core] Print warnings even for release build type. (#731)
  • [gym/common|gym/toolbox] Promote generic SE3 math utilities from toolbox to common module. (#731)
  • [misc] Update documentation. (#736)

Long-overdue refactoring

21 Feb 08:39
df9b31e
Compare
Choose a tag to compare

The confusing and unnecessary notion of system, ie a named pair (robot, controller), has been completely removed. All robots now have a name, and the controller is now an integral part of the robot. Similarly, the single-robot wrapper around the multi-robot Engine has been removed from C++ core. Note that the Python wrapper Simulator is still single-robot for now. Finally, the numerical stability of the constraint solver has been improved using the under-relaxation technics.

Improvements

  • [core] Add relaxation to PGS solver to mitigate convergence instabilities. (#726)

Patches and bug fixes

  • [core] More conservative step adjustment for adaptive steppers. (#724)
  • [python/plot] Synchronise x-axes on all tabs by default. (#724)
  • [gym/common] Ease debugging of Gym environments. (#724)
  • [gym/common] Do not enforce 'dtMax'. (#727)

Miscellaneous

  • [core] Remove confusing and unnecessary 'System' hierarchy. (#728)
  • [core] Remove single-robot 'Engine' class. (#728)

Hot fixes

13 Feb 22:15
7dbcdfc
Compare
Choose a tag to compare

A few bugs that have been recently have been finally fixed, including some poorly motivated changes in adaptive steppers that was causing numerical instabilities. In addition, a long-standing bug that was leading to integration failure in a very specific, but not so unusual, scenario.

Improvements

  • [core] Error and warning reporting more consistent with Python. (#716)

Patches and bug fixes

  • [core] Fix exception handling for visco-elastic coupling and internal flex forces. (#716)
  • [core] Fix error estimation too optimistic for adaptive steppers. (#716)
  • [core] Fix partially broken step adjustment optim that could lead to integration fail. (#721)
  • [gym/zoo] Fix 'acrobot' and 'cartpole' env using wrong integrator. (#719)

Miscellaneous

  • [misc] Fix easy install doc. (#721)
  • [misc] Fix support of virtual env ('venv', 'pyenv', ...) when building dependencies. (#721)

Maintenance release

12 Feb 08:39
51b1451
Compare
Choose a tag to compare

First, naming conventions has been reviewed over the whole C++ codebase to make sure they are grammatically correct and consistent. Secondly, return codes have been dropped in favour of throwing exception, which makes everything more readable and much more in line with Python.

Patches and bug fixes

  • [core] Revert 'crba' to ensure positive definite inertia matrix. (#709)
  • [python/viewer] Fix video recording on Apple Silicon with meshcat. (#706)
  • [python/viewer] Fix meshcat not properly terminated. (#715)
  • [gym/common] Fix circular reference in 'BaseJiminyEnv' causing memory leak. (#715)

Miscellaneous

  • [core] More consistent naming conventions. (#705)
  • [core] Remove return codes and throw exceptions instead. (#713)
  • [python] Get rid of unmaintained 'dm-tree' dependency. (#706)
  • [misc] Update C++ dependencies to latest releases. (#713)