Erin Catto wrote:Split impulses are a weak attempt to mimic a more accurate solver. It is fortunate that they work so well for contact.
However, they don't work well with spherical joints.
there is something that is not clear to me here, SI don't work well with spherical joints, however i have never heard of this about PGS or better GS(just equality constrants), however you state elsewhere that PGS and SI are equivalent? aren't Ageia,ODE,Jiglib using GS processes that seem to work reasonably well with spherical joints?
Actually, I think it could optimized further. In a pivoting method we have an active and an inactive set. For a multibody tree, the active set elements are known joint torques at one of their torque limits. The inactive set elements are prescribed joint velocities/accelerations. The solution that the pivoting method needs is the resulting joint torques for the inactive set and the velocities/accelerations for the active set. The entire computation can be performed in order N time (no big matrices need to be computed).
It makes sense that we can do this in order N time because motors maintain the tree topology. We could also use coherence of the active set to reduce the number of pivots.
It might be a bit tricky to architect this. You would need to easily switch a joint from having prescribed motion to having prescribed torque. It shouldn't be too difficult to simulate a tree that has partially prescribed joint motion.
AntonioMartini wrote:
there is something that is not clear to me here, SI don't work well with spherical joints, however i have never heard of this about PGS or better GS(just equality constrants), however you state elsewhere that PGS and SI are equivalent? aren't Ageia,ODE,Jiglib using GS processes that seem to work reasonably well with spherical joints?
Oh, I was talking about Split Impulses, not Sequential Impulses. Split Impulses is a hacky method for dealing with position drift. Sequential Impulses with Baumgarte works fine for spherical joints (with the usual caveats for an iterative solver).
Erin Catto wrote:
You would need to easily switch a joint from having prescribed motion to having prescribed torque. It shouldn't be too difficult to simulate a tree that has partially prescribed joint motion.
prescribed torque = forward dynamics
prescribed motion = inverse dynamics
the hybrid dynamics algorithm of Featherstone allows for the mixed inverse/forward dynamics case on selected joints. The algorithm is described in his book.
AntonioMartini wrote:
there is something that is not clear to me here, SI don't work well with spherical joints, however i have never heard of this about PGS or better GS(just equality constrants), however you state elsewhere that PGS and SI are equivalent? aren't Ageia,ODE,Jiglib using GS processes that seem to work reasonably well with spherical joints?
Oh, I was talking about Split Impulses, not Sequential Impulses. Split Impulses is a hacky method for dealing with position drift. Sequential Impulses with Baumgarte works fine for spherical joints (with the usual caveats for an iterative solver).
ok, i probably confused the split impulse with the total impulse mentioned in one of your gdc presentations. confession: i haven't read the full thread;)
David Wu's "physics and character animation" papers mention similar ideas: using Featherstone-type root->leaves and leaves->root traversal to solve forward and inverse dynamics together, as well as changing nodes/links from kinematic to dynamic on-the-fly when the required torques violate limits.
I would like to pop up this thread about split impulses. Everybody speaks about split impulses but I haven't found any proper explanation or description of that method..
I would like to pop up this thread about split impulses. Everybody speaks about split impulses but I haven't found any proper explanation or description of that method..
You could also download Box2d Lite and have a look in the code, you can find an well arranged implementation of split impulses there.
Basically "split impulses" just means, that you put the position error that you want to correct into a separate velocity (bias velocity) by applying a separate impulse (split impulse) on the body, dependent on how big the error is. Split impulses is sort of an opposite to "baumgarte", where you just feed the position error back into the velocity. This has the disadvantage, that bodies can get high velocities if they penetrate a lot.