Non-conforming shoulder

Hi there,

I’m using the version 5.0 of the software and I’m trying to simulate the shoulder joint as a non-conforming joint, involving little perpendicular movements of the humeral head on the glenoid, which are due to the GH reaction force.

I switched the CType value in the Y direction to ‘ForceDep’ and in the X direction to ‘Soft’. However, the displacement that I get in the Y direction is too important. I think this is due to the ligaments that are supposed to maintain shoulder stability when the arm is along the body.

Can we set a parameter that will avoid these large displacements, like a tolerance or something else ?

Here is my code:

AnyKinLinear GHLin = {
AnyRefNode &scapula_gh = …Seg.Scapula.gh;
AnyRefNode &humerus_gh = …Seg.Humerus.gh;

Ref=0; //use this for shifting between the two ref systems: scapula=0, humerus=1

};

AnyKinMeasureOrg GHLinX = {
AnyKinLinear &GHLin = .GHLin;
MeasureOrganizer = {0};
};

AnyKinMeasureOrg GHLinY = {
AnyKinLinear &GHLin = .GHLin;
MeasureOrganizer = {1};
};

AnyKinMeasureOrg GHLinZ = {
AnyKinLinear &GHLin = .GHLin;
MeasureOrganizer = {2};
};

AnyKinEqSimpleDriver GHLinCon = {
AnyKinMeasureOrg &GHLinX= .GHLinX;
AnyKinMeasureOrg &GHLinY= .GHLinY;
AnyKinMeasureOrg &GHLinZ = .GHLinZ;
DriverPos = {0,0,0};
DriverVel = {0,0,0};

CType = {Soft, ForceDep, Hard};

Reaction.Type={Off,Off,Off};
};

Thank you.

Pierre

Hi again,

I found the problem related to the too large displacements. It was related to the use of the quadratic recruitment criterion, resulting in a non-activated rotator cuff. Using the MinMaxStrict recruit the rotator cuff works to limit the translation to smaller values.

Now I the following error at step 9 of the inverse dynamics analysis:

Failed to resolve force-dependent kinematic constraints. Newton relaxation too small. (final kin. error = 2.093846E+001)
Constraint no. 0 above error tolerance 0.001000, error = 2.386776.
Constraint no. 1 above error tolerance 0.001000, error = 20.938463.

What should I do ?

Thank you

Pierre

Hi Pierre,

There is no tolerance parameter to limit the displacement of the force dependent DoF. The only way to limit it is by the force itself, so typically adding some joint stiffness or ligaments.

Now about the error. Depending on your model configuration it can be that some hard constraints are affected by the force dependent ones. So if the force dependent DoF are doing wild things it can lead to this error. It can also be that at some point there are not enough forces to hold the force dependent DoF and the mechanical system collapses.
Try to constrain a bit more your force dependent DoF by adding ligaments, as I undertood they are not included yet.

Best regards,
Sylvain.

Hi Sylvain,

Thank you for these advices. How can I add joint stiffness ? Adding ligaments will be a difficult journey, but I think that we should do it one day or another.

What is the difference between the ‘hard’ and ‘soft’ constraint types of the CType option ?

Thank you.

Pierre

Hi Pierre,

There is an example of the joint stiffness implementation in the wiki page:
http://wiki.anyscript.org/index.php/Tips_and_tricks#Adding_stiffness_in_joint

In all cases you need forces to balance the force dependent kinematic DoF at any time. Most of the time just the muscles are not enough because they can be inactive at some point of the simulation. So it is good to have either ligaments or joint stiffness there, depending on the available data.

For the CType: Hard is the normal default constraint type that was always used, where no violation of the constraint is allowed. The Soft type is using the over determinate kinematic solver, and here violation is allowed but the system will do the best compromise to minimize this violation. So a soft constraint is much less subject to faillure than a hard one, but in return you have less control on it.

Best regards,
Sylvain.

Hi Sylvain,

I’m not able to find the right way to add translational stiffness in the GH joint, based on the example. I tried to add a force which acts when the translational components of the “GHLin” are non-zero, but the simulation does not converge. I tried to add ligaments around the GH joint, but I would have to use ShortestPath Ligaments, which does not exist in AnyBody. Also, the mechanical properties of GH ligaments are hard to find in the literature.

If you know the correct way to add translational stiffness, please tell me !

Thank you very much.

Pierre

Hi Pierre,

The script for the translational stiffness should be very similar to the rotational one in the example. You just have to replace the rotational measure of the joint by the a linear measure between the two nodes, and input length instead of angles in the interpolation function. Then the AnyForce is applied to the linear measure.

