I’m trying to simulate a friction between the humeral head and the glenoid in a simple 2D model. You can find the model in the attachment. The main file is called “Shoulder2D.any”.

Please open the “GlenoidNormal.any” file. In this file, I create a slider and revolute segments, in order to place a node on the humerus that has its X direction perpendicular to the glenoid surface point. Then, I apply a friction forces in the other directions of that point.

My problem is that I cannot get the friction to be applied on the humerus. Indeed, when I use the AnyForceMomentMeasure2 object, I don’t see any force applied on the humerus. I don’t understand why. I would expect that the force would be transmited to the humerus segment, since the prismatic segment is connected to the revolute segment and the revolute segment to the humerus.

GlenNode is one of the GlobalRef nodes, so basically you have a reaction force between the SliderSeg and the globalRef. And the friction force goes to the Globalref instead of the humerus.

You should set that reaction to Off and create another AnyReacForce to the humerus this time.

Thank you for the answer. It was evident !!! I was too tired

I’m now back in my 3D model, but I’m stuck to the point of determining the instantaneous orientation of the friction node, depending on the glenohumeral rotations (GHRot). I already tried the following way:

Nf = Normal force (scalar)
Nfv = Normal force vector
Unfv = Unitary normal force vector = Nfv/vnorm(Nfv)

Iar = Instantaneous axis of rotation (humerus wrt scapula)

Uiar = Unitary instantaneous axis of rotation = Iar/vnorm(Iar)

mu = Friction coefficient

…

Friction vector = muNfcross(Unfv*Uiar)

… while using the following measures

// used to compute the instantaneous axis of rotation
AnyKinRotational Iar = {
AnyRefNode &ref1 = …Seg.Glenoid.GH;
AnySeg &ref2 = …Humerus;
Type = RotVector;
};

// use to compute the normal vector
AnyKinLinear Nfv = {
AnyRefNode &ref1 = …Seg.Humerus.GH_COR;
AnyRefNode &ref2 = …Seg.Glenoid.G1;
Ref = 0;
};

if I plot the force using that computation, I don’t get the right orientation.

I have some doubts about how you calculate the Iar and Nfv vectors. I think those two should be expressed in the same coordinate system for the cross product to be effective.

However if i am right, the rot measure (Iar) with the RotVector type will give you the vector in the first ref frame coordinate system, which is Glenoid.GH. Also equivalent to have it in the second ref with a -1 factor, and that is Humerus.
And the ref frame for the linear measure (Nfv) is Humerus.GH_COR.

Don’t you think that could be the cause of the problem?

You were right that the both measures had to be in the same ref frame. On the top of that, using the rotational velocity gives a better result, compared to use the rotational position.

What would be the influence of using the “AngVelOnOff” on the velocity measure ?

You should have a look at the reference manual, in the AnyKinRotational section. Usually it is used to calculate moment on the rotational measure, to make sure to have the correct units.

But I think this is not needed in your case. Because you are only interested in the direction of the vector to apply the friction, and not its length, isn’t it?. It seems you normalize it anyway to have a unity vector.

Yes it is right. I guess in that sense both the pos and vel measure are correct.

I have another question: What is the AnyForceConBasisCone ? Is this constraints serves to simulate a friction cone ? I would like to create a static friction mechanism in the top of my kinetic friction, so maybe this constraint is what I should use

Yes, this constraint makes a friction cone. So it is good for your static friction. As always you will find the full description and an example in the reference manual.
Note that it is a new class that we have not use very much yet. So don’t hesitate to report any strange behaviour (there could be a few bugs still).