Separate Velocity and Position Solvers: Why?

Here's the place to get help and discuss features. The focus is on the C++ version, but generic questions are welcome.
badatmath
Posts: 1
Joined: Wed Oct 19, 2016 9:04 am

Separate Velocity and Position Solvers: Why?

Postby badatmath » Wed Oct 19, 2016 9:38 am

Can anyone explain why Box2D has separate velocity and position solvers? Since the velocity solver uses Baumgarte stabilization with the constraint error to prevent position drift, why would a separate position solver be needed?

I understand that the "True Impulse" for non-linear constraints is only valid over an infinitesimal time step and extrapolating it with any integration scheme causes some degree of position drift. However the constraint error remains bounded due to the "exponential" nature of Baumgarte stabilization.

It seems like the position solver has to perform a harder task than the velocity solver: The jacobian for the velocity solver is always (by definition) linear, but solving the constraint directly on a position level requires solving a system of non-linear equations in general (i.e. quadratic for distance constraints).

Intuitively I would expect NGS to have worse convergence properties than linear Gauss-Seidel. Is this not the case?

Am I missing something else entirely?

Return to “General Discussion”



Who is online

Users browsing this forum: No registered users and 4 guests