Questions about modifying the KneeLoad Model

Dear AnyBody members!

I would like to post my conversation with Soren from the AnyBody Support, which I led on the private chat. So from now on everybody can benefit from the answer he gave.

My Message:
[i]I need your help with trying to change some specific things on the KneeLoad Model. Here I must especially mention that I am an absolute beginner.
First I want to explain what I intend at all. I want to modify the KneeLoad model that the body is seated in a leg press (just the position/posture), pressing against a rigid force plate.
But after working with that I have a few questions:

  1. Just to clear out what the Model actually does! The Model investigates the connection be-tween knee shear force and foot center of pressur. What does that actually mean?
    And what about the movement that takes place in front of it? Is the investigation depending on the movement or does it also works without movement?

If yes and I will remove the movement and set the model to the desired position, does the model then anything? I mean there is a file which calls “Environment”. I don´t understand exactly the sense of this AnySript code. Can I adjust the pressure against the foot in this folder or the pressure against the force plate? So that the Model would do something without movement.
Please could you explain this AnyScript code (see figure Environment)?

  1. I modified the position of the Model in the folder “Mannequin” already. But it changes al-ways after “RunApplication” to a position that I don´t understand (from position1 to posi-tio2, see figure position1, position2). How can I fix that?
    Do I have to modify something else?

  1. What do I have to change to remove the movement?

I hope this is clear explained! If you don´t understand something, please let me know!
Thank you in advance![/i]

Answer of Soren:
[i]Hi Nathalie
Welcome to the forum.
This model we no longer distribute with the repository, i will try to answer your questions the best i can.

1: The model is loaded by a force applied to the foot, this force moves throughout the analysis from the heel to the front. The knee joint is a revolute joint, and the anterior/posterior reaction of the this joint is referred to in the description of the model as shear force. So when looking at the reaction force in the joint you will see this changing as a consequence of the change in the load.

The script you have listed is how the load is being applied. It introduces a segment which is connected to the foot through a prismatic joint, then a force is applied to the segment. This force is transmitted through the prismatic joint to the foot.

If you change model so that the force does not move you will get a constant/static output from the model, this is ok.

2:
The mannequin values are used to set the initial conditions for the model, this is how the model will load. Once the model is being used these values may not be used for actually driving the model, this depends on the actual model. Since you see a differences between a loaded model and after running it means that these values are not all used for driving the model

3:
The loading position only used as the initial guess for the model, so it just needs to be good enough for the model to solve the first kinematic step, it has no further impact on the model than this. So it is ok to see a difference in load position and running position, as long the model actually solves without error.

I would recommend to start going through the tutorials these will take you through many of these things.
Secondly please do not send this type of questions as private messages this is not the intention of this forum ;-). We would like to help our users so that everyone can benefit from the answers we give. I can see that you have posted a second private message today, please re-post it as a normal post and we will look at as soon we can.

Best regards
Søren[/i]

Dear Soren,

Thanks for your help. Up to now I tried to solve the kinematic step as you mentioned. Therefore I just replaced the “AnyPrismaticJoint” with the “AnyStdJoint” and removed the corresponded driver. I chose this joint because it also works as a rigid joint, as in the AnyScriptRefManual described. Well, this is a quit simple solution, but the FootPlate doesn´t move anymore. Does this make any sense? Maybe you can take a look at the output (see figure) and probably you can recommend something to make this better.

Since this works somehow, I took a look on which values in the mannequin file are not considered for the Analysis. I mean the problem with the initial position and the position after the Analysis. I found out that all values considered, expect the PelvisRot and PelvisPos (see figure). Thus, I have inserted the missing drivers for this values and following error applied.

ERROR(OBJ.MCH.KIN2) : C:/U… : Study: Model is kinematically over-constrained: Position analysis failed: 3 unsolvable constraint(s) found

What does that means? What can I do to fix this? Or can you recommend something that would help me?

Best Regards

Dear Nathalie,

I ams sorry but i can not see the images in the post please try to attach them, they might be missing if you make them as external links?

I will try to answer the best i can without the seeing the images.

If you make a Std joint the force will not move, this is clear, if you want it to move please stay with the Prismatic joint.

Concerning the kinematic error you get after adding the drivers here are the explanation.

The model was originally already kinematically determined meanining that the number of dof int he model was matched with a equal number of driver and constraints. If you simply add three more drivers it will be kinematically overdetermined and you will get the error you saw, this is a natural consequence.

