jiminy

Jiminy: a fast and portable Python/C++ simulator of poly-articulated robots with OpenAI Gym interface for reinforcement learning

MIT License

Downloads
21.5K
Stars
196
Committers
6
jiminy - [gym] Enhanced interactive mode.

Published by duburcqa over 3 years ago

The interactive mode of gym_jiminy, allowing to play with a robot during a simulation using mouse and keyword input, has been greatly improvement in terms of features, reliability, and computational efficiency. Besides, every minor framerate drops of the viewer using Panda3d has been addressed to make the experience more enjoyable. It is now possible to replay more than 10 log files using integrated graphics at solid 30fps.

New features

  • [python/viewer] Add option to not lock camera pose but only look-at point when travelling is enabled using Panda3d.

Improvements

  • [python/viewer] Display freeflyer external forces by default.
  • [python/viewer] Add getter for camera pose.
  • [python/viewer] Improve viewer refresh efficientcy by only forcing display update whenever necessary.
  • [python/viewer] Add support of frame index to define relative lookup and camera pose.
  • [python/viewer] Add repeat capability to 'jiminy_replay' entrypoint.
  • [gym/common/envs] More versatile interactive loop helper.
  • [gym/common/envs] Add support of gym.wrappers to 'play_interactive'.
  • [gym/common/envs] Add 'pause' key to play interactive mode.

Patches and bug fixes

  • [python/robot] Fix external forces not properly shared with viewer.
  • [python/viewer] Fix interactive loop CPU throttle by adding short sleep in deamon reading stdin.
  • [python/viewer] Mix busy loop and timer sleep in precise sleep to release the GIL.
  • [gym/common/envs] Fix simulation not stopped when playing ends in play interactive mode.

Miscellaneous

  • [gym/examples/rllib] Provide helper to wrap policy as callable[[observation, reward], action].
jiminy - [misc] Various minor improvements.

Published by duburcqa over 3 years ago

This release only consists of minor quality-of-life improvements. In addition, a few bugs in Jiminy viewer have been fixed, and a more robust initial guess is provided to the 'impulse' contact solver to improve continuity of contact forces.

Improvements

  • [core] Provide robust initial guess to 'impulse' contact solver.
  • [gym/common] 'sample' now supports providing both 'shape' and vector 'low'/'high'/'mean'/'scale' if broadcastable.

Patches and bug fixes

  • [python/viewer] Fix clicking on node for panda3d Qt widget.
  • [python/viewer] Fix seldom lock issues when displaying many robots simultaneously.

Miscellaneous

  • [gym/examples/rllib] Start ray backend in local mode in debug.
  • [gym/examples/rllib] More robust observation flattening.
  • [gym/examples/rllib] Interrupt learning gracefully in case of ray task exception.
  • [gym/examples/rllib] Do not replay if recording is disable during training.
  • [gym/examples/rllib] Add option to use custom logger.
  • [gym/examples/rllib] Add option to save checkpoint every given number of training iterations.
jiminy - [core] 'Engine.start' no longer reset the engine automatically.

Published by duburcqa over 3 years ago

Very small release primarily intended to fix a bunch of bugs introduced in the previous ones. In addition, user-specified standard deviation for model parameters is now relative instead of absolute to be more consistent with the literature, and 'EngineMultiRobot.start' method no longer force reset of the simulation, giving more flexibility to the user, for example to run several simulations using the same model.

Improvements

  • [core] 'EngineMultiRobot.Start' no longer reset the engine automatically.
  • [core] Biases for random model generation are now relative instead of absolute.
  • [python/viewer] Log replay now support overwriting mesh package dir.
  • [gym/example] Add option to specify log subdirectory name interactively.

Patches and bug fixes

  • [core] Fix computation of center of mass positions and velocities.
  • [python/viewer] Fix log replay without velocity and external forces data available.

Miscellaneous

  • [misc] Fix CI numpy version issues.
jiminy - [python/viewer] Display Capture Point and external forces.

Published by duburcqa over 3 years ago

