Skip to content

More realistic contact model

Compare
Choose a tag to compare
@duburcqa duburcqa released this 10 Dec 07:16
· 83 commits to master since this release
e96beb9

The focus of the release was making the contact model more realistic in Jiminy. As a reminder, it is formulated at acceleration level instead of velocity-level with impulse contact forces. The contact solver has been revamped to improve convergence, to ensure isotropic coulomb friction cone, and to follow maximum energy dissipation principal (except during the short transient sliding/sticking, or for dominant non-linear acceleration effects such as Coriolis). Many long lasting bugs in C++ core and Python have been tracked down and fixed.

New features

  • [core] Enforce isotropic solution for PGS. (#467)
  • [core] Compensate PGS bias to ensure maximum energy dissipation for tangential friction. (#468)
  • [python/viewer] Add 'frame' markers. (#464)
  • [gym/common] Add 'evaluate' method to evaluate a callback policy over a whole episode. (#453)

Improvements

  • [core] Compute PGS error in residual space. (#462)
  • [core] PGS skip parameter update if irrelevant. (#464)
  • [core] Force sensors now measure total external force applied on a body.
  • [core] Split constraint and contact options. (#462)
  • [core] Move to next breakpoint if possible to avoid very small timesteps during integration. (#464)
  • [python/viewer] Add support of 'pin.SE3' object for marker pose. (#465)
  • [python/viewer] Support specifying marker orientation using rotation matrix. (#464)

Patches and bug fixes

  • [core] Fix non-linear PGS solving of friction cone. (#461)
  • [core] Fix 'removeContactPoints' if input vector is empty.
  • [core] Fix timestep adjustment for fixed timestep euler explicit stepper. (#464)
  • [core] Fix baumgarte stabilization of orientation for 'FixedFrameConstraint'. (#465)
  • [core] Fix json dump for empty dictionary. (#466)
  • [core] Remove random permutation from PGS since preserving order is important. (#467)
  • [core] Fix 'JointConstraint' position difference not properly computed. (#469)
  • [core] Fix telemetry header to null terminate leading to segfault. (#469)
  • [core] Fix inconsistency between flexible model and data. (#469)
  • [python/log] Fix segfault when loading robot from log. (#466)
  • [python/viewer] Exception handling and timeout if backend recorder for meshcat fails to open. (#452)
  • [python/viewer] Avoid crashing when replying simulations with 'nan'. (#458)
  • [python/viewer] Fix extraction of available sensor data for replay. (#463)
  • [python/viewer] Keep floor hidden even if updated if it was previously hidden for panda3d backend. (#463)
  • [python/viewer] Fix 'display' method if velocity is not provided. (#463)
  • [python/viewer] Fix body selection for panda3d. (#465)
  • [python/viewer] Do not overwrite color for 'frame' marker by default. (#464)
  • [gym/common] Improve exception handling during 'step'. (#458)
  • [gym/common] Do not try to register action to telemetry if empty.
  • [gym/envs] Reduce KD gain for AkY joints of Atlas to prevent numerical instability. (#464)

Miscellaneous

  • [core] Use 'impulse' contact model as default. (#462)
  • [core] Modify 'FixedFrameConstraint' to set ground normal instead of local rotation. (#464)
  • [core] Order 'FixedFrameConstraint' components by solving order. (#467)
  • [gym/common] Rename 'refresh_*' in 'initialize_' when appropriate. (#466)
  • [gym/common] Rename 'refresh_internal' in 'refresh_buffers' and add 'initialize_buffers' method. (#466)
  • [gym/envs] Automatically detect relevant contact points for Atlas. (#464)
  • [misc] Update python packages description and development status. (#458)
  • [misc] Run unit tests in debug mode on Ubuntu 20.04. (#469)

Co-authored-by: Alexis Duburcq alexis.duburcq@gmail.com