The reasons for simulation not converging could be that the stiffness is too low, or maybe the force is applied in the wrong way (make sure it is not pushing the joint away, that happens), or one of the directions is not carried.

Best regards,
Sylvain.

Hi Sylvain,

How do I check if the force acts in the right direction ? I tried to plot the force with a vector, but I cannot process the same way as the GHReactions.any, because the kinematic measure is a AnyKinSPLine. How do I proceed with this kind of kinematic measure ?

Thank you.

Pierre

Hi Pierre,

Actually with a PLine or SPLine it is quite simple. When the force is negative it means the line is pulling, trying to shorten itself. This is what you want for your ligament model.
And if the force is positive it means the line is pushing.

So in the interpolation function used to apply the force to the SPLine I guess you have length as input in the T menber, and you should have negative forces in the Data menber.

Best regards, Sylvain.

Hi Sylvain,

Ok, understand. I’ll try that in the model. With a SP line, is there a force perpendicular to the surface, or just a force at each end points ?

Thank you.

Pierre

Hi Pierre,

The SPLine will apply a normal force on the surface it is in contact with, exactly like a wrapping muscle.

Best regards, Sylvain.

Hi Sylvain,

I’m trying to understand how the “Force dependant kinematics” algorithm works. Because there is no velocity and acceleration, does the system compute a position at which the equilibrium will be held ? If yes, is this the reason why I get a reaction force purely perpendicular to the glenoid surface when I use this algorithm ? If so, it will be difficult to simulate instability at the GH joint using this algorithm.

Thank you

Pierre

Hi Pierre

The algorithm will enforce that the velocity and acceleration is zero for the DOF you are driving the with the force dependency, that is correct.

Without knowing the details of your joint reaction setup this will not automatically give a perpendicular reaction force. The direction of the reaction force will depend on the rest of the model, and how the reaction force has been implemented?

Best regards
Søren

Hi Soeren,

I was referencing to the shoulder “GHReactions.any”. In reality, the force is not purely perpendicular to the glenoid but close to be perpendicular. However, without velocity and acceleration, its semi-static. Thus, instability cannot be simulated, right ?

If the humeral head translate to much upward, does the model will not be able to keep the resultant force within the glenoid and give an error, which would indicates a potential superior instability. I ask the question because John told me that the only way to show GH instability with the GHReactions.any is to force the model to end with an error or with overloaded muscle because it is not able to find a muscle recruitment for the giving configuration.

Thank you.

Pierre

Hi Pierre,

It is correct that the algorithm will find the equilibrium where the velocities and acc is zero so it is not well suited for finding an unstable configuration.

If you move the head too much upwards your are right at some point it will not be able to balance the force and it will fail.

Does this answer your question?

Best regards
Søren

Hi Soeren,

Yes it is pretty clear. Is it possible to mix forward and inverse dynamics in the same software ? I think Simulink (Matlab) does that !?!? If yes, is it part of your short term planning ? I think instability and accelerated movements come together ! What’s your opinion ?

Anyway, your implementation of the Force dependent kinematics is a really good improvement that will help me much. I think that it is reliable for low velocity elevations of the arm. While using it, I found humeral head displacements up to 7 mm. I look forward to test it with my massive rotator cuff tear configuration !!

Thank you.

Pierre

Hi there,

I simulate an elevation in the plane of the scapula from 0 to 135 degrees with the force dependant kinematics. I use a stiffness in the inferior, superior, anterior and posterior directions applied at the GHLin, and the value comes from the literature (4000 N/m).

The results show high humeral displacements. When I look at the rotator cuff activities, I find low values, compared to EMG data from the literature.

How can I improve the model to activate more the rotator cuff muscles at the beginning of the movement ? I tried to tighten the constraining zone of the GH reaction force, to force the reaction force to be more toward the glenoid midst, but it does not seems to help much.

Best regards.

Pierre

Hi Pierre,

Difficult question to answer…

If the rotator cuff muscles are not active enough, then which muscles carries the load instead?

Best regards
Søren

Hi Søren,

Are you asking me this question while already knowing the answer :slight_smile: ? I think that the constraint that force the joint reaction force to stay inside the glenoid cavity and thus recruits the rotator cuff accordingly is no longer valid while simulating the humeral displacement. In fact, I get a really similar activity of the rotator cuff while both preventing and allowing humeral translations. Maybe we should find another way to link the humeral translation to rotator cuff activity.

What do you think about that ?

Best regards.

Pierre

Hi Pierre,

I did not know the answer sorry, but i think your arguments sounds reasonable. This reaction constrain most likely controls a lot.

I am not fully aware of the geometry you have in the joint, maybe there are some contact taking place which could be used on top of the cavity constraint.

Best regards
Søren