There is no problem in having a model loading in one posture and then shift into a different posture once the model has solved the first kinematic step, this is ok. The initial posture only needs to be good enough for the first step to solve, so i think you should remove the drivers you added again.

To be able to help you further please explain exactly what it is that you would like to achieve with the model?, this is a bit unclear for me at this point :wink:

Best regards
Søren

Dear Soren,

what I want to investigate is the joint forces and moments mainly in the knee and ankle with a simulation of a leg-press-test (static).
I must say I couldn´t really manage with the models in the AMMR. Although I understood the principle, but I find it hard to modify them. Therefore, I tried to set up my own 2D three hill model. It worked just fine so far. But currently I´m trying to install the muscles vastus lateralis, medialis, intermedius and rectus femoris. Until now I have just the vastus intermedius in there and following error message occurs :(:

Study.InverseDynamics : Muscle recruitment solver : malformed problem (most likely the feasible solution-set is empty)

Do you know what does it means? And where the problem is?

Best Regards
Nathalie :confused:

Dear Nathalie,

Since you mentioned having only one muscle in your model as of now, the error could be due to the application of loads which the vastus intermedius alone cannot support. For example, if you wanted to hold the knee in a static pose and were applying an external knee extension moment, you would require at least one knee flexor muscle in the model for the problem to have feasible solution set.

Try adding more muscles on both sides of the knee (also some hamstrings) and check if the error persists.

I would also request you to update your public profile with your affiliations :). We encourage this to promote openness and collaboration on the forum.

Best Regards,
Ananth
AnyBody Support

Hello again :slight_smile:
Thanks for your answer!! In the meantime I attached the muscles quadriceps, the hamstrings and the gastrocnemius as you recommended, but there is still the same error message. Do I have to pay attention to anything, for example when I define the nodes? This is the way how I include the muscles to my Model. Is there anything I´m doing wrong? For example:

//M. VASTUS LATERALIS
AnyShortestPathMuscle VastusLateralis = {
AnyMuscleModel MusMdl = { F0 = 1870; };
AnyRefNode &Ins = …Segments.ShankSeg.TuberositasTibiaNode;
AnyParamSurf &Wrap = …Segments.ThighSeg.KneeJntNode.CondyleCenter.CondyleKnee;
AnyRefNode &Via1 = …Segments.ThighSeg.VastusLateralisViaNode1;
AnyRefNode &Org = …Segments.ThighSeg.VastusLateralisNode;
SPLine = {
StringMesh = 50;
InitWrapPosVectors = { {0.1, 0.1, 0}, {0.1, 0.2, 0} };
}; //End SPLine
AnyDrawMuscle DrwMus = {
Bulging = 2;
MaxStress = 2500000;
}; //DrwMus
}; //End VastusLateralis

//M. VASTUS INTERMEDIUS
AnyShortestPathMuscle VastusIntermedius = {
AnyMuscleModel MusMdl = { F0 = 1235; };
AnyRefFrame &Ins = …Segments.ShankSeg.TuberositasTibiaNode;
AnyParamSurf &Wrap =
…Segments.ThighSeg.KneeJntNode.CondyleCenter.CondyleKnee;
AnyRefFrame &Org = …Segments.ThighSeg.VastusIntermediusNode;
SPLine = {
StringMesh = 50;
InitWrapPosVectors = { {0.1, 0.1, 0}, {0.1, 0.2, 0} };
}; //End SPLine
AnyDrawMuscle DrwMus = {
Bulging = 2;
MaxStress = 2500000;
}; //DrwMu
}; //End Vastus Intermedius

//M. VASTUS MEDIALIS
AnyShortestPathMuscle VastusMedialis = {
AnyMuscleModel MusMdl = { F0 = 1295; };
AnyRefFrame &Ins = …Segments.ShankSeg.TuberositasTibiaNode;
AnyParamSurf &Wrap =
…Segments.ThighSeg.KneeJntNode.CondyleCenter.CondyleKnee;
AnyRefFrame &Via1 = …Segments.ThighSeg.VastusMedialisViaNode1;
AnyRefFrame &Org = …Segments.ThighSeg.VastusMedialisNode;
SPLine = {
StringMesh = 50;
InitWrapPosVectors = { {0.1, 0.1, 0}, {0.1, 0.2, 0} };
}; //End SPLine
AnyDrawMuscle DrwMus = {
Bulging = 2;
MaxStress = 2500000;
}; //DrwMus
}; //End VastusMedialis

