Bergmann Model with SHR

Hi,
I wanted to compare some of my results with those obtained by using the Bergmann Model (in the Validation folder of the AMMR version 1.6.1.).

I switched ON the BM_ARM_SHOULDER_RHYTHM_RIGHT Variable:


Main = {
  #define BM_ARM_SHOULDER_RHYTHM_RIGHT ON

However, I get the following error:
ERROR(OBJ.MCH.KIN2) : D:/D…s/B…y/A…6/A…n/V…n/B…H/BergmannGH.Main.any(42) : Study : Model is kinematically over-constrained : Position analysis failed : 3 unsolvable constraint(s) found

In fact I understand it and it makes sense since there are 141 constraints for (only) 138dof. I think it’s more efficient to ask you rather than spending hours on solving the problem… So, my question is to konw if you would have any recommendations to easily solve this issue.

Thanks for advices !
Lauranne

Hi, again !
An update and a new question…!

It seems I’ll answer myself to my previous post; could you just confirm what I did is good ? In fact I removed the sternoclavicular driver in case of SHR :


  //Sterno clavicular joint driver
  #if BM_ARM_SHOULDER_RHYTHM_RIGHT == 0
    AnyKinEqSimpleDriver SCDriverRight ={
      AnyKinMeasureOrg &ref1 =...HumanModel.Interface.Right.SternoClavicularProtraction;
      AnyKinMeasureOrg &ref2 =...HumanModel.Interface.Right.SternoClavicularElevation;
      AnyKinMeasureOrg &ref3 =...HumanModel.Interface.Right.SternoClavicularAxialRotation;
      DriverPos = pi/180*{
        .JntPos.Right.SternoClavicularProtraction,
        .JntPos.Right.SternoClavicularElevation,
        .JntPos.Right.SternoClavicularAxialRotation
      };
      DriverVel = {
        .JntVel.Right.SternoClavicularProtraction,
        .JntVel.Right.SternoClavicularElevation,
        .JntVel.Right.SternoClavicularAxialRotation
      };
      Reaction.Type={Off,Off,Off};
    };
  #endif

My next question is related to the AnyKinSPSheet: is there any way to enforced the initial position ? In fact, I used the AnyKinSPSheet to model deltoid and wrap on a sphere. But, for small arm elevation angles the muscle fibers don’t wrap “on” the sphere but rather “under” the sphere. I attached a picture to a better explanation.

Thank you for your advices !
Lauranne

Initial position of the sheet can be specified. The Class-Example for AnyKinSPSheet shows how. It is this section of the file that specifies the init. positions of the sheet (Notice this sheet has two parts):
//InitWrapPosOnlyOnOff = On;
AnyFloat InitWrapPosVectors1 = {
{ {0.1,-0.05,-0.15}, {0.1,-0.025,-0.15} ,{0.1,0,-0.15}, {0.1,0.025,-0.15}, {0.1,0.05,-0.15}}
,{ {0.15,-0.05,-0.25}, {0.15,-0.025,-0.25} ,{0.15,0,-0.25}, {0.15,0.025,-0.25}, {0.15,0.05,-0.25}}
,{ {0.2,-0.05,-0.15}, {0.2,-0.025,-0.15} ,{0.2,0,-0.15}, {0.2,0.025,-0.15}, {0.2,0.05,-0.15}}
};

    AnyFloat InitWrapPosVectors2 = {
      { {0.25,-0.05,-0.15}, {0.25,-0.025,-0.15} ,{0.25,0,-0.15}, {0.25,0.025,-0.15}, {0.25,0.05,-0.15}}
    };
    
    InitWrapPosVecArr = {
      &InitWrapPosVectors1,
      &InitWrapPosVectors2
    };

Hello !
First, I’m sorry for the delay, at least to thank you…

I looked into this question anew for the last days and I would have a new question regarding the available parameters for the AnyKinSPSheet class.

At this time I successfully implemented the surface wrapping into my model. However, I did not play with the input parameters and kept the default settings. I’d like now study the influence of these inputs on the results (muscle forces, joint reaction forces, …) , but I haven’t a precise idea of the physiologic meaning of the parameters. I read in details the reference manual as well as other threads in the forum, but I can’t figure out acceptable ranges to test.

Here are some specific questions as examples:
1- lateral stiffness if managed by a linear spring equation. Which stiffness would you recommend to test? Do you think that this parameter is correlated to any “real” value of muscle?

2- why adding a longitudinal stiffness? My understand is that the AnyKinSPSheet can be used in association to an AnyMuscleSheet. In that sense, my guess was that longitudinal stiffness and behaviour is driven by the the muscle model. So, what happened if I add a longitudinal stiffness to the AnyKinSPSheet? Would it add it to the stiffness muscle, or would it be ignored if this longitudinal stiffness is lower than the one defined in the muscle model?

3- I used the InitWrapPosVecArray as recommended to define the initial position of the mesh on the sphere surface. It works, but I’m not sure if I defined it optimally. In fact, when I launch the “InitialConditions” of my study, the sheet seems to go really far away from the surface to wrap. What are the units? Which coordinate system is used? Here is my code, do you think that it makes sense, knowing that I applied to the same model than in my previous post (please refers to my previous picture)?

AnyFloat InitWrapPosVectors2 = {
 { 
   {0,0,0},
   {0,0,0},
   {0,0,0},
   {0,0,1},
   {0,0,1},
   {0,0,1},
   {0,0,0},
   {0,0,0},
   {0,0,0},
   {0,0,0},
   {0,0,0},
   {0,0,0}
 }
};

InitWrapPosVecArr = {
&InitWrapPosVectors2
};

I really thank you in advance for your help !
Lauranne

Still me :wink:

I would like to add a new question about stiffnesses. My first understanding was that lateral stiffness corresponds to the one for each line between the segments, i.e. the lines connecting the wrapping points on each longitudinal segment. But I’m not so sure after re-reading the ref manual… Could you confirm or invalidate my guess?

Thank you !
Lauranne

We’ll try to make an example, please allow us a little bit of time for that.

Hi Amir,
Thank you for your proposal. However, I would be more interested in talking about the definition of the AnyKinSPSheet than in getting an example. In fact, I already successfully implemented it into my model. I would like now better understand the mathematical implementation. My objective is to chose the best values for the parameters of this function.

I compared several ratio (R=longitudinal constraint divided by transversal constraint) and their impact on the muscle modeling.
Of what I observed, if 0<R<1 all segments are grouped into one. According to me it makes sense since this R means higher transversal constraints than longitudinal ones.
Conversely if R>100 : segments tend to slide to the most extern segments. I think it also makes sense: in such cases the transversal constraint does not ensure a tension enough high.

What do you think about my observation and comments?

Thank you !
Lauranne