Following the previous release, this one adds new markers to help analyze simulations, especially for locomotion tasks of bipedal robots. It is now possible to display the Capture Point (also called DCM) and external forces. Besides, Reinforcement Learning tools based on RLLib have been improved and a few bugs have been fixed.

New features

  • [python/processing] Add convex hull utilities.
  • [python/viewer] Add option to display DCM in viewer.
  • [python/viewer] Add option to display external linear forces at joint level in viewer.

Improvements

  • [core] Add option to register external forces to the telemetry.
  • [core] Compute velocity of the center of mass of each subtree systematically.
  • [python/processing] Improve efficiency and versatility of 'interpolate_zoh'.
  • [python/log] Extract external forces from log if recorded.
  • [python/viewer] Improve efficiency of markers update.
  • [python/viewer] 'jiminy_replay' entrypoint can now be used to record video.
  • [gym/examples] Add monitoring of episode duration.

Patches and bug fixes

  • [core] Fix internal update period computation when defined control and sensor update period of the engine without robot.
  • [python/robot] Add fallback if 'dynamics' fields 'damping'/'friction' are partially defined in URDF file.
  • [python/viewer] Fix default display marker value if backend is not Panda3d.
  • [gym/examples] Fix logging performance issues of RLlib.

Miscellaneous

  • [gym/examples] Improve documentation of RLlib tools.
jiminy - [python/viewer] Add support of CoM and contact forces display.

Published by duburcqa over 3 years ago

This release focuses on making the viewer more informative to ease analysis to control strategies by showing the center of mass and contact forces when replaying log data.

New features

  • [python/viewer] Add helper to emulate sensor update from log, and use it in 'play_log_data' method.
  • [python/viewer] Add top-level options to enable/disable display of com/contacts.

Improvements

  • [core|core/python] Add public setter 'AbstractSensorBase.set' for sensor data and expose it in Python.
  • [python/viewer] Add option to place cylinder anchor at bottom in Panda3d.
  • [python/viewer] Add option to always display node at foreground in Panda3d, and use it for markers.
  • [python/viewer] Add method to show/hide a single node in Panda3d.
  • [python/viewer] Custom 'update_hook' can be provided to 'display' and 'replay' methods.
  • [python/viewer] 'add_marker' now supports passing callables.
  • [python/viewer] Make objects clickable in Panda3d.

Patches and bug fixes

  • [python/viewer] Fix error when using exotic matplotlib backends.
  • [python/viewer] Fix 'Viewer.add_marker' and 'Panda3dApp.move_node' node placement.
  • [python/viewer] Fix 'append_group' when 'remove_if_exits=False'.
  • [python/viewer] Do not add legend if replay of the single log.
  • [python/viewer] Hide node if scale is too small.

Miscellaneous

  • [core] Make sensor setter 'AbstractSensorBase.setAll' private.
  • [core/python] 'result_converter' now supports Eigen::Ref.
jiminy - [python] Add utility to replay simulation log files.

Published by duburcqa over 3 years ago

It is now possible to reconstruct the robot corresponding to a simulation log file. It is also possible to replay it in Jiminy Viewer, as long as the original meshes are still available, if any. In addition, a few issues related to widgets display have been fixed.

New features

  • [python/log] Add generic utility to reconstruct robot from log.
  • [python/viewer] Add 'jiminy_replay' CLI entrypoint to replay Jiminy log files.

Improvements

  • [python/simulator] 'simulate' now supports writing log in any available format.
  • [python/viewer] Add option to not remove widgets after replaying trajectories.

Bug fixes

  • [core/python] Fix 'buildGeomFromUrdf' module interoperability.
  • [python/viewer] Fix default legend when replaying multiple trajectories at once.
  • [python/viewer] Fix colors of Panda3d legend.
  • [python/viewer] Fix legend in panda3d when using identical labels.

Miscellaneous

  • [python/viewer] Reorder default colors cycle.
  • [python/viewer] Switch device notifications from 'error' to 'fatal' for Panda3d.
  • [misc] Remove dual ABI support for Python bindings since it is unstable and may cause segfault.
  • [misc] Provide cmake config version file in wheel.