An additional question: The AMMR Models using this to define the nodes

AnyFunTransform3D Scale = {AnyFunTransform3DIdentity ScaleFunction = {};};

And for the nodes for example:
AnyRefNode Semitendinosus1Node = {sRel = .Scale({0.0722, -0.4929, -0.0024}*TF’);};

What are the consequences using ScaleFunction? And where is the difference comparing the simple notation like

AnyRefNode Semitendinosus1Node = {sRel = {0.0722, -0.4929, -0.0024};};

Best Regards
Nathalie

Hi Nathalie,

There doesn’t seem to be anything amiss you muscle definition syntax. Could you tell me a little more about the loading conditions (segment poses, loads etc) you’ve tried to solve? Does this error appear for all the conditions? It would great if you could post some pictures of your model as well, to help me understand it better. :slight_smile:

The scaling function is used to shift the muscle attachment locations (as defined in the default AMMR model) in accordance with the scaling scheme you have chosen for your specific subject (linear or non-linear).

Regards
Ananth

Hi ananth!
Below I attached the pics of the local and initial positions. The Model is without motions, it has just a load in the force plate of 1200 Newton F = {0, 1200, 0}; , if I understand you right when you ask for the loads. I´ve fixed the hip joint to the global reference frame and all joints are revolute joints. For the drivers I used AnyKinSimpleDriver. These are the positions of the segments

Segments and local positions:
AnySeg PelvisSeg = {
r0 = {0.0, 0.5, 0.0};
Axes0 = RotMat(pi/180, z);
Mass = 4;
Jii = {0.0221, 0.01, 0.0221};
AnyDrawSeg DrwSeg = {};

    AnyRefNode HipJntNode = { sRel = {0.0, -0.5, 0.0}; };

}; //PelvisSeg

AnySeg ThighSeg = {
r0 = .PelvisSeg.HipJntNode.sRel*.PelvisSeg.Axes0’ + .PelvisSeg.r0 - HipJntNode.sRelAxes0’;
//r0 = {0.5, 0, 0};
Axes0 = RotMat(90
pi/180, z);
Mass = 2;
Jii = {0.1134 ,0.013, 0.1134};
AnyDrawSeg DrwSeg = {};

AnyRefNode HipJntNode = { sRel = {0.0, 0.5, 0}; }; };
AnyRefNode KneeJntNode = { sRel = {0.0, -0.5, 0.0}; };
AnyRefNode VastusIntermediusNode = { sRel = {0.08, 0.08, 0.0};};
}; //ThighSeg

AnySeg ShankSeg = {
r0 = .ThighSeg.KneeJntNode.sRel*.ThighSeg.Axes0’ + .ThighSeg.r0 - KneeJntNode.sRelAxes0’; //r0 = {1.45,0,0};
Axes0 = RotMat(90
pi/180, z);
Mass = 2;
Jii = {0.0543,0.001,0.0543};
AnyDrawSeg DrwSeg = {};

    AnyRefNode KneeJntNode  = { sRel = {0.0, 0.43, 0.0};};
    AnyRefNode AnkleJntNode = { sRel = {0.0,-0.4,0}; }; };
    AnyRefNode TuberositasTibiaNode  = { sRel = {0.05,-0.08,0.0} + .KneeJntNode.sRel; };

}; //ShankSeg

AnySeg FootSeg = {
r0 = {1.85,0.2,0};
Axes0 = RotMat(90*pi/180, z);
Mass = …AnthroData.ScalingMass.Foot;
Jii = {Ixx, Iyy, Izz};
AnyDrawSeg DrwSeg = {};

    AnyRefNode AnkleJntNode = { sRel = {-0.2, 0.0, 0.0};   };
    AnyRefNode FootForcePlateNode ={sRel = {0.03, -0.05, 0.0};};

}; //FootSeg

Initial positions:
PelvisRotX = 0;
PelvisRotY = 0;
PelvisRotZ = 30;
HipFlexion = 120;
KneeFlexion = -90;
AnklePlantarFlexion = 15;

Thank you very much for your help!!

Best regards
Nathalie

Hi Nathalie,

