in the last commit I added the Cholesky regularizer trick, otherwise, it will explode from time to time each time a set of contact generate a singular minor matrix.
the simpler example to explain this is a box landing on a flat floor.
in general the collision will produce a contact for each corner, but numerically the maximum set of contact to make the box sit stable is three.
this means that at least one row of the mass matrix is a linear combination of one or more of the other three.
in these cases most matrix factorisation method will fail to factor the matrix, and you can do two things.
find the row or rows the are linear combination of other rows by either singular value decomposition or QR factorization in case of simetric matrices.
or use the trick of apply a matrix regularizer, this is alter the matrix in such way the it can be factorizable, but that the solution will be close enough to that of the minimal matrix without redundant rows.
method one is too expensive for large system, so I use method two.
in 1.5 each cont sub matrix was reprocessed by a QR method to remove the extra contact, but this was slow and not always yield good results, so abandoned the trick
for a joint solver by definition each joint has only 6 dof, the there is not need for the regularizer trick and that was great until people start using for general problem, and I start adding contacts again.
the method the solver uses does not need matrix factorization, so in most cases the numerical solution will be conporton with the physical solution, until some contact configuration will generate an ill condition matrix that will have a numerical solution that will not match the physic of the problem, and that will show as an explosion.
therefore we need either the regularizer trick or the eigen value trick to see what row are bad.
which bring me to the last trick of 1.53 so that the circle is completed.
basically this is to prepopses contact joints, to reduce the redundace contacts so that the final mass matrix is less ill conditioned.
but this time I will add it in as a user controllable option.
this is the user will decide if a contact joint can filter uneserary contacts, for example the fork lift can only generate three contact per load per tooth, instead of the four or more that is doing now, and taking the chance of exploding.
how it is compared to 1.5?
how does it rate in the awesome scale now?