stiction for ElasticFoundationForce
Posted: Mon Sep 30, 2019 9:22 am
Hi all,
I found ElasticFoundationForce cannot represent stiction because the friction force is a continuous function of the slip velocity.
I added a constraint like code to represent the stiction (see the code below) but such implementation can only be used for a specific situation. Is there any other way (e.g. constraint in Simbody) to represent the stiction between two meshes?
Thank you in advance.
// Calculate the friction force.
const Real vslip = vtangent.norm();
if (f > 0 && vslip != 0) {
const Real vrel = vslip/transitionVelocity;
const Real ffriction =
f*(std::min(vrel, Real(1))
*(param.dynamicFriction+2*(param.staticFriction-param.dynamicFriction)
/(1+vrel*vrel))+param.viscousFriction*vslip);
force += ffriction*vtangent/vslip;
}
else if( f>0)
{
// stiction
// given the only external force is gravity
// axis x, z component should be 0
double friction_x = -force[0];
double friction_z = -force[2];
// firction dir
// axis x, z should be anti-direction of forceDir
Vec3 frictionDir = -forceDir;
// frictionDir is perpendicular to forceDir
frictionDir[1] = -(frictionDir[0]*forceDir[0] + frictionDir[2]*forceDir[2])/forceDir[1];
double friction_y = frictionDir[1] * friction_x/frictionDir[0];
Vec3 frictionTotal(friction_x, friction_y, friction_z);
force += frictionTotal;
}
I found ElasticFoundationForce cannot represent stiction because the friction force is a continuous function of the slip velocity.
I added a constraint like code to represent the stiction (see the code below) but such implementation can only be used for a specific situation. Is there any other way (e.g. constraint in Simbody) to represent the stiction between two meshes?
Thank you in advance.
// Calculate the friction force.
const Real vslip = vtangent.norm();
if (f > 0 && vslip != 0) {
const Real vrel = vslip/transitionVelocity;
const Real ffriction =
f*(std::min(vrel, Real(1))
*(param.dynamicFriction+2*(param.staticFriction-param.dynamicFriction)
/(1+vrel*vrel))+param.viscousFriction*vslip);
force += ffriction*vtangent/vslip;
}
else if( f>0)
{
// stiction
// given the only external force is gravity
// axis x, z component should be 0
double friction_x = -force[0];
double friction_z = -force[2];
// firction dir
// axis x, z should be anti-direction of forceDir
Vec3 frictionDir = -forceDir;
// frictionDir is perpendicular to forceDir
frictionDir[1] = -(frictionDir[0]*forceDir[0] + frictionDir[2]*forceDir[2])/forceDir[1];
double friction_y = frictionDir[1] * friction_x/frictionDir[0];
Vec3 frictionTotal(friction_x, friction_y, friction_z);
force += frictionTotal;
}