From your figure, I understand that this was a force of 1200N in the global y direction which would sort of act like a shear force acting on the foot. Have you ensured the following?

  1. I only see the quadriceps muscle in the figure but you mentioned adding other muscles so I’m assuming that these just weren’t visualized. Just checking this point!

  2. Does the model work when you have the ‘Reaction.Type’ set to ‘On’ for all your AnyKinEqSimpleDrivers?

  3. In your default simulation, have you set ‘Reaction.Type’ to ‘On’ for drivers at your hip and ankle joints? This would be necessary since there don’t seem to be any muscles at these joints. Hence the simulation would require these ‘virtual motors’ to hold the posture when the external force is applied.

Ananth
AnyBody Support

Hello again :cool:

as mentioned above I created my own model. The first muscleproblem is fixed (I think), therefore I used the input parameters of Scott L. Delp for the muscle origin, insertion points and force for each individuell muscle. The model has the following muscles attached:

Gluteus maximus 1,2,3
Gluteus medius 1,2,3
M. Quadriceps (rectus femoris, v. lat., v. med., v. int.)
Hamstrings (biceps fem., semitend., semimem.)
Gastrocnemius

(I think those muscles are the most important during the LegPess exercise/test)

Up to now I used the simplest muscle model with just the force as input parameter. Now I want to make the muscles complexer. Therefore I tried to run the model once with the AnyMuscleModel2Elin and with the AnyMuscleModel3E and just copied and pasted the CalibrationSequence from the AMMR and just changed the folders.

Questions :confused::confused::

  1. Do I have to calibrate the AnyMuscleModel2Elin? Because I couldn´t find something about to calibrate this muscle model.

  2. Why do I have to calibrate in four steps?

  3. What is the JntDOFDriver doing, which is part of every calibration step?
    Because this causes following error message:

Study : Model is kinematically over-constrained : Position analysis failed : 11 unsolvable constraint(s)
found

Without the JntDOFDriver:

When the model is just loaded:

Model Warning: Study ‘Main.LegPressModel.Muscles.CalibrationSequence.LegCalStudy1’ contains too few kinematic constraints to be kinematically determinate.
Model Warning: Study ‘Main.LegPressModel.Muscles.CalibrationSequence.LegCalStudy2’ contains too few kinematic constraints to be kinematically determinate.
Model Warning: Study ‘Main.LegPressModel.Muscles.CalibrationSequence.LegCalStudy3’ contains too few kinematic constraints to be kinematically determinate.
Model Warning: Study ‘Main.LegPressModel.Muscles.CalibrationSequence.LegCalStudy4’ contains too few kinematic constraints to be kinematically determinate.

Message after InveseDynamic analysis:
Warning:
SemitendinosusPar : Muscle without strength : The muscle has been stretched too much
(the same warning message for semimembranosus, biceps femorisCL, v.intermedius, v.medius, v.lateralis, rectus femoris)

Error:
Study.InverseDynamics : Muscle recruitment solver : maximum number of setbacks occured.
What does that mean?

  1. Perhaps I did a general mistake befor calibration? Perhaps when I attached the muscles?

  2. A question considering the validation:
    Validation in musculoskelettal modelling means: The more input (like MoCap, Cadaverstudies, EMG etc) the model has, the more realistic it is? Did I understood this correctly?

  3. Is there an option that someone could take a look to my model and its results?
    I would realy appreciate it!!!

Source of the muscle input parameters: http://isbweb.org/data/delp/

Best regards
Nathalie :wink:

This is the CalibrationSequence I am using:

AnyFolder CalibrationSequence = {

// Collection of the joints into JntDOF which are used by the applications.
// This is where the DOF of the leg are assembled into one single measure, this measure has the following DOF:
// 0 Ankle flexion/extension
// 1 Ankle abduction adduction
// 2 Knee flextion/extension
// 3 Hip adduction/abduction
// 4 Hip rotation externa/internal
// 5 Hip flexion/extension

AnyKinMeasureOrg JntDOF = {
AnyUniversalJoint &Ankle = …LegPressModel.Jnts.AnkleJnt;
AnyRevoluteJoint &Knee = …LegPressModel.Jnts.KneeJnt;
AnySphericalJoint &Hip = …LegPressModel.Jnts.HipJnt;
}; //End JntDOF

//LEG CALIBRATION 1------------------------------------------------------------

AnyFolder LegCal1 = {
AnyFolder &PelvisCal1 = …LegPressModel.Segments.PelvisSeg;
AnyFolder &LegSegCal1 = …LegPressModel.Segments;
AnyFolder &JntsCal1 = …LegPressModel.Jnts;
//AnyFolder &MuscleCal1 = …LegPressModel.Muscles;
//AnyFolder &MusParCal1 =…LegPressModel.Muscles.MuscleParameter_2ELin;
AnyFolder &MusParCal1 =…LegPressModel.Muscles.MuscleParameter3E_Hill;

// AnyFixedRefFrame ground = {
// AnyRefNode node = {
// ARel=…PelvisCal1.Axes0;
// sRel=…PelvisCal1.r0;
// };
// };
//
// AnyRevoluteJoint PelvisGround={
// AnyRefFrame &Ground = .ground.node;
// AnyRefFrame &Sacrum= .PelvisCal1;
// Axis=z;
// };
//
// AnyKinEqSimpleDriver PelvisGroundRot = {
// AnyRevoluteJoint &Jnt = .PelvisGround;
// DriverPos = {0};
// DriverVel = {0};
// Reaction.Type = {Off};
// };

// AnyKinEqSimpleDriver JntDOFDriver = {
// AnyKinMeasure &Joint = …JntDOF;
// DriverPos = {1.57, 0.0, 0, 0, 0, 0}; //dorsal flexion
// DriverVel = {0.0, 0.0, 0, 0, 0, 0};
// Reaction.Type = {Off,Off,Off,Off,Off,Off};
// };

}; //LegCal1

AnyBodyCalibrationStudy LegCalStudy1 = {
AnyFolder &ref = .LegCal1;
nStep = 1;
}; //End LegCalStudy1

//LEG CALIBRATION 2---------------------------------------------------------------------------------
AnyFolder LegCal2 = {
AnyFolder &PelvisCal2 = …LegPressModel.Segments.PelvisSeg;
AnyFolder &LegSegCal2 = …LegPressModel.Segments;
AnyFolder &JointsCal2 = …LegPressModel.Jnts;
//AnyFolder &MuscleParameterCal2 =…LegPressModel.Muscles.MuscleParameter_2ELin;
AnyFolder &MuscleParameterCal2 =…LegPressModel.Muscles.MuscleParameter3E_Hill;

// AnyKinEqSimpleDriver JntDOFDriver = {
// AnyKinMeasure &Joint = …JntDOF;
// DriverPos = {1.83,0.0,0,0,0,-0.87}; //-15 degrees dorsal flexion
// DriverVel = {0.0,0.0,0,0,0,0};
// Reaction.Type = {Off,Off,Off,Off,Off,Off};
// };//JntDOFDriverRight

AnyFolder MuscleCal2 = {
  //AnyViaPointMuscle &GastrocnemiusLat =...LegPressModel.Muscles.GastrocnemiusLat;
  AnyViaPointMuscle &GastrocnemiusMed = .....LegPressModel.Muscles.GastrocnemiusMedial;
  AnyViaPointMuscle &GluteusMaximus2  =.....LegPressModel.Muscles.GluteusMaximus2;
  AnyViaPointMuscle &Semitendinosus   =.....LegPressModel.Muscles.Semitendinosus;
  AnyViaPointMuscle &Semimembranosus  =.....LegPressModel.Muscles.Semimembranosus;
  AnyViaPointMuscle &BicepsFemorisCL  =.....LegPressModel.Muscles.BicepsFemorisCL;
  
}; //End MuscleCal2

}; //End LegCal2

AnyBodyCalibrationStudy LegCalStudy2 = {
AnyFolder &ref = .LegCal2;
nStep = 1;
}; //End LegCalStudy2

//LEG CALIBRATION 3------------------------------------------------------------
AnyFolder LegCal3 = {
AnyFolder &PelvisCal3 = …LegPressModel.Segments.PelvisSeg;
AnyFolder &LegSegCal3 = …LegPressModel.Segments;
AnyFolder &JointsCal3 = …LegPressModel.Jnts;
//AnyFolder &MuscleParCal3 = …LegPressModel.MuscleParameter_2ELin;

// AnyKinEqSimpleDriver JntDOFDriver = {
// AnyKinMeasure &Joint = …JntDOF;
// DriverPos = {1.40,0.0,-1.22,0,0,0}; //10 degrees plantar flexion
// // DriverPos = {1.40,0.0,-0.7*pi,0,0,0}; //10 degrees plantar flexion
// DriverVel = {0.0,0.0,0,0,0,0};
// Reaction.Type = {Off,Off,Off,Off,Off,Off};
// };//JntDOFDriver

// AnyFolder MuscleCal3 = {
// AnyShortestPathMuscle VastusLateralis =…LegPressModel.Muscles.VastusLateralis;
// AnyShortestPathMuscle VastusMedialis =…LegPressModel.Muscles.VastusMedialis;
// AnyShortestPathMuscle VastusIntermedius =…LegPressModel.Muscles.VastusIntermedius;
// AnyShortestPathMuscle RectusFemoris = …LegPressModel.Muscles.RectusFemoris;
// }; //End MuscleCal3

}; //LegCal3

AnyBodyCalibrationStudy LegCalStudy3 = {
  AnyFolder &ref = .LegCal3; 
  nStep = 1;
}; //End LegCalStudy3

//LEG CALIBRATION 4------------------------------------------------------------
AnyFolder LegCal4 = {
AnyFolder &PelvisCal4 = …LegPressModel.Segments.PelvisSeg;
AnyFolder &LegSegCal4 = …LegPressModel.Segments;
AnyFolder &JointsCal4 = …LegPressModel.Jnts;
//AnyFolder &MuscleParCal4 = …LegPressModel.MuscleParameter_2ELin;
//AnyFolder &MuscleParCal4 =…LegPressModel.MuscleParameter3E_Hill;

// AnyKinEqSimpleDriver JntDOFDriver = {
// AnyKinMeasure &Joint = …JntDOF;
// DriverPos = {2.15,0,-1.22,0,0,-0.9}; //10 degrees plantar flexion
//// DriverPos = {1.,0.0,0,0,0,-1};
// DriverVel = {0.0,0,0,0,0,0};
// Reaction.Type = {Off,Off,Off,Off,Off,Off};
// };//JntDOFDriver

}; //End LegCal4

AnyBodyCalibrationStudy LegCalStudy4 = {
AnyFolder &ref = .LegCal4;
nStep = 1;
}; //End LegCalStudy4

}; //End CalibrationSequence