Small release fixing conflicts with external Boost.Python modules, along some other minor bugs.

Bug fixes

  • [core] Fix bug at Robot initialization when defining default flexible joints in the model.
  • [core/python] Fix wrong keyword arguments for 'EngineMultiRobot.reset' method.
  • [core/python] Add new Boost.Python return policy that can be used to by-pass converter registry if 'convertToPython' has been specified.

Miscellaneous

  • [python] Add some missing typing return types.
jiminy - [core] Improve C++ core code quality.

Published by duburcqa over 3 years ago

Minor release mainly intended to improve C++ core code quality to make it easier to read and maintain. It also fixes the last remaining issues to easily build Boost.Python extension modules when Jiminy is installed using pip.

Improvements

  • [core] Allow arbitrary large controller update period.
  • [core] Improve error reporting by printing fully qualified function name without arguments.
  • [core] Do not shuffle first iteration cycle of 'PGSolver', and initialize indices in reverse order to make convergence (hopefully) faster.
  • [gym/common/envs] Refresh action space before observation space since action could be part of observation but not conversely.
  • [gym/examples] Automatically monitor env step 'info' on Tensorboard's histograms when using RLlib backend.

Bug fixes

  • [core] Fix computation of visco-elastic coupling forces.

Miscellaneous

  • [core] Remove C-style cast, and avoid unnecessary cast.
  • [core] Remove irrelevant virtual keywords.
  • [core] Replace (u)int32_t by std::size_t/ptrdiff_t when appropriate for clarity and portability.
  • [core] Enable implicit conversion, deprecation, c-style cast, and unused variables warnings.
  • [core] Remove all dependencies to jsoncpp in core headers.
  • [core/python] Add fallback to complementary unsigned/signed type for integers for 'convertFromPython'.
  • [gym/common/wrappers] Relax argument type of 'FilteredFrameStack' for convenience.
  • [gym/common/wrappers] Rename 'FilterFrameStack' in 'FilteredFrameStack' for clarity.
  • [gym/examples] RLlib 'evaluate' helper method now returns aggregated info over episode.
  • [gym/examples] Only log data in Tensorboard format when RLlib is used, to dramatically reduce log folder size.
  • [misc] Minor update of easy install dependencies.
  • [misc] Do not install 'robotpkg-urdfdom' binaries since 'liburdom-dev' is already installed by other easy-install dependencies.
  • [misc] Relax Ubuntu version check for easy install script since it should work on any release in practice.
  • [misc] More robust Python library finding in provided CMake configuration file.
  • [misc] Check compatibility with required jiminy version if any in provided CMake configuration file.
  • [misc] Detect Numpy headers in provided CMake configuration file.
  • [misc] Add missing boost definitions in CMake configuration file.
jiminy - [misc] Provide CMmake configuration file in wheels.

Published by duburcqa over 3 years ago

This release aims at making it as simple as possible to build executable and Boost.Python extension modules for Jiminy using CMake. Now it requires about 10 lines of CMake. Dynamic linking is automatically handled to ensure the generated binary works out-of-the-box.

Improvements

  • [misc] Bundle cmake configuration file in wheel.
  • [misc] Provide example of pip-based build of C++ executable using CMake.

Miscellaneous

  • [misc] Fix wheel deploy. Add project URLs to pypi project page.
  • [misc] Refactor legacy CMake Python finding to be consistent with CMake>=3.12.
  • [misc] Remove legacy compilation mode since no longer necessary.
  • [misc] Cleanup pinocchio include and move implementation include in cpp if possible.
jiminy - [misc] Improve module interoperability of Boost.Python bindings.

Published by duburcqa over 3 years ago

This release makes it possible to build C++ executable and Boost.Python extension modules for jiminy just by installing it via pip, instead of having to clone it and build it from source. It also make sure jiminy_py is compatible with Boost.Python modules compile with different versions of Boost and different C++ ABI. Additionally, a few bugs have been fixed.

Improvements

  • [misc] Improve module interoperability by supporting old, new, and dual C++ ABI.
  • [misc] Bundle Jiminy headers and shared core library in wheels.

