I would like to use the ligament polynomial function, including the a0 and a1 terms. I cannot use the function “AnyLigamentModelPol” because I simulate the ligament with a “AnyKinSPLine” rather than with the “AnyViaPointLigament”. In the tutorial, it is written that the function is in the form of “F = C0 + C1eps + C2eps^2 + C4*eps^4”. However, the value of each constants is not specified.
Also, do you know a way to trace the force computed on a AnyKinSPline measure ?
In the tutorial there is also an explanation on that these coefficients is not specified directly but by a0 and a1 see below...
did you read this?
Best regards
Søren
As you can see, it is a fourth order polynomial with the third order term missing. The 0'th order coefficient accounts for the slack length, and the first order coefficient accounts for the slope when the model is linear and the second and fourth order terms are missing. But in the presence of the nonlinear terms it becomes very difficult to interpret the significance of each term. For this reason, the nonlinearity in the model is defined by two parameters with an easier interpretation than the above-mentioned C2 and C4.
The two parameters are called a0 and a1 respectively. The first parameter, a0, defines the slope of the curve at slack length. If you study the curve above, you can see that it has a sharp kink at the slack length. It changes abruptly from zero slope to the nominal slope given by (eps1,F1). The default value of a0 is 1, and this corresponds to the slope right after the kink being defined entirely by (eps1,F1). In other words, the curve is pointing directly at the point (eps1,F1). In fact, the significance of the a0 is that it interpolates the slope between zero (for a0 = 0) and the linear slope you see in the curve above for a0 = 1. Try inserting the following:
Yes I read it. But some info is missing ! I need the exact formulation, i.e. the values of C0 to C4 in terms of the constants L0,L1,eps1, a0 and a1 ! Otherwise, I cannot implement it correctly.
Actually i do not see a reason for not having the possibility to use a shortest path ligament, we have all the ingredients to create this facility, i have added this element to our wishlist.
I do not have the equations on hand for this, i will try to see if i can get hold on them.
In the meanwhile there is a hack, but it is by no means elegant but i think it would work…
[ol]
[li]Create a dummy segment
[/li][li]Create a prismatic joint on the segment
[/li][li]Create the AnyKinSPLine
[/li][li]Create a AnyLinCombinationMeasure between prismatic joint and AnyKinSPLine use Coef={1,-1} meaning that measures will be equal
[/li][li] Drive the combination measure to zero, have the reactions switched on…
[/li][li]Create the AnyViaPointLigamant between dummy seg and ground
[/li][/ol]
Good suggestion. I would be happy to do that, but I think I will wait for the AnyShortestPath ligament. Anyway, GH ligaments are loosed in the mid range of motion, so I don’t need them actually.
Could you provide me the reference (paper, book) for the ligament polynomial model ? I would probably use it in my thesis, so having the original reference is better.
Instead, I simulated the concavity compression mechanism by using pushing spring nodes that have the shape of the glenoid cartilage/labrum socket (see figure). However, the problem is that I must input a stiffness that is three times the real stiffness, in order to obtain displacements of about 1 mm, otherwise i get to high displacements (6 mm). Do you see an explanation ?
Sorry but i do not have a reference for the ligament model available.
It can be many things which causes this behavior, i have some questions:
[ol]
[li]what type of material properties did you use for the contact between humeral head and the cavity?
[/li][li] how do you divided the spring stiffness between the individual springs.
[/li][li] it could also be a moment-arm of a muscle which is would influence the displacement, did you check moment arms of muscles?
[/li][li] how did the measure between points on labrum? this needs to be done with the AnyKinPointSurface measure, so define a number of point on the backside of the labrum socket and measure up to a sphere or ellipsoid fitted to the humerus head. Then use switch off “NormedMeasureOnOff” and apply your springs to all the output from the measure, which measure shortest distance from point to surface.
[/li][/ol]
What type of material properties did you use for the contact between humeral head and the cavity?
[ul]
[li]I used cartilage and labrum constant stiffness. On the peripheal nodes, I used a cartilage spring in series with a labrum spring. You can have a good idea of the values in the following paper: J. Carey, C. F. Small and D. R. Pichora (2000). “In situ compressive properties of the glenoid labrum.” Journal of Biomedical Materials Research 51(4): 711-716.[/li][/ul]
How do you divided the spring stiffness between the individual springs.
[ul]
[li]Using the stiffness from the paper of Carey (2000) and the following equation:[/li][/ul]
n = number of spring elements
St = Stiffness from the study of Carey (2000)
R = Radius of the needle used in the study of Carey (2000)
Area = Area of the glenoid in our model
Stiffness = St*(Area/(pi*R^2))/n
It could also be a moment-arm of a muscle which is would influence the displacement, did you check moment arms of muscles?
[ul]
[li]I did not check that but I would like to know why a muscle moment arm would cause that ?[/li][/ul]
how did the measure between points on labrum? this needs to be done with the AnyKinPointSurface measure, so define a number of point on the backside of the labrum socket and measure up to a sphere or ellipsoid fitted to the humerus head. Then use switch off “NormedMeasureOnOff” and apply your springs to all the output from the measure, which measure shortest distance from point to surface.
[ul]
[li]This is exactly what I did. On the top of that, the AnyKinPointSurface with the sphere on the humerus_gh gave me the penetration and another AnyKinPointSurface with a sphere fixed on the scapula_gh gave me the initial thickness of the cartilage/labrum.[/li][/ul]
Do you see what could be wrong ?
Concerning the muscle moment arm these will be able to influence the displacement, changing a moment arm will alter the reaction force in the joint and thereby also the amount of displacement.
The moment arm seem correct. No one shows strange values.
I tried to add a stiffness coming from the interposed tendon between the acromion and the humerus, just during the first degrees of elevation, but it does not help much.
I’m still convinced that rotator cuff activation is somehow faulty. My idea is that when we got rid of the GHReactions.any, we removed the link between the rotator cuff muscles and the orientation of the joint reaction force. We may seek for another constraint similar to that, which would ensure that this orientation stays really close to the midst of the glenoid cavity. Thus, the resulting translation of the humeral head would be limited.
What do you think about this idea ?
Can we use both the GHReactions.any and the pushing cartilage nodes synergistically ?
Unrelated to this work i have thought about that an obvious place to use the FDK solution would be to control the motion of the artificial rake. As you may have seen it is controlled by the rotations between scapula and humerus, which was the only possible way to do at that time. Today it might be possible to use the FDK solution to control some of these rake dof., i am not sure but it might change your results, but it will influence the activation of the rotator cuff muscles.
Concerning the use of the GH reactions together with the pushing cartilage i can not really see how this could be done…
Basically the construction you have now with the springs should be able to do the same as befroe. Have you tried to turn up the stiffness of the translation dof in the joint and then compare the results to what you had before?
Ohhhh what a good idea is to free the rake!! I should have thought about it before. About the stiifness, I will try it and come back to you with an answer.
[ol]
[li]Add FDK on the DOF controlling the rake motion, for example the rotation around humerus. I seem to recall there is a revolute joint there which could be used for this… but i did not check.
[/li][li]Add stiffness to the same dof, there is none now.
[/li][/ol]
I followed you advice and released the revolute joint (Y axis). The good news is that the recruitment seems better. However, the stiffness has to be really high in order to prevent a FDK error and thus, the rotation angle does not really change. At higher angles, the sixth deltoid scapular division is activated and because its line of action is not straight, this creates a significant torque (2 Nm) around the Y axis, which does not seems physiological.
So I think that the deltoid muscle simulation still need to be improved.
Do you have another idea, apart from the Y rotation ?
Can I change the tolerance (InverseDynamics.ForceDepKin.ForceTol) in such a way that the error will be avoided or postponed ? If yes, what does it change if I use a higher value ?
It seems that the recruitment criterion (set to MinMaxStrict) was causing the problem of the FDK convergence. Using an auxiliary criterion resulted in less onset and offset muscle activation and less quick changes in the forces.
That makes sense.
The MinMaxStrict have indeed sharp muscle activations, whereas the quadratic or polynomial create more smooth activations and forces. So it is not surprising that it makes it easier for the FDK.