SelectedOutput: terminology

I have a question regarding the terms in the leg SelectedOutput folder.

The names of the forces makes sense to me when comparing to the coordinate system. However the names of the moments don’t make sense. For example, this is in RightLegMuscles3ESelectedOutput.any:

SelectedOutput.Right = {
  
  AnyFolder Leg = {
    
    AnyFolder JointReactionForce = {      
      
      /// Lateral positive
      AnyVar Hip_MediolateralForce = ....Right.Leg.Jnt.Hip.Constraints.Reaction.Fout[2];
      /// Proximal positive
      AnyVar Hip_ProximoDistalForce = ....Right.Leg.Jnt.Hip.Constraints.Reaction.Fout[1];
      /// Anterior positive
      AnyVar Hip_AnteroPosteriorForce = ....Right.Leg.Jnt.Hip.Constraints.Reaction.Fout[0];
      // Thigh.HipJoint ref
      
      /// Lateral positive
      AnyVar Knee_MedioLateralForce = ....Right.Leg.Jnt.Knee.Constraints.Reaction.Fout[2];
      /// Proximal positive
      AnyVar Knee_ProximoDistalForce = ....Right.Leg.Jnt.Knee.Constraints.Reaction.Fout[1];
      /// Anterior positive
      AnyVar Knee_AnteroPosteriorForce = ....Right.Leg.Jnt.Knee.Constraints.Reaction.Fout[0];
      /// Internal positive
      AnyVar Knee_AxialMoment = ....Right.Leg.Jnt.Knee.Constraints.Reaction.Fout[3];
      /// Internal positive
      AnyVar Knee_LateralMoment = ....Right.Leg.Jnt.Knee.Constraints.Reaction.Fout[4];
      // Thigh.KneeJoint ref
      
      /// Lateral positive
      AnyVar Ankle_MedioLateralForce = ....Right.Leg.Jnt.Ankle.Constraints.Reaction.Fout[2];
      /// Proximal positive
      AnyVar Ankle_ProximoDistalForce = ....Right.Leg.Jnt.Ankle.Constraints.Reaction.Fout[1];
      /// Anterior positive
      AnyVar Ankle_AnteroPosteriorForce = ....Right.Leg.Jnt.Ankle.Constraints.Reaction.Fout[0];

      // Internal positive
      AnyVar Ankle_AxialMoment = ....Right.Leg.Jnt.AnkleAxialRotationMoment.Fout[0];
      
      // Shank.AnkleJoint.RotNode ref
      
    };

...

Shouldn’t Knee_LateralMoment be Fout[3] and Knee_AxialMoment be Fout[4]? It seems that the axial moment for the knee (the femur or the tibia) would be the moment about the y-axis.

Similarly for the ankle joint. I would call the moment about the x-axis of the ankle a lateral moment.

I am using the whole body model in AMMRV1.1 with AnyBody V4.1(demo).

Thanks for any help.
Brent

Hi Brent,

You are right that the Knee_LateralMoment should be Fout[3] and the Knee_AxialMoment should be Fout[4]. Thank you for pointing at it, we will correct it.

The ankle moment is a little different. The forces are in the Shank.AnkleJoint ref frame but the AxialMoment is in the Shank.AnkleJoint.RotNode ref frame with X along the shank long axis. So this one is correct.

However you should be aware that since version 4.1 the type of the rotational measure of the revolute joint has changed from RotVector to PlanarAngles. Because of this the unit of the revolute joint reaction moment values is not anymore equivalent to Nm but to a more complex unit. So those values cannot be interpreted directly.

In order to read again the value in Nm you can simply use an AnyForceMomentMeasure like this:

AnyForceMomentMeasure KneeJointReactionMoments =
{
AnyForceBase &reaction = Main.HumanModel.BodyModel.Right.Leg.Jnt.Knee.Constraints.Reaction;
AnyRefFrame &knee = Main.HumanModel.BodyModel.Right.Leg.Seg.Thigh.KneeJoint;
AnyVec3 Mlocal = M*knee.Axes;
};

Mlocal will give you the knee moment reaction in the local Thigh.KneeJoint ref frame in Nm. You should apply this method to all revolute joint of the body.
A new version of the repository will be released as soon as posible with updated SelectedOutput taking care of this unit issue.

Best regards, Sylvain.

Sylvain,

Thank you for the clarification and description of the joint moments. I will look for the update you mentioned. In the mean time, I can use the method you described.

Regards,
Brent

I have another questions about the knee joint reactions. Using an AnyForceMomentMeasure on the knee constraints, as described above:

AnyForceMomentMeasure KneeJointReactionMomentsRight = {
    AnyForceBase &reaction = Main.HumanModel.BodyModel.Right.Leg.Jnt.Knee.Constraints.Reaction;
    AnyRefFrame &knee = Main.HumanModel.BodyModel.Right.Leg.Seg.Thigh.KneeJoint;
    AnyVec3 Flocal = F*knee.Axes;
    AnyVec3 Mlocal = M*knee.Axes;
  };

I get the following output for for the constraint reactions in the knee joint, and the Flocal and Mlocal from the measure:

Main.HumanModel.BodyModel.Right.Leg.Jnt.Knee.Constraints.Reaction.Fout = {-199.4874, -2728.713, 63.48722, 82.94773, 73.55368};
Main.Study.Output.OutputFile.KneeJointReactionMomentsRight.Flocal = {{199.4874, 2728.713, -63.48724}, {199.4874, 2728.713, -63.48722}, {199.4874, 2728.713, -63.48722}};
Main.Study.Output.OutputFile.KneeJointReactionMomentsRight.Mlocal = {{-40.16344, -38.20361, -4.352074e-014}, {-40.16344, -38.20361, -4.307665e-014}, {-40.16344, -38.20361, -4.352074e-014}};

Why do the x, y, and z forces, and even the moments, have opposite signs? The first segment in the knee joint definition is the thigh, so it should be in the same coordinate system as the AnyForceMomentMeasure.

If I change the coordinate system in the AnyForceMomentMeasure to the shank:

AnyForceMomentMeasure KneeJointReactionMomentsRight = {
    AnyForceBase &reaction = Main.HumanModel.BodyModel.Right.Leg.Jnt.Knee.Constraints.Reaction;
    AnyRefFrame &knee = Main.HumanModel.BodyModel.Right.Leg.Seg.Shank.KneeJoint;
    AnyVec3 Flocal = F*knee.Axes;
    AnyVec3 Mlocal = M*knee.Axes;
  };

I get the following output for for the constraint reactions in the knee joint, and the Flocal and Mlocal from the measure:

I get the following output:

Main.HumanModel.BodyModel.Right.Leg.Jnt.Knee.Constraints.Reaction.Fout = {-199.4874, -2728.713, 63.48722, 82.94773, 73.55368};
Main.Study.Output.OutputFile.KneeJointReactionMomentsRight.Flocal = {{-389.5832, -2708.117, 63.48724}, {-389.5832, -2708.117, 63.48722}, {-389.5832, -2708.117, 63.48722}};
Main.Study.Output.OutputFile.KneeJointReactionMomentsRight.Mlocal = {{42.73364, 35.30516, 8.881784e-016}, {42.73363, 35.30516, 0}, {42.73363, 35.30516, 0}};

Now the signs are the same. However since it is now in the shank coordinate system, the values are different.

By the way, I now have the faculty research version, and am running version 4.1.1.

Thank you,
Brent

1 Like

Hi Brent,

What happens is that the output Reaction.Fout of a the joint gives the reaction forces that the first node applies on the second node of the joint, in the first node coordinate system.
And the AnyForceMomentMeasure gives the forces that are applied to the first node, in the first node coordinate system.
That is why you found the two are opposite.

Best regards, Sylvain.