Bug fixes

  • [core] Fixes segfault when calling some methods on uninitialized objects.
  • [core] Fix HDF5 export of empty string constants.
  • [misc] Fix telemetry variables memory overflow (again).
  • [misc] Fix Boost python error handling at import.

Miscellaneous

  • [misc] Refactor binary distribution to mimic numpy.
  • [misc] Remove C++17 features breaking compatibility with gcc-6 to build wheels for manylinux_2_24.
jiminy - [core] Support update period for registered force profiles.

Published by duburcqa over 3 years ago

This release mainly enables to register discrete force profiles. It is especially useful to reduce computational cost when implementation is done in Python. It is also necessary to apply filters or hysteresis. In addition, many convenience features have been added to the viewer, and stability and performance have been significantly improved (especially mesh loading time). Finally, a few annoying but not critical bugs have been fixed.

New features

  • [core] Enable to specify update period of registered force profiles.
  • [python/viewer] It is now possible to add custom 'markers', automatically updated at refresh.

Improvements

  • [python/viewer] Greatly improve mesh loading speed.
  • [python/viewer] Enable to zoom very close in 'panda3d' without seeing through the model.
  • [python/viewer] Add 'cone' and 'arrow' primitives to 'panda3d' rendering backend.
  • [python/viewer] Add methods 'move_node' and 'set_scale' to move and rescale a single node in 'panda3d'.
  • [python/viewer] More natural shadow casting in 'panda3d'.
  • [python/viewer] Move named color support from 'replay' module to 'viewer'. Improved default color cycle.
  • [python/viewer] 'set_color' now set colors of both visual and collision meshes.
  • [python/viewer] 'set_color' disables texture if specified, and reset original color and texture otherwise.
  • [python/viewer] Fallback to offscreen rendering if opening 'panda3d' graphical window is impossible.
  • [python/viewer] Wheel click can be used to move camera lookup point forward and backward in 'panda3d'.

Bug fixes

  • [core] Fix system states not cleared at reset.
  • [core] Make it impossible to register external forces to the universe itself.
  • [core/python] Automatically reset to Zero the return variable of functors returning that are supposed to return by value in C++.
  • [python/viewer] Increase meshcat opening timeout to avoid false positive on low-end hardware.
  • [python/viewer] Fix viewer not properly closed in some cases, and internal state not cleaned-up.
  • [python/viewer] Fix viewer instance of simulator wrongly detected as still available after closing environment.
  • [python/viewer] Fix delete-on-close for panda3d.
  • [misc] Fix C++ error message not showing properly on Windows.
  • [misc] Fix inter-operability with custom eigenpy/hppfcl/pinocchio install.

Miscellaneous

  • [core] Increase constants + variable names memory size to align with common use-cases. Clearer error message in case of overflow.
  • [python/viewer] Default rendering backend is now 'panda3d' systematically for non-interactive mode.
  • [python/viewer] Only display relevant error messages (if possible) when starting panda3d.
  • [misc] Check if Python executable provided to Cmake is valid.
  • [misc] Make sure OpenGL is installed by 'easy_install_deps_ubuntu.sh' script.
jiminy - [python/viewer] Performance improvement and Qt integration.

Published by duburcqa over 3 years ago

This release focuses on performance improvements of Jiminy Viewer for 'Panda3d' backend. Firstly, most of the redundant computations and unnecessary rendering refresh have been removed. Secondly, 'av' video writer library is used in place of 'cv2', which supports 'h264' codec, resulting in faster generation (~40s for 1min simulation duration), smaller file (~15MB for 1min instead of ~50MB), and web-compatibility. In addition, a new rendering backend 'panda3d-qt' is now available, enabling to embed Jiminy Viewer in custom Qt graph, allowing complex interactions.

New features

  • [python/viewer] Initial support of 'panda3d-qt' rendering backend.
  • [python/viewer] Add method to update robot color on-the-fly (only supported by panda3d).
  • [python/dynamics] Add XYZQuat to XYZRPY position and velocity converters.

