nimblephysics
nimblephysics copied to clipboard
Gradient Support for Implicit Time Integration scheme
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.