Scapular rhythm in the "JntSR.any"

Hi Sylvain,

I finally found a way to avoid the rotational sequence that induces a gimbal lock (Y-X-Y). Instead of driving the three rotations of the humerus (plane of elevation, elevation, external rotation) directly, I use a wall beside the body and constrains the hand to follow that wall. Then, I drive the elevation from 10 to 150°. This is the same approach as in the experimental study of Ludewig et al. (2010). Thus, the gimbal-lock is avoided and the plane of elevation can be controlled by rotating the wall in the desired plane of elevation.

The rotations of the scapula and clavicle are thus controlled by the humeral angles obtained with the Y-X-Y rotational sequence of the humerus, which corresponds to the same sequence as in the study from which the regression coefficients come from (deGroot et al. (2001)).

Using this approach, I might be able to compare the estimated kinematics from AnyBody to the experimental kinematics from Ludewig et al. (2010).

What do you think ?

Thank you

Pierre

Hi Pierre,

I think this sounds as a good approach, as i have understood the description it sounds ok, as long as the new wall do not add any forces to the human :wink:

Best regards
Søren

Hi there,

I come back to you with the same error related to the latissimus dorsi. Did you find a way to avoid it ?

Thank you.

Pierre

Hi,

Good that you remind me about it. I could not reproduce the error again with the new versions of AMS and AMMR. I think some improvement has been done to the muscle wrapping that fixed it.

I understand you still get the error, could you remind me which version of AMS and AMMR you currently use?
You can also try to increase a little the tolerance for the contact solution with SPLine.RelTol. Default value is 1e-8, try with 1e-6.

Best regards, sylvain.

Hi Sylvain,

I’m using AnyBody version : 5. 1. 0. 2588 Build : 15245.34740, along with the AMMR 1.3.1. What do you mean by new version of AMR ? Is it the forthcoming version or the most up-to-date version available for download ?

The problem remains even with a big error tolerance of 1e-3.

I tried to find what was changed in the new repository to fix this problem, but I was not able to find any change in the wrapping surfaces ? The problem comes from the EllipsoidLatissimusOrigin wrapping surface.

Fixing the problem related to muscle wrapping on this surface should help to improve the shoulder model.

Pierre

Hi,

I was just not sure if you were using the latest version. AMMR 1.4.1 is available. But i don’t think anything was changed on the repository for this muscle. I was meaning improvement in the software of the surface conatct calculation: there are new facilities for surface/surface and surface/point contact, however looking at the release notes it seems nothing has changed for the surface/muscle contact.

Anyway even with your AMS and AMMR version i still can’t see the error anymore. I’m maybe not applying the right motion. Isn’t it 150 deg of pure GH flexion with shoulder rhythm enabled?

Hi Sylvain,

It was this movement few months ago. Now we simulate activities of daily living. However, activities involving strong humerus flexion or internal rotation give us this error. I tried to change how the dimensions of the ellipsoid but it does not work. It seems to be a general problem of muscle sliding on big ellipsoid.

I managed to avoid the error by changing the number of time step. Eventually, it could be nice to get rid of it once and for all.

Thank you.

Pierre

Hi again,

I come back to you with the same latissimus dorsi error that seems to be really recurrent. I already managed to get rid of the error by changing the number of time steps, but I feel that this is more like a temporary solution to this problem.

If you have any suggestion to get rid of this error, please let me know.

Pierre

Hi,

If you can upload your model i will have a look at it. Without it i can’t tell you much more than the previous tips i gave.

Best regards, Sylvain.

Hi Sylvain,

I don’t think that my specific model is the problem, since I had this problem using the current repository 1.4.1. The kinematics that I simulated was a forward flexion with neutral humerus axial rotation. If you do not have this problem with this setting, please let me know.

Regards.

Pierre.

Hi folks,

I continue my researches on a better way to simulate the scapula and clavicle rhythms. Actually, you use some of the linear regression coefficients of de Groot 2001, along with an elliptic constraints on the ‘AI’ scapula landmark.

A recent study by Nikooyan et al. [1] used another approach, which implied an optimization process. Basically, the following objective function was used:

