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;
}
stiction for ElasticFoundationForce
- Michael Sherman
- Posts: 812
- Joined: Fri Apr 01, 2005 6:05 pm
Re: stiction for ElasticFoundationForce
Hi, Jiang. As you noted, Simbody uses a regularized friction model that always permits a small amount of "creep" velocity during stiction. For most uses, the creep velocity is so slow as to be negligible. However, for a static analysis it can be problematic since stiction forces can't be produced at exactly zero velocity. Is that why you want constraint-based stiction? Or is there another reason?
An alternative would be to use a slip_velocity==0 constraint which can be enabled and disabled. At least then the constraint will compute the correct amount of force so would work in general.
Regards,
Sherm
An alternative would be to use a slip_velocity==0 constraint which can be enabled and disabled. At least then the constraint will compute the correct amount of force so would work in general.
Regards,
Sherm
- Jiang Ping
- Posts: 132
- Joined: Sun Aug 26, 2012 4:09 am
Re: stiction for ElasticFoundationForce
Hi, Sherm
Thank you for your prompt reply.
>>However, for a static analysis it can be problematic since stiction forces can't be produced at exactly zero velocity. Is that why you want constraint-based stiction?
Yes, I want to conduct static inverse dynamics analysis in consideration of the static friction force.
>>An alternative would be to use a slip_velocity==0 constraint which can be enabled and disabled.
Is there any SimBody constraint class available to realize this?
Best regards,
Jiang
Thank you for your prompt reply.
>>However, for a static analysis it can be problematic since stiction forces can't be produced at exactly zero velocity. Is that why you want constraint-based stiction?
Yes, I want to conduct static inverse dynamics analysis in consideration of the static friction force.
>>An alternative would be to use a slip_velocity==0 constraint which can be enabled and disabled.
Is there any SimBody constraint class available to realize this?
Best regards,
Jiang
- Michael Sherman
- Posts: 812
- Joined: Fri Apr 01, 2005 6:05 pm
Re: stiction for ElasticFoundationForce
There are several constraints you could use (search for "Constraint" in the doxygen then look at the derived classes to see them all). However, the one that looks most applicable to me is PointOnPlaneContact. This could work if you know where the contact is occurring and when to enable and disable the constraint.
Sherm
Sherm
- Jiang Ping
- Posts: 132
- Joined: Sun Aug 26, 2012 4:09 am
Re: stiction for ElasticFoundationForce
Hi, Sherm
Thank you for your reply.
I want to get a stable initial state of the model by static inverse dynamics calculation so that where the contact is occurring is unknown priorly. Instead of using PointOnPlaneContact to represent the contact force, I prefer to adding some constraints for internal force computation of ElasticFoundationForce. Do you have any idea?
Thank you in advance,
Jiang
Thank you for your reply.
I want to get a stable initial state of the model by static inverse dynamics calculation so that where the contact is occurring is unknown priorly. Instead of using PointOnPlaneContact to represent the contact force, I prefer to adding some constraints for internal force computation of ElasticFoundationForce. Do you have any idea?
Thank you in advance,
Jiang
- Michael Sherman
- Posts: 812
- Joined: Fri Apr 01, 2005 6:05 pm
Re: stiction for ElasticFoundationForce
The easiest approach might be to find the equilibrium position dynamically rather than with static analysis. You could use an implicit integrator (CPodes limited to order-1 is implicit Euler) running with large steps to remove energy from the system. Or, you could actually add extra damping to the joints.
Modifying ElasticFoundationForce to produce true stiction is conceivable but not easy. You would need to add some state variables (using a "bristle" friction model).
Modifying ElasticFoundationForce to produce true stiction is conceivable but not easy. You would need to add some state variables (using a "bristle" friction model).
- Jiang Ping
- Posts: 132
- Joined: Sun Aug 26, 2012 4:09 am
Re: stiction for ElasticFoundationForce
Thank you very much, Sherm!
Using an implicit integrator solved the problem.
I used the integrator to conduct a forward dynamics simulation. Once the system became stable, I saved the state for the further usage.
Best regards,
Jiang
Using an implicit integrator solved the problem.
I used the integrator to conduct a forward dynamics simulation. Once the system became stable, I saved the state for the further usage.
Best regards,
Jiang
- Michael Sherman
- Posts: 812
- Joined: Fri Apr 01, 2005 6:05 pm