Page 1 of 1
energy spent for joint motor, difficulty 2.73 --> 2.74
Posted: Sun May 17, 2009 5:38 pm
by acx01b
Hi,
I would like to know how to get the total energy applied by motors to each hinge joint of my simulation,
I can get it like that in bullet 2.73 :
Code: Select all
// before the Step :
for (int = 0; i < nb_joint; i++)
{
joint[i]->motorImpulseInThatStep = 0;
}
// modification of btHingeConstraint::solveConstraintObsolete
void btHingeConstraint::solveConstraintObsolete(btSolverBody& bodyA,btSolverBody& bodyB,btScalar timeStep)
{
....
if (m_enableAngularMotor)
{
clippedMotorImpulse = ... ;
motorImpulseInThatStep += clippedMotorImpulse;
}
}
// after the Step
for (int = 0; i < nb_joint; i++)
{
float imp = joint[i]->motorImpulseInThatStep;
totalEnergy += imp*imp;
}
thanks
Re: energy spent for joint motor, difficulty 2.73 --> 2.74
Posted: Mon May 18, 2009 10:05 am
by acx01b
I find what value I had to sum / save to get total energy applied to hinge joints :
Code: Select all
btScalar btSequentialImpulseConstraintSolver::solveGroupCacheFriendlyIterations(...)
{
float totalEnergy = 0;
for ( iteration = 0;iteration<infoGlobal.m_numIterations;iteration++)
{
....
///solve all joint constraints, using SIMD, if available
for (j=0;j<m_tmpSolverNonContactConstraintPool.size();j++)
{
btSolverConstraint& constraint = m_tmpSolverNonContactConstraintPool[j];
resolveSingleConstraintRowGenericSIMD(m_tmpSolverBodyPool[constraint.m_solverBodyIdA],m_tmpSolverBodyPool[constraint.m_solverBodyIdB],constraint);
}
...
}
// at the end :
// sum (squared) the appliedimpulse field of the 6th "row" (btSolverConstraint struct for limit and motor calculation) of each hinge joint
for (j=0;j<m_tmpSolverNonContactConstraintPool.size();j++)
{
if (j is the 6th row of a hingeJoint)
{
float imp = m_tmpSolverNonContactConstraintPool[i].m_appliedImpulse;
totalEnergyOfTheStep += imp*imp;
}
}
}
but I don't know how to code that :
if (j is the 6th row of a hingeJoint)
thank you for help and confirmation
Re: energy spent for joint motor, difficulty 2.73 --> 2.74
Posted: Mon May 18, 2009 10:27 am
by DannyChapman
Can't help with the Bullet-specific stuff, but
Units of impulse = mass * distance / time
Units of energy = mass * distance^2 / time^2
so your calculation (energy = impulse * impulse) must be wrong anyway...
Re: energy spent for joint motor, difficulty 2.73 --> 2.74
Posted: Mon May 18, 2009 11:12 am
by acx01b
yes, I agree with you but here I consider 1/ timeStep^2 as a constant
Re: energy spent for joint motor, difficulty 2.73 --> 2.74
Posted: Mon May 18, 2009 5:02 pm
by Dirk Gregorius
But you still have the (effective) mass^2 in you energy equation.
Why do you want the enery? Would't be the applied impulse sufficient?
Re: energy spent for joint motor, difficulty 2.73 --> 2.74
Posted: Tue May 19, 2009 12:27 pm
by acx01b
I need it as quality criterion for evolutionary algorithm
yes you are right, I am going to use "the sum of impulse" instead of "the sum of impulse^2"
so my problem is still there : how to get efficiently after each step the sum of [hingeJoint 6th row].appliedImpulse ?
tks