Improvements

  • [python/viewer] Use 'av' package instead of 'cv2' to export 'panda3d'/'gepetto-gui' video: faster, smaller, and support 'h264'.
  • [python/viewer] Improve video recording speed even further by disabling panda3d framerate limit during recording.
  • [python/viewer] Update collision geometry placement only once and only if necessary.
  • [python/viewer] Improve frame capture speed (and thereby video recording) by refreshing 'panda3d' scene only if needed.
  • [python/viewer] 'capture_frame' as raw data is now available for 'panda3d'.

Bug fixes

  • [python/viewer] Fix panda3d screenshot wrongly removing alpha channel for '.png'.
  • [gym/common/envs] Fix opening onscreen window at env reset if offscreen window is already available.
  • [misc] Fix support of Ninja Cmake generator.
  • [misc] Fix support of Cmake 3.20 on windows.

Breaking API changes

  • [python/viewer] Reorder and remove some keyword arguments of Viewer.__init__ and 'play_trajectories'.
  • [python/viewer] Rename 'urdf_rgba' to 'robot_color' for clarity. Add 's' suffix to list arguments.
  • [python/viewer] Replace 'window_name' argument by static 'Viewer' attribute.

Miscellaneous

  • [python/viewer] Raise warning if 'enable_clock' is true and 'panda3d' backend is not used.
  • [python/viewer] Raise helpful exception if 'replay' called with wrong urdf color.
  • [misc] Avoid copying irrelevant files when build wheels.
  • [misc] Clearer Cmake warnings for Ubuntu 18 legacy mode.
  • [misc] To need to install wheels twice anymore thanks to new pip dependency resolver.
  • [misc] Update dependencies to latest version available.
jiminy - [misc] Bug fixes and API consistency improvements.

Published by duburcqa over 3 years ago

A few not critical bugs have been addressed and the API has been slightly simplify to avoid common mistakes while being less restrictive when possible. In addition, a few guards has been added to explicitly forbid wrong practices.

Improvements

  • [core] Add Engine methods to remove registered impulse and profile forces, and all forces (including coupling) at once.
  • [core] Throw error when calling addSystem/removeSystem for 'Engine' instead of 'EngineMultirobot'.
  • [core] Get read-only access to global random seed.
  • [core|python] Move log data cached buffer from python simulator to core engine.
  • [core/python] Make log data non writable.
  • [python/simulator] Merge 'run' and 'simulate' methods together and keep only 'simulate'.
  • [python/simulator] Avoid unnecessary viewer refresh at init.
  • [python/viewer] Enable forwarding by adding unused keyword arguments support.
  • [python|gym] Setup viewer for new model at env level instead of simulation to avoid edge cases.
  • [python|gym] Move 'BaseJiminyObserverController' from 'jiminy_py' to 'gym_jiminy.envs.internal' as incompatible with 'Simulator.simulate'.
  • [gym/common/envs] Only check if initial observation is consistent with observation space, not if out-of-bounds.

Bug fixes

  • [core] Make sure random number genetators are initialized at Engine level.
  • [core] Reset random number genetors if desired seed has changed when calling 'setOptions'.
  • [core/python] Fix dangling collision_data dangling reference in python because Model was deleting it by mistake.
  • [python/viewer] Fix legend support for meshcat.
  • [python/viewer] Fix custom urdf color support for panda3d.

Miscellaneous

  • [core] Use C++ inheritence method hiding to deter usage of specialized 'EngineMultirobot' methods in 'Engine'.
  • [core/python] Rename Engine 'remove_forces' method in 'remove_all_forces', which now only removes forces without calling 'reset' method.
  • [core/python] Make private '_ControllerFunctor' and not initializable from Python. It is only used to convert C++ ControllerFunctor back to Python. 'BaseControllerFunctor' must be used instead in Python.
  • [python|gym] Project architecture refactoring.
  • [misc] Automatically detect pinocchio submodules at import instead of hard-coded procedure for maintainability.
jiminy - [core] Add random process generators.

Published by duburcqa over 3 years ago

