How to add R_FTC and L_FTC markers in MarkerProtocol file

Greetings Dave,
I’ve made adjustments based on your feedback to improve the accuracy of the MoCap model.
I changed the contact direction to {2,0,1} instead of the default {0,1,2}.
I also increased UserDefinedLimitHigh to 1.5 and seemed to get a reaction from the contact points at Leg.
So I took the liberty to make the same changes in my SeatSupport.any and BackRestSupport.any.
I initially just changed the direction but realized I only get reaction from contact points at Seat and not BackRest so I changed the threshold for the contact in my BackRest alone respective to the distance I saw in the GUI.
The seat is individually fixed to the global ref using AnyKinEq with Reaction.Type = {On, On, On, On, On, On};.
Adding additional AnykinEq over constraints the model. The following is the code structure I am using now:

AnyKinLinear BackRestGlobalLinMeasure =
{
//RefFrames = ;
//viewKinMeasure.Visible = Off;
//Type = CartesianCoord;
//Ref = -1;
//LineLineDistanceAxes = {{x, x}};
//LineLineDistanceAxisLength = 10.0;
//AngularAxis = z;
AnyRefFrame &SegNode = Main.EnvironmentModel.EnvironmentModel.BackRest.BackRestSeatJntNode ;
AnyRefFrame &GroundNode = Main.EnvironmentModel.EnvironmentModel.GlobalRef.GroundNode ;
};

AnyKinRotational BackRestGlobalRotMeasure = 
{
  //viewKinMeasure.Visible = Off;
  Type = RotVector;
  //Axis1 = z;
  //Axis2 = y;
  //Axis3 = x;
  //DirCosineAxes = {{x, x}, {x, y}, {x, z}, {y, x}, {y, y}, {y, z}, {z, x}, {z, y}, {z, z}};
  //AngVelOnOff = Off;
  //AngVelGlobal = Off;
  AnyRefFrame &GroundNode = Main.EnvironmentModel.EnvironmentModel.GlobalRef.GroundNode ;
  AnyRefFrame &SegNode = Main.EnvironmentModel.EnvironmentModel.BackRest.BackRestSeatJntNode ;
};

AnyKinEq BackRestGlobalConst = 
{
  //viewKinMeasure.Visible = Off;
  MeasureOrganizer = {0, 1, 2, 3, 4, 5};
  //CType = ;
  //WeightFun = ;
  AnyKinMeasure &LinMeasure = Main.EnvironmentModel.EnvironmentModel.Jnt.BackRestGlobalLinMeasure;
  AnyKinMeasure &RotMeasure = Main.EnvironmentModel.EnvironmentModel.Jnt.BackRestGlobalRotMeasure; 
};

AnyKinLinear HeadRestGlobalLinMeasure = 
{
  //RefFrames = ;
  //viewKinMeasure.Visible = Off;
  //Type = CartesianCoord;
  //Ref = -1;
  //LineLineDistanceAxes = {{x, x}};
  //LineLineDistanceAxisLength = 10.0;
  //AngularAxis = z;
  AnyRefFrame &SegNode = Main.EnvironmentModel.EnvironmentModel.HeadRest.HeadRestBackRestJntNode ;
  AnyRefFrame &GroundNode = Main.EnvironmentModel.EnvironmentModel.GlobalRef.GroundNode ;
};

AnyKinRotational HeadRestGlobalRotMeasure = 
{
  //viewKinMeasure.Visible = Off;
  Type = RotVector;
  //Axis1 = z;
  //Axis2 = y;
  //Axis3 = x;
  //DirCosineAxes = {{x, x}, {x, y}, {x, z}, {y, x}, {y, y}, {y, z}, {z, x}, {z, y}, {z, z}};
  //AngVelOnOff = Off;
  //AngVelGlobal = Off;
  AnyRefFrame &SegNode = Main.EnvironmentModel.EnvironmentModel.HeadRest.HeadRestBackRestJntNode ;
  AnyRefFrame &GroundNode = Main.EnvironmentModel.EnvironmentModel.GlobalRef.GroundNode ;
};

AnyKinEq HeadRestGlobalConst = 
{
  //viewKinMeasure.Visible = Off;
  MeasureOrganizer = {0, 1, 2, 3, 4, 5};
  //CType = ;
  //WeightFun = ;
  AnyKinMeasure &LinMeasure = Main.EnvironmentModel.EnvironmentModel.Jnt.HeadRestGlobalLinMeasure;
  AnyKinMeasure &RotMeasure = Main.EnvironmentModel.EnvironmentModel.Jnt.HeadRestGlobalRotMeasure; 
};