//FINAL CALIBRATION SEQUENCE-----------------------------------------------
CalibrationSequence = {
AnyOperation &LegCal1Right = .CalibrationSequence.LegCalStudy1.TendonLengthAdjustment;
AnyOperation &LegCal2Right = .CalibrationSequence.LegCalStudy2.TendonLengthAdjustment;
AnyOperation &LegCal3Right = .CalibrationSequence.LegCalStudy3.TendonLengthAdjustment;
AnyOperation &LegCal4Right = .CalibrationSequence.LegCalStudy4.TendonLengthAdjustment;
};

Dear Nathalie,

Could you possibly share your code? It would be easier to debug within AnyScript. :slight_smile:

Regards
Ananth

Hi Ananth :),

you can find my model attached.
Meanwhile I increased the fiberlength of the muscles by multplying 4 instead 1 (see file MuscleParameter3E_Hill), thereby the warning messages

“Muscle without strength : The muscle has been stretched too much”
“Model Warning: Study ‘Main.LegPressModel.Muscles.CalibrationSequence.LegCalStudy1’ contains too few kinematic constraints to be kinematically determinate.”

doesn´t appear anymore. No idea if I can make that this way :confused:

Thank you very much for helping me!!!

Regards
Nathalie

Hi Nathalie,

Sorry for the delay, I am currently looking up your model. I’ll get back to you soon :slight_smile:

Regards
Ananth

Ok :slight_smile: Thanks

Hello Ananth,

did you had the time to debugg my model? I think I did a mistake when I connect the pelvis with the thigh :frowning:

Because without the pelvis it is working, also with just the quadriceps as in the tutorial KneeDemo.

Can you recommand something or do you have an idea how to fix the hip joint in the global reference? :confused:

Best regards
Nathalie:)

Dear Nathalie,

I have gone through your model and tried answering your first set of questions. Since you made a few other posts after that, I’m unsure of what your exact state of the model/issues is. If i replies are outdated, please post a set of your current questions and also the new updated model associated with it. :slight_smile:

  1. Do I have to calibrate the AnyMuscleModel2Elin? Because I couldn´t find something about to calibrate this muscle model.

You can calibrate any model which has a tendon and muscle components. You should be able to change your muscle models to the 2 element model and run the usual AnyBodyCalibrationStudy.

  1. Why do I have to calibrate in four steps?

