Problems joining a leg orthosis to the model

Hi,

I am trying to simulate a leg orthosis in standar model, for that I have create the leg orthosis with "AnyExp4SOLIDWORKS with only 1 DOF and I have joined it with the leg with 3 ligament, in adition, this orthosis has 4 nodes to move the orthesis.

Kinematics study works correctly, but it can not to solve Inverse Dynamics study, the program shows this message:
"ERROR(OBJ.MCH.MUS4) : D:/PAU/O..V/D..a/E..V/S..S/S2/A..y/S..y/S2_OrtBi_AnyBody.main.any(43) : Study.InverseDynamics : Muscle recruitment solver : solver aborted due to singular KKT matrix
0) ...Inverse dynamic analysis terminated
ERROR(OBJ.MCH.KIN3) : D:/PAU/O..V/D..a/E..V/S..S/S2/A..y/S..y/S2_OrtBi_AnyBody.main.any(43) : Study.InverseDynamics : Kinematic analysis failed in time step 0"

I thought the problem is the forces created by ligament are not compensated by another forces, for that I have added the class "AnyForceMomentMeasure2" to try to compensate this forces, but it is not working.

And now I don't know what else to try.

Thank you for your kind cooperation

Pau Zamora OrtizS2_Ref_AnyBody.zip (3.1 MB)
S2_Ref_AnyBody.zip (3.1 MB)

Hi Pao,

I have looked a bit on both the zip files not sure if they are different?

What i see is a model which has two segments as force plates, these plates are connect to the feet and forces are applied, this looks in principle ok.

I can not see the orthosis and i am missing all txt files so the model can not load.

The KKT error means that a dof in the model is not in balance and is missing either a reaction force or a muscle force to create the balance.

Concerning the AnyForceMomentMeasure this can be used to measure forces and moments, but it will not impact analysis etc. or create any reactions, it is only a measure.

In your case the simplest solution would be to connect the orthosis parts to respectively thigh and femur using a AnyReacForce working on a linear and rotation measure between the orthosis part and the underlying bone.

To debug the problem try add the model complexity in some steps, while keep a running model.

First run the model without the orthosis then add it and ensure you have enough reactions.

Best regards
Søren

Hi Søren,

Thanks you for your reply.

First of all, excuse me, because I attached a wrong file, I just attach the correct model and the .txt files are in the folder "Input".

The model works correctly when we disable the orthesis, but we need to include the forces created by ofthesis to the leg to do correctly our study.

I'm going to try your solution, but are there posibility to exclude the ortesis only of inverse dynamic study? Because we are not interesting about reaction force in the Orthesis, only want to include the forces generated by orthesis in leg. Could be this possible?

Best regards,

Pau Zamora Ortiz.

S2_OrtBi_AnyBody.main.zip (4.0 MB)

Hi Pau,

I have tried to look at the model a bit, and found several issues.

The kin tolerance is 0.1m this is too much
The model can not run kinematically when i lower the tolerance to default 1e-6 m.
I have discovered that it relates to the force plates… if these are out i think it runs kinematically.

I then looked at the force plates drivers and remade these to look like this :

  AnyKinDriverMarker Plate1_1Driver ={
    AnyRefFrame &Plate3 = Main.Model.ModelEnvironmentConnection.Loads.Seg_Force1.Node_Force1;
    AnyFunInterpol Plate_23Motion  =   {
      Type = Bspline;
      BsplineOrder = 4;
      FileName = "../Input/Force1.1_point .txt";
    };
    AnyDrawKinMeasure drw={Label = Off;};
  }; 
  
  
  AnyKinDriverMarker Plate1_2Driver ={
    AnyRefFrame &Plate3 = Main.Model.ModelEnvironmentConnection.Loads.Seg_Force1.Node_Force2;
    AnyFunInterpol Plate_23Motion  =   {
      Type = Bspline;
      BsplineOrder = 4;
      FileName = "../Input/Force1.2_point.txt";
    };
    AnyDrawKinMeasure drw={Label = Off;};
  }; 
  
  AnyKinDriverMarker Plate1_3Driver ={
    AnyRefFrame &Plate3 = Main.Model.ModelEnvironmentConnection.Loads.Seg_Force1.Node_Force3;
    AnyFunInterpol Plate_23Motion  =   {
      Type = Bspline;
      BsplineOrder = 4;
      FileName = "../Input/Force1.3_point.txt";
    };
    AnyDrawKinMeasure drw={Label = Off;};
  }; 
  
  AnyKinDriverMarker Plate2_1Driver ={
    AnyRefFrame &Plate3 = Main.Model.ModelEnvironmentConnection.Loads.Seg_Force2.Node_Force1;
    AnyFunInterpol Plate_23Motion  =   {
      Type = Bspline;
      BsplineOrder = 4;
      FileName = "../Input/Force2.1_point .txt";
    };
    AnyDrawKinMeasure drw={Label = Off;};
  }; 
  
  AnyKinDriverMarker Plate2_2Driver ={
    AnyRefFrame &Plate3 = Main.Model.ModelEnvironmentConnection.Loads.Seg_Force2.Node_Force2;
    AnyFunInterpol Plate_23Motion  =   {
      Type = Bspline;
      BsplineOrder = 4;
      FileName = "../Input/Force2.2_point.txt";
    };
    AnyDrawKinMeasure drw={Label = Off;};
  }; 
  
  AnyKinDriverMarker Plate2_3Driver ={
    AnyRefFrame &Plate3 = Main.Model.ModelEnvironmentConnection.Loads.Seg_Force2.Node_Force3;
    AnyFunInterpol Plate_23Motion  =   {
      Type = Bspline;
      BsplineOrder = 4;
      FileName = "../Input/Force2.3_point.txt";
    };
    AnyDrawKinMeasure drw={Label = Off;};
  }; 

In this way you can see the markers and the errors on them, it shows a big error on one of the markers which i think may relate to the data file, possibly being identical for some of the plate makers?

I would try to have this resolved first, and use the same method for the other markers in the model, since it makes more visual.

Hope it helps

Best regards
Søren

Hi Søren

Thanks for your help.

I know that kin tolerance is too much, but now I am trying to understand AnyBody very well and make the model work, because at this moment it is difficult.

In addition, I am softening the original data to minimize errors, but until now, I am not successful. In the future, I'm goint to analizate one to one all the nodes to try to locate which nodes are creating more kinematics errors to solve it.

Best regards,
Pau Zamora Ortiz.

Hi Pau,
I would drive the model using the AnyKinMarkerDriver for all the nodes, not just the force plates like i tried. This makes it visual where the errors are, and thus much easier to understand.

You will need to move markers location so that the errors can be smaller. Large errors visualized by the connecting thin line between the markers is not good, if these are too large the model may fail to solve.

Best regards
Søren
If