AnyKinLinear LegRestGlobalLinMeasure = 
{
  //RefFrames = ;
  //viewKinMeasure.Visible = Off;
  //Type = CartesianCoord;
  //Ref = -1;
  //LineLineDistanceAxes = {{x, x}};
  //LineLineDistanceAxisLength = 10.0;
  //AngularAxis = z;
  AnyRefFrame &SegNode = Main.EnvironmentModel.EnvironmentModel.LegRest.LegRestSeatJntNode ;
  AnyRefFrame &GroundNode = Main.EnvironmentModel.EnvironmentModel.GlobalRef.GroundNode ;
};

AnyKinRotational LegGlobalRotMeasure = 
{
  //viewKinMeasure.Visible = Off;
  Type = RotVector;
  //Axis1 = z;
  //Axis2 = y;
  //Axis3 = x;
  //DirCosineAxes = {{x, x}, {x, y}, {x, z}, {y, x}, {y, y}, {y, z}, {z, x}, {z, y}, {z, z}};
  //AngVelOnOff = Off;
  //AngVelGlobal = Off;
  AnyRefFrame &SegNode = Main.EnvironmentModel.EnvironmentModel.LegRest.LegRestSeatJntNode ;
  AnyRefFrame &GroundNode = Main.EnvironmentModel.EnvironmentModel.GlobalRef.GroundNode ;
  
};

AnyKinEq LegRestGlobalConst = 
{
  //viewKinMeasure.Visible = Off;
  MeasureOrganizer = {0, 1, 2, 3, 4, 5};
  //CType = ;
  //WeightFun = ;
  AnyKinMeasure &LinMeasure = Main.EnvironmentModel.EnvironmentModel.Jnt.LegRestGlobalLinMeasure;
  AnyKinMeasure &RotMeasure = Main.EnvironmentModel.EnvironmentModel.Jnt.LegGlobalRotMeasure; 
};

However, I presume they are linked to each other and the Seat via joint definitions. 1) Is the approach right?

I am attaching a picture of my model now after the InverseDynamics Study.

The results seem to be slightly better now. When compared to the ID study of SPLB model they seem to be in close - medium vicinity. However, the right leg seems to exhibit more joint reaction force compared to the left when it is the left ankle that is under load. 2) How do I validate the results?

Please let me know if you need additional information.

Thank you.
With Regards,
Romy Jemals.

Hi Romy,

  1. You should either fix all segments individually to global ref, or one segment to the global ref and the others with joints to this root segment (so you make a chain of segments). Having both will over constrain the model. I also assume that the seat model has all the joints, but I don't know that specifically in your model. I am sure you can identify the joints and drivers to position the seat.
  2. Validation of the model can be quite tricky. You are already comparing your results to the SPLB model, then, if you have some other measured data that you can use to check the outputs of the simulation. Typically, people will use EMG, but you should also be aware of the limitations of using EMG for validation. You could also think about validation using trends. You can also see a list of validation publications on our website for inspiration.

Best regards,
Dave

Greetings Dave,

  1. I presume I have used the first approach. The seat is fully constrained to the global reference using AnyKinEq, which applies six constraints (MeasureOrganizer = {0,1,2,3,4,5}) with reactions turned on (Reaction.Type = {On, On, On, On, On, On}).
    The backrest, headrest, and leg rest are also each directly constrained to the global reference using 'AnyKinEq' with just MeasureOrganizer = {0, 1, 2, 3, 4, 5}; Should I have Reaction type set to ON?
    I vaguely remember I get an over constrained model if I use it.
    All the segments have all the joints as in SPLB model.

  2. To be clear, not comparing but using the SPLB model with the load acting on the left ankle as a benchmark/reference. I do not have measured data but I will check the link you suggested.

Thank you.
With Regards,
Romy Jemals

Greetings again Dave,

I ran the model with (Reaction.Type = {On, On, On, On, On, On} ) for other segments too. The inverse dynamics study ran good.
I apologize for the earlier confusion about it being over-constrained. It must have been an earlier version of the working model.
The results look better and in the benchmark region of the SPLB model but there is still noticeable variations in magnitude and/or directions between the both.
Is that reasonable?
The SPLB model has been modified with my test subject's body mass and a load of -39.24N acting on the left ankle.

I have one more question to add:
Should I run my MoCap model with/without HGR? If yes, just Pelvis or Pelvis and Trunk?
I have attached the Human Ground Residuals chart below.

Thank you.
Best Regards,
Romy Jemals