Skip to content

Releases: duburcqa/jiminy

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)

Enhanced random number generation

30 Jan 17:56
Compare
Choose a tag to compare

This release addresses a few long-standings issues that has been planned a while ago. First, ground profile heightmaps are now converted in collision geometry object and decimated if requested. This was a pre-requisite for generic collision detection. Next, each engine now owns its own local random number generator instead of relying on some hidden global state that was causing concurrency issues. In additional, a few bugs have been fixed here and there. Notably, force sensors are now only measuring contact forces acting on a given body rather then all external forces. It is the first release to partially support Python 3.12 (jiminy_py module).

New features

  • [core] Faster random number generator (PCG32).
  • [core] Faster sampling of random matrices (uniform and normal distributions) from any generator (including numpy).
  • [core] Heightmap discretization now returns a geometry object and support decimation.
  • [python/viewer] Implement ground rendering from meshcat.

Improvements

  • [core] Get rid of global random state.
  • [core] 'ForceSensor' measures only contact forces.
  • [core] Passing wrong size to 'isPositionValid' does not trigger exception anymore.
  • [core/python] Slightly faster functional controller by removing useless layer of indirection.
  • [gym_jiminy/common] 'sample' utility now supports any custom distribution.

Patches and bug fixes

  • [core] Fix sensor delay computation.
  • [core] Fix sensor measurements at start.
  • [core] Fix broken PeriodicFourierProcess since 1.7.18.
  • [python/viewer] Fix camera pose when travelling is enabled with panda3d.
  • [gym_jiminy/common] Fix support of empty arrays for 'contains' space utility.

Miscellaneous

  • [python/viewer] Detect Apple Silicon GPU to enable high-res shadow for panda3d.
  • [misc] Add support of Python 3.12 for 'jiminy_py' module.

Maintenance release

02 Jan 13:18
Compare
Choose a tag to compare

As usual, many bugs have been fixed. Most of them are related to the viewer and a few others are related to the core engine but none are critical. It is supposed to be the latest 1.7.X release since breaking changes are planned.