J = W1*(dCx^2+dCy^2+dCz^2)+W2*(dSx^2+dSy^2+dSz^2)

where dCx and dSx are the differences between the measured and optimized angles for the clavicle and scapula around x-axis, while a similar definition is applied for angles around the y-and z-axes. W1 and W2 were weight factors set to 1 and 2, respectively. There were also 3 constraints in the model, which were a fixed conoid ligament length, and two contact constraints between the ‘AI’ and the ‘TS’ node and the elliptic thorax.

I know that you can do kinematic optimization in AnyBody. I already have some measured joint angles data which comes from the study of Ludewig et al. [2]. In my researches, I conclude that these joint angles leaded to a non-physiological kinematic of the scapula and clavicle. Thus, I feel that with this optimization, the resulting kinematic would be improved.

However, I don’t know if it is possible to implement this exact optimization function in AnyBody. What do you think ?

Thank you.

Pierre

REFERENCES:
[1] Nikooyan, A.A., Veeger, H.E., Chadwick, E.K., Praagman, M., Helm, F.C., 2011. Development of a comprehensive musculoskeletal model of the shoulder and elbow. Medical and Biological Engineering and Computing 49, 1425-1435.

[2] Ludewig, P.M., Phadke, V., Braman, J.P., Hassett, D.R., Cieminski, C.J., LaPrade, R.F., 2009. Motion of the shoulder complex during multiplanar humeral elevation. J Bone Joint Surg Am 91, 378-389.

Hi Pierre,

I have briefly read the section in the article describing this.

As i understand this they have joint angles as input to the model and since these angles will not make all constraints fit they use a cost function to handle the over constrained problem they end up having.

As i see this, it is someway similar to what you would do in a model driven by markers. In this model the markers would be violated as needed but the constraints would still be fullfilled.

Do you have joint angles as input to the model?

Happy new year!

Best regards
Søren

Hi Soren,

Yes I have joint angles, not MoCap. Is it still possible with some optimization function ?

Regards

Pierre

Hi Pierre,

Then it is actually easy, you simply define your joint drivers as soft drivers… then it will be someway similar to the paper i guess. It will then fullfill the hard constraints in the model and do its best to follow the soft constraints.

Best regards
Søren

Hi Soren,

I also though about switching the constraints to soft, but I was not sure. With this method, can you apply a weight to the constraints or the kinematic measures ?

Regards

Pierre

Hi Pierre,

Yes, you can also add weights when you are using soft contraints this is a built in feature, if you check the ref manual you will see all AnyKinEq… objects has weight functions.

So you can have a combination of hard constraints and soft constraints with weights, by default the weight is one.

Best regards
Søren

Hi Soren,

Ok ! So with your method, we do not need to use the AnyOptStudy to optimize the scapula position, right ?

PO

Yes, you should apply your measured angles as soft drivers for AC and SC joints and then use the overdetermined kinematic solver to resolve the redundancy you end up having, due to the scapula/thorax contact and conoid ligament.

Best regards
Søren

Hi Soren,

If I understand, the overdetermined kinematics solver is a kind of optimization process that tries to fulfill all the constraints according to their respective weight.

In this case, the challenge remains to find the right weight functions resulting in the lowest possible error for each measure (kinematics and constraints). This would represent a trade-off between the joint angles and the constraints. In this case, I think that the AnyOptStudy would be useful.

However, when you make a constraint soft, you loose the original joint angles, and you cannot compute the sum of squared deviation like in the Nikooyan’s paper. The only way I can imagine is to create two different sets of clavicle and scapula constraints, one set of hard constraints and one set of soft constraints. Then, I would be able to compute the sum of squared deviations and do the optimization.

What do you think ?

Pierre

Hi Pierre,

If you add the joint drivers as soft you are right it will not follow these 100% depending on the hard constraints present.

You do not need add two sets of drivers hard and soft to see the violation. All drivers has a Pos value which is driven to be zero (less than kin tol) for a soft driver it may not be zero but a larger number, which you can read out.

Which weight to use for each dof will depend on your priorities, by default they all are all one. I am not sure what is the right weights it will always be a trade off between the dof’s.

Best regards
Søren