Several random process generators have been added, namely PeriodicGaussianProcess, PeriodicFourrierProcess, PeriodicPerlinProcess and RandomPerlinProcess. They are designed to be used as basis to implement external force profiles. In this context, they have been optimized to computational efficiency rather than mathematical correctness. On a completely unrelated note, Python bindings are now more "pythonic", and registered external forces are now properly removed at reset.

New features

  • [core] Add random process utilities.
  • [core|core/python] Add getter for impulse, profile, and coupling forces.

Improvements

  • [core] Change naming convention for consistency, aka 'registerForce[TYPE]'.
  • [core/python] Full-featured std::vector wrapping.
  • [core/python] Expose global random generator reset method.
  • [core/python] Initialize random number generator when load python bindings.
  • [core/python] Improve docstring signature type and keywords inference.
  • [python/simulator] Make sure destructor cannot raise exception.

Bug fixes

  • [gym/common/envs] Fix registered forces not automatically removed at reset.

Miscellaneous

  • [core] Split utilities in multiple files.
  • [core] Use unique_ptr to reduce header dependencies and speed-up compilation.
  • [core] Remove some useless includes in core.
  • [python/viewer] Enable EGL fallback for panda3d, since it will be provided with Panda3d>=1.10.9.
  • [gym/common/utils] Remove Python native implementation of 'PeriodicGaussianProcess'.
jiminy - [python/plot] More versatile plotting tools.

Published by duburcqa over 3 years ago

Add new generic tabbed figure plotting tools supported by any Matplotlib backend, including offscreen 'agg' and Jupyter notebooks. It brings several additional features, such as synchronize time in every tabs and export of all tabs in pdf. Its overall performance has been significantly improved.

New features

  • [python|gym] Add generic tabbed figure tool.

Improvements

  • [core|python] Add support of non-contiguous temporary to 'register_variables'.
  • [core/python] Allow registering 2D numpy arrays to the telemetry.
  • [python|gym] Move '_log_data' from gym env to simulator.
  • [python/dynamics] 'update_quantities' method update every quantity but the jacobians by default.
  • [python/simulator] Enable argument forwarding for 'plot' method.
  • [gym/common/envs] Log generic action automatically.

Bug fixes

  • [python/dynamics] Fix 'update_quantities' not calling forward kinematics when necessary.
  • [python/simulator] Fix log backup cleanup.
  • [gym/common/pipeline] Fix controller wrapper not updating env action and not calling env 'compute_command'.
  • [misc] Fix ipython tutorial.

Miscellaneous

  • [misc] Remove force install 'numba==0.53.0rc3' on CI since 0.53 is now available.
  • [misc] Consistent use of 'resource_filename' to access models data.
  • [misc] Add Atlas in Readme instead of Anymal.
jiminy - [gym/envs] Add Cassie robot learning environment.

Published by duburcqa over 3 years ago

This release improves support of closed kinematic chains by adding analytical distance constraint between frames. It illustrates this new feature, Cassie robot learning environment is now provided. Apart from that, a few minor bug fixes mainly related to the viewer has been fixed, and overall performance has been slightly improved.

New features

  • [core] Add DistanceConstraint to enforce constant distance between frames.
  • [gym/envs] Add Cassie robot example (Closed-kinematic chains).

Improvements

  • [core] Improve performance by avoiding unnecessary copies and redundant computations.
  • [python/dynamics] Add some RPY converters.
  • [python/dynamics] Add options to use theoretical model when computing freeflyer with fixed frame.
  • [python/robot] Add convenience property to get robot name.
  • [python/simulator] Add 'command' tab to 'plot' method.
  • [python/simulator|gym/common/envs] Replace attribute '_is_viewer_available' by public property to avoid redundancy.
  • [gym/common/envs] Do not extract log if no terminal reward.
  • [gym/examples/rllib] Do not return 'log_root_dir' at init because it is redundant.
  • [gym/examples/rllib] Add option to record video periodically during training.