The four steps of calibration are for putting the model in different poses and calibrating subsets of muscles in each pose. For example, if you see Calibration_Sequence.any, each calibration study has folders named MuscleCal1, MuscleCal2 etc, which ensures only those muscles are calibrated in the pose which that study places the model in.

  1. What is the JntDOFDriver doing, which is part of every calibration step?
    Because this causes following error message:

The concept behind calibration is that the leg is placed in certain postures /put through a certain range of motion, and based on your chosen calibration type, muscle fiber and tendon lengths are adjusted. You can read up more on the different types on calibration in the reference manual entry for AnyBodyCalibrationStudy. The JntDOF driver is the driver used to place the leg in the desired posture/move it through a range of motion. Thus excluding it does indeed make the system kinematically indeterminate, since the kinematic study does not know what to do with all your model’s DOFs.

In your case, ensure that the JntDOFdrivers only contain as many components as the total degrees of freedom in your system. This is because your leg model is simpler than the default human model in the AMMR, which the default calibration code has been written for.

  1. Perhaps I did a general mistake befor calibration? Perhaps when I attached the muscles?

Sorting out the JntDOF drivers might resolve your issues. Please get back if they persist

  1. A question considering the validation:
    Validation in musculoskelettal modelling means: The more input (like MoCap, Cadaverstudies, EMG etc) the model has, the more realistic it is? Did I understood this correctly?

This is a very tricky question to answer :slight_smile: It is reasonable to expect that the more accurate inputs to inform your model’s working should make it more physiologically accurate. However, there is always the risk that giving your model too many inputs might result in mathematically tuning your model to perform well under a very specific set of circumstances. Additionally, you might be capable of achieving the same degree of accuracy by using far fewer inputs. So this is an engineering decision that is best made on a case-to-case basis.

The term “validation” does not refer to the inputs, but in fact the outputs of your models. If your outputs compare well to experimental data, your model has been validated purely with respect to that output. For example, your model might be producing activations that match with EMG, but might be overpredicting your joint contact forces. So people typically only validate the model outputs that is of interest to them.

Hope this helps,
Regards,
Ananth

Hello again :),

I am totally confused about this warning message. It doesn´t matter what I´m doing this is always what occurs:

WARNING(OBJ.MCH.MUS1) : C:/U…s/N…e/D…p/A…2/A…E/A…e/A…0/A…n/E…s/5…t/1_KneeDemo_Test.any : Study : The muscles in the model are not loaded due to kinetically over-constrained mechanical system.

I read this chat where the model has the same error message:

http://forum.anyscript.org/showthread.php?t=3728&highlight=kinetically+over-constrained+mechanical+system

But both solutions didn´t helped me, it´s still the same message.

My model is still a model of the lower Extremity sitting in a leg press (static case! It has no motion) with an external load at the ankle to analyze joint forces.
Attached you find a simple model, with just one muscel around the hip. This must be working or what am I doing always wrong?:confused:

Best Regards
Nathalie

Dear Nathalie,

I just had a quick look at your model.
Of course I have not looked at your previous post here.

But when we see your warning message:
“The muscles in the model are not loaded due to kinetically over-constrained mechanical system.”

It means that there are enough number of reaction forces in your model so that muscle are not needed to be active.

In AnyBody models, muscle are the laziest ones. They will only work when it is needed.

When I looked at your model, you have a lot of ‘Reaction.Type = {On}’ in your drivers. On most of the drivers regarding human joints, usually you should NOT turn on these reactions.

Please see your drivers again to check whether there are more reactions than needed.

I hope this may be helpful to you.

Best regards,
Moonki

But I thought drivers generate the necessary forces and moments to realize a motion or hold the posture when an external force is applied, in the case I have no muscles.
I turned the HipJointT Reaction.Typ „Off“ and now I get these message:

ERROR(OBJ.MCH.MUS4) : C:/U…s/N…e/D…p/A…2/A…E/A…e/A…0/A…n/E…s/5…t/T…m/1_Test_LP.any : Study.InverseDynamics : Muscle recruitment solver : maximum number of setbacks occured

I´m using the MinMax criterion form my study, but also tried it with other solvers like the polynomial criterion. But also it doesn´t help and I get the following message:

ERROR(OBJ.MCH.MUS4) : C:/U…s/N…e/D…p/A…2/A…E/A…e/A…0/A…n/E…s/5…t/T…m/1_Test_LP.any : Study.InverseDynamics : Muscle recruitment solver : solver aborted after maximum number of line-search iterations

Thank you very much for you help!

Best regards
Nathalie