I want to implement a multi-point collision constraint solver. It is important for me to overcome some limitations of sequential solvers with huge mass ratios. Therefore I'd like to solve all collisions simultaneously in one equations system.
I already wrote a simple conjugate gradients solver which I'd like to use for this task. But I have problems to create the equation system to solve. I followed the approach described in "Physics-Based Animation" by Erleben,Sporring,Henriksen,Dohlmann in Chapter 7 "Constrained-Based Multibody Animation". There a LCP is formed like: Ax + b >= 0 compl. to x >= 0. This should easily be translated into an equations system like: Ax = b.
My problem is: The matrix A has to be positive-definit to be solvable by a cg approach. How do I know if the matrix is positive-definit? I know the definitions, but I had to give up to find a prove, because it is too complex.
For anyone who read the book, I'm talking about the matrix which has this form:
Code: Select all
| D^T C^T M^-1 C D D^T C^T M^-1 C N E |
A = | N^T C^T M^-1 C D N^T C^T M^-1 C N 0 |
| -E^T Mu 0 |
Has anyone an idea, how to form the equations for multi-point contacts with friction, that are solvable by cg?
My primary concern is to overcome problems with mass ratios that come with iterative solvers. Btw, are there other problems with mass ratios besides the "heavy-object-resting-on-light-object" problem?
Is there maybe a better approach to this than cg? SOR, PGS, .... suffer all from this problem, right?
Btw, stable stacking is not a requirement for me, so I have not to take it into account anyway. Neither are any other constraints besides contacts, like joints, etc...
To conclude yet two general questions about cg:
1. I read cg gets slow, when "the active set" changes. What exactly is meant by "active set"? Does this correspond to activation/deactivation of rigid bodies?
2. What advantages has gradient projected cg over normal cg? Is it about faster converging? How much faster is it compared to cg with preconditioning?
Any pointers and hints are highly appreciated!

Thanks,
Ronin