Upper-extremity model

Dear all,

I try to define a model for the simulation of upper-extremity movements. I started from the generic body model and could run the kinematics through motion capture. When running the inverse dynamics on some reaching movements, I could notice that the Pectoralis_minor2_cyl should probably be modified since the pectoralis_major_clavicular_part_4 doesn’t go over it but at its extremity and because the pectoralis_major_clavicular_part_5 goes under and not above it. However, I have problem to understand how this wrapping cylinder is defined and how I could modify its nodes to make it longer and maybe modify its location. Can you please help me?

Thanks a lot in advance,

Laetitia Fradet

Hi laetitia,

It could also be because of the initial position. There is the SPLine.InitWrapPosVectors menber for each wrapping muscle that controls the initial path of the muscle. this is to ensure that it wraps on the correct side of the cylinder. If the initial position of the body is already the reaching position it may be that those vectors push the muscle to wrap incorrectly. In that case the vectors have to be modified. There is an example of how to do it in the tutorials ([COLOR=black][FONT=Tahoma]http://www.anybodytech.com/index.php?id=685).[/FONT][/COLOR]

If the muscle wraps correctly at the begining and then slip during the motion then as you suggested the cylinder can be made longer. To do so in the cylinder definition there are 3 nodes: node1, node2 and node3 defining the origin, length and radius of the cylinder. To make it longer you can move the node1 further on the Z axis.

Best regards, Sylvain.

Hi Sylvain,

Thank you for your answer. In fact, for the majority of the movements, the starting position is the same. Namely, the subject starts with his hands on his tights (the subject is seating). Therefore, the starting position should not be the problem. Moreover, at the beginning of the movement, the position of the pectoral muscles relative to the pectoralis minor wrapping cylinder looks correct.

By myself, I could guess that we should “play” on the node 1, 2, and 3 of the wrapping cylinder. However, in the case of the Pectoralis_minor2_cyl, I don’t really understand where these 3 nodes are defined. The Pectoralis_minor2_cyl is defined as following in the Arm\Muscle.any file:

AnyFolder Pectoralis_minor2_cyl={
AnyMatrix InitialAxes = …Seg.Scapula.Axes0;
AnyFunTransform3D &Scale=…Scaling.GeometricalScaling.Scapula.ScaleFunction;
AnyVec3 InitialPos = …Seg.Scapula.r0+.pectoralis_minor_2.Ins.sRel*…Seg.Scapula.Axes0’;
AnyRefNode &StartNode = …ShoulderRef.O_pectoralis_minor_2;
AnyRefNode &EndNode = …Seg.Scapula.I_pectoralis_minor_2;
#include “WrapperCyl.any”
};

The 3 nodes appear in the WrapperCyl.any file. However, it is not clear whether the WrapperCyl is one wrapping cylinder only defining the Pectoralis_minor2_cyl or whether it used elsewhere by other wrapping cylinders. Indeed, there is no comment in this file. Therefore, my question is: should I modify the nodes in this WrapperCyl.any file?

Thanks again (ou merci) in advance for your answer,

Laetitia

Hi,

So it is not the initial positions. About the WrapperCyl.any file you are right that the way it is constructed suggests that the file is used for other cylinders. But i checked it and it is not the case, it only serves for the Pectoralis_minor2_cyl. So you can safely move the node1 directly in the file and it will not affect any other cylinder.

Making the cylinder longer should help for the muscle wrapping on the edge, but the ones wrapping on the wrong side may have another cause: too few time steps. If there are few time steps resulting in a large motion between two steps then it can be that a muscle ends up on the opposite side of the cylinder. This is because the position of the previous step is used as initial condition to solve the following. So you can also try to increase the number of time step.

(et bon retour en allemagne alors, je viens d’apprendre que tu es rentré.)

Sylvain.

Bonjour!

Would this be the SPLine.StringMesh variable? I've had some problems with the "Pectoralis-cylinders" for skiing simulations (large range of motion for the gh-joint). So far, increasing the SPLine.StringMesh variable have helped every time. And, interestingly, when the kinematics work fine (usually after quite some work) I have always been able to reset the SPLine.StringMesh variable to its default value in the Brep.
/jokke

Rebonjour à tous!

The SPLine.StringMesh variable is more linked to the problem of the system not being able to solve the contact at all, typicaly giving an error like “too many iteration used”. In this case increasing the SPLine.StringMesh definitly helps, that is right.

My first thought is that it will not have a big impact on the problem of muscle wrapping on the wrong side. Because in this case the system can solve the wrapping, it just pick the wrong solution.

Best regards, Sylvain.

Hi everybody,

Thanks a lot for the tips. So, I’ve increased the length of the wrapping cylinder and it works, the pectoralis_major_clavicular_part_4.SPLine wrapps now well above the cylinder.

Unfortunately, I have another problem with another movement, a reaching task performed on the right side. This time, the sources of errors are the subscapularis muscles and the AnySurfEllipsoid called art_gh_humRef. When I look the model view when the error occurs, what’s wrong doesn’t look obvious (I’ve attached the figure). I know it’s art_gh_humRef the problem because when I deleted it for the subscapularis_4, it worked (an error came later for another part of the subscapularis muscle). However, this ellipsoid is important for these muscles and cannot be just erased. My problem is that I don’t see what should be modified. I can always play with the dimension of this ellipsoid but I really don’t see what’s wrong. Does somebody have any idea?

One more time, thanks a lot for your help!

Laetitia

Hi Laetitia,

Good to know that the pectoralis muscle wrapping is fixed. About the subscapularis now, what kind of error do you have exactly? Can the system solve the wrapping like it did for the pectoralis or do you get an error that stops the analysis? Could you maybe send the error message? It is hard to tell from the picture.

Best regards, Sylvain.

Hi Sylvain,

Well, unfortunately, the error message doesn’t help that much. It’s the same message as for the pectoralis muscle and, yes, the analysis it stoped. It says:
ERROR(OBJ.LIB.OOS1) : C:/Anybo…model/A…0/Body/A…n/Arm/Muscle.any : subscapularis_4.SPLine : Unexpected exception in the library OOSol :
OOSol exception : MISSING MESSAGE.

That’s the reason why I tried to look the picture to have an idea of what the origin of the problem could be.

I wait for your suggestion!

Laetitia

Hi,

That means the contact solution for the wrapping failed, and as there is no obvious problem on the picture like wrapping on an edge it could well be the case suggested by jokke earlier, i.e. the muscle is correctly positioned regarding to the surface but the system cannot solve completly the wrapping contact.

You can try to increase the subscapularis_4.SPLine.StringMesh, and also increase a little the number of time step. That should do it.

Best regards, Sylvain.

Hi Sylvain,

After a congress, I’ve tried what you’ve suggested. Unfortunately, it didn’t work, I have the same error message. I’ve also tried to “play” with the art_gh_humSurf but when I do that, I have a lot of warnings regarding via-points of other muscles. Therefore, I guess it is a bad idea to touch this ellipsoid.

Do you have by any luck any other suggestion? The number of steps is such that it almost corresponds to a frequency of 60Hz. So, I don’t think that the number of steps should be a problem, is it correct?

Regards,

laetitia

Hi Leatitia,

The number of steps should be a problem if it is close to 60Hz. As to play with the ellipsoid itself i would not recomend it, as you saw it is quite delicate.

The problem seems to be more complicated than what i thought. I think at this point i would need to have a look at the model to see what is going wrong. You can post the model if that is ok with you and i’ll look at it.

Best regards, Sylvain.

Hi Sylvain,

Yes, I’m sorry, it looks a little bit tricky. In fact, when the problem occurs, the arm is 90° degree abducted. It looks like the subscapularis muscle doesn’t wrap over the glenoid as it should. I have to admit that I don’t really see what I can do. I’m going to increase the number of steps just in case.

I’ve attached the model for you to test.

Thanks for your help,

laetitia

Hi Laetitia,

What happens is a little tricky. Idealy the scapularis muscle should wrap around the humerus head like the deltoid with all fascicles keeping a constant distance between each others (because in reality it is one whole muscle and the fascicles are kind of stuck to each others). In the deltoid this is achieved with the artificial rake that prevent the fascicles to slide on the sides of the sphere.
As the scapularis doesn’t have this sort of constraint, the fascicles just split in two groups while the ellipsoid is rotating, and each group slide to one side of the ellipsoid. So it seems that the scapularis4 is like in between of those two groups and try to shift its side during the motion.

Now it appears that with a high number of steps (860) it is unable to shift its side and causes the error. With fewer steps (360) it will just shift its side quietly and without any error.

So all that is not very good, neither the error or the flickering muscle. But i am affraid it is difficult to avoid right now. So you might have to do with the flickering muscle for the moment (by lowering the number of steps).

Best regards, Sylvain.

Hi,

I have another problem. In that case, the trapezius_scapular_part_1 wraps under the margo_medialis cylinder. So, I try to modify the cylinder to avoid this problem. In particular, I would like to change the origin of this cylinder (sRel) to make it longer and to move a little bit its longitudinal axis (such as the surface stays at the level of the scapula surface meanwhile the cylinder becomes bigger, which should avoid the solver to chose the wrong solution).

However, I have problems to understand how sRel is defined for this cylinder. In particular, I don’t understand the vector {-0.005860,-0.049655, 0.000000}. Where does it come from? Could you please explain it to me?

Again, thanks a lot for your help!

Laetitia Fradet

Hi,
basically the vector was fitted to the scapula, as there was no data for this point.
Best regards,
Sebastian