Page 1 of 1

featherstone ABA in Bullet

Posted: Sun Nov 05, 2017 8:10 pm
by r_kh
Hi,

i'm trying to implement Featherstone's ABA so i decided to read Bullet implementation and came across this expression

Code: Select all

	//...
	//zeroAccSpatFrc[i+1].setVector(-(rot_from_world[i+1] * linkAppliedTorque), -(rot_from_world[i+1] * linkAppliedForce ))
	//...


	zeroAccSpatFrc[i+1].addVector(
		angDampMult * m_links[i].m_inertiaLocal * spatVel[i+1].getAngular() * (DAMPING_K1_ANGULAR + DAMPING_K2_ANGULAR * spatVel[i+1].getAngular().safeNorm()),
		linDampMult * m_links[i].m_mass * spatVel[i+1].getLinear() * (DAMPING_K1_LINEAR + DAMPING_K2_LINEAR * spatVel[i+1].getLinear().safeNorm())
					);


	//...
	//zeroAccSpatFrc[i+1].addAngular(spatVel[i+1].getAngular().cross(m_links[i].m_inertiaLocal * spatVel[i+1].getAngular()));				
	//zeroAccSpatFrc[i+1].addLinear(m_links[i].m_mass * spatVel[i+1].getAngular().cross(spatVel[i+1].getLinear()));
	//...
which doesn't appear in featherstone's book

i understood this is sort of damping from constant names but where does this come from?

Re: featherstone ABA in Bullet

Posted: Mon Nov 06, 2017 5:12 pm
by Dirk Gregorius
IIRC the squared omega (angular velocity) terms lead to simulation instabilities in practice. So Bullet added damping to improve stability.