Bug fixes

  • [core] Make sure application time of impulse forces are positive (not strictly).
  • [python/viewer] Fix terminate viewer backend process when closing.
  • [python/viewer] Fix error when closing viewer without waiting for init to finish.
  • [python/viewer/meshcat] Increasing timeout to avoid false negative on low-end configurations.
  • [python/viewer|gym/common/envs] Make sure viewer is properly closed after simulation replay whenever requested.
  • [gym/common/envs] 'compute_command' method no longer update the internal action buffer.
  • [gym/examples] Add missing examples tools.
  • [misc] Fix wheel generation process corrupting png files.

Miscellaneous

  • [core] Move Gauss-Siedel LCP solver in dedicate folder since several may be implemented.
  • [core/python] Define meaningful argument names for constructors.
  • [misc] Allow executing 'easy_install_deps_ubuntu.sh' multiple times without significant side effects.
  • [misc] Make sure *.png files are processed by binary files by git.
  • [misc] Increase Pagefile on Windows CI to avoid unit test failure when loading Panda3d.
jiminy - [jiminy/viewer] Panda3d as default viewer backend.

Published by duburcqa over 3 years ago

This release fixes the last remaining blocking issues with Panda3d in order to make it the default viewer backend. So, starting from this point, it will be the default backend, useless for interactive environment like Jupyter, for which Meshcat is still the only appropriate alternative. In addition URDF and meshes associated with Atlas have been updated to make it look better:

Improvements

  • [jiminy/viewer] Fallback to software rendering with panda3d if necessary.
  • [jiminy/viewer] Limit Panda3d framerate to 30FPS to avoid consuming too much resources.
  • [jiminy/viewer] Do not shrink legend automatically and slightly increase size on Panda3d.
  • [jiminy/viewer] Zoom out default relative camera pose for travelling.
  • [gym/common/envs] Automatically update rendering after 'reset' if available.
  • [misc] Enable 'panda3d' by default instead of 'meshcat'.

Bug fixes

  • [misc] Fix viewer replay on Windows by not removing 'Pinocchio::interpolate' from build anymore.
  • [jiminy/simulator] Fix viewer not opening graphical window after closing it once.
  • [jiminy/viewer] Fix widgets positioning and scaling on Panda3d.
  • [jiminy/viewer] Improve exception handling if window closed during replay to avoid deadlock.
  • [jiminy/viewer] Fix panda3d offscreen rendering not always updated before capturing frame.
  • [jiminy/viewer] Fix panda3d mesh loader 'assimp' specific path formatting on Windows.
  • [gym/common/envs] Fix keyword arguments forwarding for WalkerEnvs class.

Miscellaneous

  • [core] Minor improvement of robot weak_ptr management for sensors/motors.
  • [jiminy/simulator] Rename 'disable_flexiblity_data' or 'enable_flexiblity_data' for clarity.
  • [gym/examples] Rllib 'test' method now returns the environment used for testing.
  • [misc] Globally less restrictive Python requirements by using different specifications depending on the platform.
  • [misc] Update atlas URDF and meshes to improve rendering.
jiminy - [jiminy/viewer] Extended support of Panda3d viewer.

Published by duburcqa over 3 years ago

Panda3d rendering backend support has been greatly improved. It should now works out-of-the-box on any hardware and platform. Meshcat-exclusive features has been ported to Panda3D (watermark and legend), and new Panda3D-exclusive simulation time clock is now available! The recording speed is much faster than meshcat (faster than recording duration at 30FPS and 1000x1000 resolution for 'mp4' format) and supports offscreen rendering without X-server. In addition, Python3.9 pre-built wheels are now provided on any platform. Finally, internal time steps management issues have been fixed, most affecting fixed timestep steppers.

New features

  • [jiminy/viewer] Add support of watermark for panda3d.
  • [jiminy/viewer] Add support of legend and watermark at Viewer level for Meshcat and Panda3d.
  • [jiminy/viewer] Add option to enable clock during replay and recording using panda3d backend.

Improvements

  • [core] Increase maximum simulation timestep for RL requirement.
  • [jiminy/viewer] Do not open graphical window if possible by default when video recording is requested.
  • [jiminy/viewer] Convert Python location meshcat recorder import warning into exception only raised at instantiation.
  • [jiminy/viewer] Significant improvement of video recording speed for Panda3D. Record in .webm (slow) or .mp4 (6x faster).
  • [gym/common/envs] Make sure the initial posture is close to neutral yet always valid.

