Jiminy: a fast and portable Python/C++ simulator of poly-articulated robots with OpenAI Gym interface for reinforcement learning
MIT License
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.
Published by duburcqa 4 months ago
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.
__getattr__
fallback in pipelines. (#808)Published by duburcqa 5 months ago
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).
Published by duburcqa 6 months ago
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.
Published by duburcqa 6 months ago
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.
Published by duburcqa 8 months ago
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.
Published by duburcqa 8 months ago
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.
Published by duburcqa 9 months ago
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.
Published by duburcqa 9 months ago
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.
Published by duburcqa 9 months ago
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).
Published by duburcqa 10 months ago
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.
Published by duburcqa about 1 year ago
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.
__iter__
. (#633)Published by duburcqa over 1 year ago
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.
Published by duburcqa over 1 year ago
The main objective of this release (the last one for 1.7.X) was to upgrade all the dependencies (Python and C++) to the latest version, which has not been done since more than 1 year already. It comes with fully supporting of Python 3.10, initial support of 3.11 (no gym_jiminy
), and dropping of Python<3.8. In addition, many bugs have been fixed. Most of them are related to the viewer, but some others are related to the core engine and are more critical. Finally, high quality type hints are now provided for the python bindings of jiminy core.
jiminy_py
including C++ core.Published by duburcqa almost 2 years ago
This release fixes many bugs that has been introduced along the way. Notably, the discontinuity of the integration state and IMU measurements have been fixed, as well as the contact dynamics.
Published by duburcqa over 2 years ago
Adding flexibility at fixed frame is now fully supported and the integration in notebooks have been greatly improved. The interactive viewer is now working much better, notably on Mybinder or Kaggle. As a fallback, a static video mode for notebooks has been added and is used preferably on google colab that is still working unreliably. Besides, meshes with texture are now loading properly in Meshcat.
gym_jiminy_rllib
.Published by duburcqa over 2 years ago
This release fixes a bunch of bugs mainly introduced by the previous one and extend the serialization to geometry models to support convex shapes.
Published by duburcqa over 2 years ago
It is now possible to dump the whole robot (including visual and collision meshes) in log files. These standalone log files can be replayed on any system without requiring any extra file. It is convenient for sharing simulation results and safe long-term backups.
Published by duburcqa over 2 years ago
This release brings some minor performance improvements. The dependency management in Python has been rationalized to allow users to select desired features and prevent version incompatibilities. Support of Python 3.10 have been prepared to be distributed as soon as wheels for all dependencies will be available. Finally, deprecated documentation has been updated.
Published by duburcqa over 2 years ago
A few bugs that have been introduced in the previous release and earlier have been fixed. Exception handling has been improved to diagnose if something is going wrong with the physics.