Split constraint error correction for velocity and position
DART does position correction by adding additional impulse beside on enforcing velocity constraint. However, this way injects artificial energy into the system that may make the system unstable.
ODE and bullet use the "split impulse", which enforces constraint in velocity without correction terms, and simultaneously does position correction by projection. It's more dissipative and results in more stable dynamics.
One of ODE's LCP solver, which is SOR_LCP in quickstep, is specialized to solve two different impulses for velocity and position constraints simultaneously. DART does not have this kind of specialized solver so DART needs to solve LCP twice per one dynamics step.
We need to consider proper way of position correction for DART in terms of stability and efficiency.