Bug fixes

  • [core] Fix wrong internal stepper timestep if fixed.
  • [jiminy/viewer] Fix meshcat wait doing nothing.
  • [jiminy/viewer] Fix panda3d black-screen issues.
  • [jiminy/viewer] Fix support of Windows 10 for Panda3d backend.
  • [gym/examples] Fix Rllib tools for env without reward threshold.

Miscellaneous

  • [jiminy/viewer] Make sure only one graphical window can be opened locally.
  • [misc] Use same steppers and timesteps than official Classic Control learning environment whenever possible.
  • [misc] Remove 'jiminy' prefix from learning envs register id since it is redundant with namespace.
  • [misc] Add wheels for Python3.9. From now on, only many2014 wheels will be provided instead of manylinux2010.
jiminy - [misc] Add OpenAI Gym Ant learning environment.

Published by duburcqa over 3 years ago

This release introduces first Mujoco-like locomotion learning environment in Jiminy Ant. An example script successfully training it using TD3 algorithm in Rllib is provided. In addition, several bugs have been addressed, mainly affecting video recording.

Improvements

  • [jiminy/simulator] Allow chaining rendering methods.
  • [gym/common/utils] Add full support of 'gym.spaces.Tuple'.
  • [gym/common/envs] Fix 'render' method not call by env before replaying.
  • [gym/common/envs] Enable traveling by default if robot has freeflyer.
  • [gym/envs] Add mujoco-like Ant learning environment.

Bug fixes

  • [core] Fix 'interpolate' utility.
  • [jiminy/viewer] Fix traveling.
  • [gym/common/envs] Clip returned observation systematically to avoid out-of-bounds errors.

Miscellaneous

  • [gym/toolbox] Consistent addon package hierarchy.
  • [gym/example] Refactor examples folder architecture to be easier to extend.
  • [gym/example] More generic tools for Rllib. Add Ant TD3 Rllib example.
  • [misc] Minor rework of acrobot and cartpole toy models.

This release introduces impulse-like contact model, which has became very popular since the last few years. In broad terms, it maximizes the energy dissipation resulting from contact with the ground, in such a way that the position of the contact points is critically damped with predefined natural frequency (corresponding to solving a LCP internally, see Mujoco documentation and paper for reference). Even though it is not a phenomenological model, it features many very interesting properties, among which allowing very large fixed integration timestep (up to 10ms suing Runge Kutta 4), and smoothing ground reaction forces. Those properties are not essential in robotics to design controllers using classical control theory, but it turns out to be very beneficial when it comes to reinforcement learning, presumably because it makes the state-action mapping much more regular, enabling to learn control policies for complex very dynamic locomotion tasks. Learning examples and tutorials are coming !

In addition, the spring-damper contact model has been greatly simplified to use standard coulomb friction model, and a few significant bugs have been addressed.

New features

  • [core] Add new impulse-like contact model.

Improvements

  • [core] Check if initial configuration is valid at float precision instead of double then normalized to avoid casting issue in Python.
  • [core] Change contacts/bounds spring-damper model to clamp the whole force rather than sole velocity-related component.
  • [core] Remove stiction from spring-damper model.
  • [python/simulator] Do not fill progress bar if aborted.
  • [python/simulator/plot] Add parameter to disable plotting flexibilities. Automatically adjust layout.
  • [python/viewer] Add option to only replay specific time interval. Enable to specify unique xyz_offset for replay.

Bug fixes

  • [core] Fix inertia bias returning improper matrix.
  • [gym/common/envs] Enforce deepcopy of observation and information before returning it to avoid any issue with replay buffer.

Miscellaneous

  • [core] Add proper constraints holder to ease implementation of impulse contact model.
  • [core] Rename Explicit Euler in Euler Explicit for consistency with Runge Kutta steppers.
  • [core] Compute FixedFrameConstraint jacobian and drift LOCAL_WORLD_ALIGNED. Add Baumgarte stabilization.