I have a vehicle that has a very large mass. There are two legs attached to the body that help the vehicle move around when it needs to. I have set these legs up using 4 bodies and 4 hinges. This causes a loop of constraints.
BodyA would be my main body with the very large mass. To it are two hinge joints one connecting BodyB to BodyA and one connecting BodyC to BodyA. Then I have another two hinges connecting BodyB to BodyD and BodyC to BodyD.
I have a video here showing how they are connecting and the expected result.
https://youtu.be/V5a8cwV_jw4
The problem that I am having is that when I start updating the physics engine, I get an assert in ndSkeletonContainer.cpp InitLoopMassMatrix() at the end of the function where
- Code: Select all
dAssert(dTestPSDmatrix(m_auxiliaryRowCount - m_blockSize, m_auxiliaryRowCount, &m_massMatrix11[m_auxiliaryRowCount * m_blockSize + m_blockSize]));
is called.
I traced the calling functions and in ndGeneralMatrix.h
- Code: Select all
bool dCholeskyFactorizationAddRow(ndInt32, ndInt32 stride, ndInt32 n, T* const matrix, T* const invDiagonalOut)
there is a check
- Code: Select all
if (diag < T(1.0e-6f))
{
return false;
}
I changed this check to T(1.0e-10f) just to get it to work so that I could create the video for you.
Is there anything that I am doing wrong here? Unfortunately the main body must have a large mass to keep it from toppling over since it has a long boom. It is a drag line.
Thank you in advance for any help