nimblephysics icon indicating copy to clipboard operation
nimblephysics copied to clipboard

Gradient Support for Implicit Time Integration scheme

Open keenon opened this issue 4 years ago • 0 comments

In traditional DART, time integration uses v_{t+1} to compute p_{t+1} = p_t + dt * v_{t+1}. This introduces problematic dependencies for backpropagation, so we've changed it to p_{t+1} = p_t + dt * v_t. This behavior can be turned on and off with World::setParallelVelocityAndPositionUpdates(bool enabled).

When we turn this on, it creates vibrations in double-cartpole. Unfortunately, our gradients currently assume that we always have this flag turned on, and so produce incorrect Jacobians if we turn the flag off. Ideally, we'd like to be able to handle backprop even when we're using the old time integration scheme.

We've got a test, unittests/comprehensive/test_ParallelPosAndVel.cpp to produce this vibration behavior with double cartpole.

Fixing this will require some thought.

keenon avatar Feb 01 '21 23:02 keenon