New features

  • [core] Add option to set baumgarte position and velocity gains separately. (#647)
  • [python/viewer] Add async mode with panda3d backend. (#664)
  • [python/viewer] Add support of torus and partial cylinder with panda3d. (#672)
  • [gym/toolbox] More orientation conversion utils. (#430)
  • [gym/zoo] Add 'digit' bipedal robot. (#430)

Improvements

  • [core] Do not enforce configuration bounds at init for spring-damper contact model. (#654)
  • [core] Rename 'FixedFrameConstraint' in 'FrameConstraint'. (#677)
  • [core/python] Add partial support of 'pathlib.Path' objects. (#672)
  • [python/robot] Improve default hardware file generation. (#430)
  • [gym/common] PD controller block now support unbounded joints. (#430)
  • [gym/toolbox] More generic vectorized (batched) SO3 utils. (#652)

Patches and bug fixes

  • [core] Fix inconsistent adaptive stepper error computation. (#647)
  • [core] Fix rare edge-case causing segfault when setting options. (#647)
  • [core] Fix inertia projection formula. (#649)
  • [core] Fix serialization of geometry objects. (#430)
  • [core] Fix exception when saving binary log file with empty variables. (#430)
  • [core] Fix flexible from/to rigid config helpers. (#659)
  • [core] Fix non-repeatable simulation due to partial hyteresis reset. (#662)
  • [core] Fix wrong state and derivative during computation of extra terms. (#684)
  • [core] Fix internal effort computation. (#684)
  • [python/simulator] Fix exception when manually closing viewer. (#684)
  • [python/plot] Fix minor plotting bugs. (#647)
  • [python/viewer] Fix replay viewer exception for 1DoF systems using 'panda3d-sync'. (#648)
  • [python/viewer] Fix viewer closing exception handling with panda3d backend. (#672)
  • [python/viewer] Fix wrong anchor for cylinders and arrows with panda3d. (#672)
  • [python/viewer] Fix some edge-cases with panda3d backend. (#673) (#675)
  • [python/viewer] Fix memory leaks caused by 'atexit' registration. (#683)
  • [python/viewer] Fix exception handling at init. (#684)
  • [gym/common] Fix wrong frame name for default relative camera pose. (#430)

Miscellaneous

  • [core] Refactor C++ project structure and modernize coding style. (#653) (#655) (#656) (#656) (#656) (#659) (#674) (#677) (#678) (#681) (#682) (#683)
  • [misc] Apply clang format to the whole C++ codebase. (#651) (#656)
  • [misc] Update all C++ dependencies. (#669) (#672)
  • [misc] More robust boost python shared lib detection on MacOS. (#680)
  • [misc] Enable back python stubs generation on OSX. (#680)
  • [misc] More robust build script on unix systems. (#683)
  • [misc] Fix documentation generation. (#647)
  • [misc] Fix notebook tutorial. (#648)

Speed-up pipeline env and add useful blocks

29 Sep 14:22
d26bc53
Compare
Choose a tag to compare

This release aims at making pipeline environment more efficient and practical for training real robots using RL. In particular, highly-efficient pre- and post- processing wrappers have been added, including flattening and normalization of observations and actions. A pipeline env leveraging these new features on Atlas has a real time factor of 55 on a single core.

New features

  • [gym_jiminy/common] Add 'build_map', 'build_reduce' generic utils for nested spaces. (#641)
  • [gym_jiminy/common] Add 'NormalizeObservation' and 'NormalizeAction' wrappers. (#639, #644)
  • [gym_jiminy/common] Add 'FlattenObservation' and 'FlattenAction' wrappers. (#644)
  • [gym_jiminy/common] Add 'FilterObservation' wrapper. (#639, #644)
  • [gym_jiminy/common] Add motor safety control block. (#639, #644)
  • [gym_jiminy/common] Deal with twist estimate drift in Mahony Filter. (#645)

Improvements

  • [core] Skip useless forward kinematics when updating telemetry. (#635)
  • [core] Refactor telemetry sender to improve efficiency. (#635)
  • [core] Monitor number of successive constraint solving failure. (#644)
  • [core/python] Add optimized 'array_copyto' helper method. (#641)
  • [gym_jiminy/common] Better handling of maximum simulation duration. (#621)
  • [gym_jiminy/common] Speed-up env pipeline. (#632, #633, #634, #635, #641)
  • [gym_jiminy/common] Improve motor to encoder handling in control blocks. (#635, #641)
  • [gym_jiminy/common] Add custom velocity limit to PID controller. (#637)
  • [gym_jiminy/common] Refactor build pipeline to avoid dynamic class definition. (#637)
  • [gym_jiminy/common] Add internal block state to telemetry. (#639)
  • [gym_jiminy/common] Add tolerance to env obs contain check. (#639)
  • [gym_jiminy/common] Add option to MahonyFitler block to remove twist from estimate. (#644)

Patches and bug fixes

  • [core] Fix propagation of rotor inertia and command limit. (#621)
  • [core] Fix Euler updating derivative at beginning instead of end of step. (#625)
  • [core/python] Fix sensors map iterator __iter__. (#633)
  • [core/python] Fix 'Robot.constraints' and 'JointConstraint.rotation_dir' accessors. (#637)
  • [python/plot] Fix various visual glitches and improve layout. (#643)
  • [python/viewer] Fix exception for negative sleep time. (#622)
  • [gym_jiminy/rllib] Fix custom config handling. (#631)
  • [gym_jiminy/common] Remove useless action buffer from ControllerBlock. (#635)

Miscellaneous

  • [misc] Full support of Python 3.11 for MacOS. (#621)
  • [misc] Fix embedded shared library optional loading. (#622)
  • [misc] Update all C++ dependencies and move to C++17. (#631)
  • [misc] Cleanup cmake instruction set propagation to pip c++ modules. (#637)
  • [misc] Add support of CppADCodeGen. (#637)
  • [misc] Enable numba cache for faster startup. (#641)

Env pipeline refactoring

27 Jun 07:36
Compare
Choose a tag to compare

The implementation of pipeline design for learning environments (block diagram paradigm) has been completely revamped to be more versatile and modular. In addition, it now induces almost no overhead thanks to a new zero-copy architecture. Following these changes, the existing PID control block has been greatly improved and a Mahony filter block estimating IMU orientations from measurements has been added. The pipeline for Atlas leveraging these feratures has a real time factor of 30 on a single core.

New features

  • [core|python] Enable to register int64 to controller telemetry. (#616)
  • [python/viewer] Support specifying relative camera pose in 'play_trajectories' method. (#608)
  • [gym_jiminy/common] 'PIDController' action is now N-th order deriv. of target motors positions. (#616)
  • [gym_jiminy/common] Full support of observer/controller internal state in pipelines. (#616)
  • [gym_jiminy/common] Add Mahony filter pipeline block and activate it for all robotics envs. (#618)
  • [gym_jiminy/toolbox] Add vectorized quat to rpy math utils. (#608)

Improvements

  • [core] IMU sensors no longer measure quaternion directly. (#618)
  • [core|python] More robust log loading. (#612)
  • [python/log] More consistent custom mesh search path handling. (#613)
  • [python/viewer] Exception handling when creating graphics pipe for panda3d. (#608)
  • [python/viewer] Update floor tiling and skybox to look the same in meshcat and panda3d. (#616)
  • [gym_jiminy/common] FrameRateLimiter only applies to 'human' render mode by default. (#614)
  • [gym_jiminy/common] Refactor pipeline for consistency, versatility, and efficiency (zero-copy). (#618)
  • [gym_jiminy/common] Automatically register pipeline observers features to jiminy telemetry. (#618)

Patches and bug fixes

  • [core] Fix SensorsDataMap without shared memory. (#616)
  • [python] Fix memory leak due to circular reference.
  • [python/simulator] Fix handling of extra keyword arguments in 'render' method. (#616)
  • [python/viewer] Fault tolerance at init. (#608)
  • [python/viewer] Fix default viewer robot name in Simulator. (#608)
  • [python/viewer] Fix wrong camera rotation when relative to itself. (#616)
  • [gym_jiminy/toolbox] Consistent in-out types in math utils. (#611)
  • [gym_jiminy/rllib] Fix user-specified 'log_root_path' arg ignored by "initialize' method. (#607)
  • [gym_jiminy/rllib] Fix exception in 'train' method when 'reward_threshold' not defined by env. (#607)
  • [gym_jiminy/rllib] Fix 'PPO' init by reverting changes. (#609)
  • [gym_jiminy/rllib] Fix 'evaluate_local_worker' for 'num_envs_per_worker' > 1. (#609)

Miscellaneous

  • [core/python] Do not support 'np.matrix' anymore. (#618)
  • [misc] Clarify TLMC specification. (#604)
  • [misc] Add manual collision detection example script. (#608)
  • [misc] Add TorchRL-based acrobot training example. (#615)
  • [misc] Update pinocchio and hpp-fcl deps. (#608)
  • [gym_jiminy/common] Migrate from 'gym<0.24' to 'gymnasium>=0.26,<0.29'. (#616)
  • [gym_jiminy/rllib] Migrate from 'ray~=2.2.0' to 'ray~=2.5.0'. (#616)
  • [misc] Full support of Python 3.11 on Linux. (#616)