problem with AnklePlantarFlexionMoment

Hi,

I want to explain my remaining question in more detail. If you look at the moment of force in plate two you see that the second signal goes from a bit negative to a value about 84Nm. If you look at the same moment of force in the ankleplantarFlexionmoment you see that the value is about 65Nm. I really need to know where that difference is coming from.

Best regards,

Hans

There are two reasons for the difference:

  1. You are looking at two completely different reference frames. The ankle is rotated compared to the center of the force plate. The moments in the force plate are given in the force plate center ref frame. the moments in the ankle are given in the reference frame of the ankle. So you cannot compare them directly.

  2. Additionally, you will have the forces in the force plate times the moment arm (the distance of force plate center to ankle center) creating another moment on top.


Hi,

Thank you for your reply. Is there a possibility to change this?

Best regards,

Hans

Hi,

In addition to my last reply: Is it a solution to construct an extra node in my model with an orientation similar to the force plates and construct a measure for the forces and moments of forces?

Best regards,

Hans

Hans,

Please have a look at the:

AnyForceMomentMeasure2 in the Reference Manual and look at the example there. I guess that should do the job.


Hi,

I made this measure:
[SIZE=3]// Own defined momentmeasure
[/SIZE][SIZE=3]AnyForceMomentMeasure2[/SIZE] AnklePlantarFlexionNetMomentAnalyse = {
[SIZE=3]// AnyRefNode &ref=Main.Studies.HumanModel.BodyModel.Right.Leg.Seg.Shank.AnkleJointAnalyseRight;
//A Node with the same coordinates as the anklejoint node but with an orientation
//similar to the orientation in the forceplates
[/SIZE][SIZE=3]AnyRefNode[/SIZE] &ref2=Main.Studies.HumanModel.BodyModel.Right.Leg.Seg.Talus.AnkleJointAnalyseRightTest;
[SIZE=3]AnyRefFrame[/SIZE] &ref3=Main.Studies.InverseDynamicStudy.EnvironmentModel.GlobalRef;
[SIZE=3]AnySeg[/SIZE] &seg1 =Main.Studies.HumanModel.BodyModel.Right.Leg.Seg.Foot;
[SIZE=3]//AnySeg &seg2=Main.Studies.HumanModel.BodyModel.Right.Leg.Seg.Thigh;
[/SIZE][SIZE=3]#include[/SIZE] “C:\bestanden\AMMRV1.4 - kopie\Body\AAUHuman\LegTD\LegMuscleNamesAnalyse.any”

IncludeGravity=On;
[SIZE=3]AnyReacForce[/SIZE] &jnt1=Main.Studies.HumanModel.BodyModel.Right.Leg.Jnt.Ankle.Constraints.Reaction;
[SIZE=3]AnyReacForce[/SIZE] &jnt2=Main.Studies.HumanModel.BodyModel.Right.Leg.Jnt.SubTalar.Constraints.Reaction;

[SIZE=3]//Make transformation to the anklejoint.rotnode coordinate system
[/SIZE][SIZE=3]AnyVec3[/SIZE] Mlocal=M*ref2.Axes;

But it doesn’t make any difference. Why is that?

Best regards,

Hans

Hi,

In addition to my last reply it seems like that the moment of forces and the joint forces are expressed in the global reference frame. The solution should be a certain rotation, but I don’t know exactly which rotation I should apply.

Another think I am not sure about are the joint reaction forces as input. Are they expressed in the global reference frame as well and how can I obtain the moment of forces expressed in the same orientation as the forceplates?

Best regards,

Hans

Hey Hans,

the reaction forces are always in the local ref frame. However, you can measure the reaction force in a joint in a certain coordinate system. There is a short description in the wiki:

http://wiki.anyscript.org/index.php/All_about_Kinetics#Measure_the_reaction_force_in_a_joint_in_a_certain_coordinate_system

Did you see that example before. I’m afraid, I didn’t get your last comment.


Hi,

I got that indeed from that kinetics wiki. What I want to do is the following making an appropiate moment measure in the coordinate system of the forceplates but at the moment I don’t know how to get the AnyForceMoment2 in the correct coordinate system. When I construct this moment measure it gives the same results as the AnklePlantarFlexionNetMoment in the standard output:
// Own defined momentmeasure
AnyForceMomentMeasure2 AnklePlantarFlexionNetMomentAnalyse = {
// AnyRefNode &ref=Main.Studies.HumanModel.BodyModel.Right.Leg.S eg.Shank.AnkleJointAnalyseRight;
//A Node with the same coordinates as the anklejoint node but with an orientation
//similar to the orientation in the forceplates
AnyRefNode &ref2=Main.Studies.HumanModel.BodyModel.Right.Leg. Seg.Talus.AnkleJointAnalyseRightTest;
AnyRefFrame &ref3=Main.Studies.InverseDynamicStudy.Environment Model.GlobalRef;
AnySeg &seg1 =Main.Studies.HumanModel.BodyModel.Right.Leg.Seg.F oot;
//AnySeg &seg2=Main.Studies.HumanModel.BodyModel.Right.Leg. Seg.Thigh;
#include “C:\bestanden\AMMRV1.4 - kopie\Body\AAUHuman\LegTD\LegMuscleNamesAnalyse.an y”

IncludeGravity=On;
AnyReacForce &jnt1=Main.Studies.HumanModel.BodyModel.Right.Leg. Jnt.Ankle.Constraints.Reaction;
AnyReacForce &jnt2=Main.Studies.HumanModel.BodyModel.Right.Leg. Jnt.SubTalar.Constraints.Reaction;

//Make transformation to the anklejoint.rotnode coordinate system
AnyVec3 Mlocal=M*ref2.Axes;

What did I construct wrong in this momentmeasure?

Best regards,

Hans

[COLOR=black]Try that:
[/COLOR]

// Own defined momentmeasure
AnyForceMomentMeasure2 AnklePlantarFlexionNetMomentAnalyse = {

AnyRefNode &ref2=Main.Studies.HumanModel.BodyModel.Right.L eg. Seg.Talus.AnkleJointAnalyseRightTest;

AnySeg &seg1 =Main.Studies.HumanModel.BodyModel.Right.Leg.Seg.F oot;

#include “C:\bestanden\AMMRV1.4 - kopie\Body\AAUHuman\LegTD\LegMuscleNamesAnalyse.an y” //not sure about this

IncludeGravity=Off;
AnyFolder &jnt1= ……….Plate1.ContactDetectionLimb1.PlateFootReactions;
AnyFolder &jnt2= ……….Plate1.ContactDetectionLimb2.PlateFootReactions;

//Make transformation to the anklejoint.rotnode coordinate system
AnyVec3 Mlocal=M*ref2.Axes;

Here you include with jnt1 and jnt2 the reaction force from Plate to the Foot

Hi,

Thank you for your reply but in my model this is not working since I don’t use forceplate2autodetection.any. How can I get the same thing when I use forceplatetype2.any

Best regards,

Hans

Hi,

If you are using ‘ForcePlateType2.any’ file, then you can change like this:

AnyForceMomentMeasure2 AnklePlantarFlexionNetMomentAnalyse = {

AnyRefNode &ref2=Main.Studies.HumanModel.BodyModel.Right.L eg. Seg.Talus.AnkleJointAnalyseRightTest;

AnySeg &seg1 =Main.Studies.HumanModel.BodyModel.Right.Leg.Seg.Foot;

#include "C:\bestanden\AMMRV1.4 - kopie\Body\AAUHuman\LegTD\LegMuscleNamesAnalyse.an y" //not sure about this

IncludeGravity=Off;
AnyFolder &plate1= ……….Plate1.PlateFootReactions;
AnyFolder &plate2= ……….Plate2.PlateFootReactions;
....

//Make transformation to the anklejoint.rotnode coordinate system
AnyVec3 Mlocal=M*ref2.Axes;
};

Please be sure that in the above AnyForceMomentMeasure2 class, you are considering the effects from both muscle forces and the ground reactions at force plates.

Could you please clarify what you want to do?
1) What kind of forces do you want to consider?
2) Where is your ‘point of interest’?
3) What coordinate system do you want to use to express the resultant forces and moments?

Best regards,
Moonki

hi,

Thank you for your reply. What I need to have is the moment of forces around the anklejoint without the vector rotated in the reference frame of the anklejoint. When I use the plateground reactions as you provide me several this are not correct yet. First of all:

The forces are different compared to the ones as described in the AnklePlantarFlexionMoment.F or the ground reaction forces. The forces are similar to the AnklePlantarFlexionMomentMuscle.F.

2 It doesn’t have any effects on the moments of force vector at all. I don’t understand why this isn’t working at all(in my model I can also use the forceplate2autodetection.any file without any problem).

This is how I implemented the measure:
AnyForceMomentMeasure2 AnklePlantarFlexionNetMomentAnalyse = {
//AnyRefNode &ref=Main.Studies.HumanModel.BodyModel.Right.Leg.Seg.Shank.AnkleJointAnalyseRight;
AnyRefNode &ref2=Main.Studies.HumanModel.BodyModel.Right.Leg.Seg.Talus.AnkleJointAnalyseRightTest;
//AnyRefFrame &ref3=Main.Studies.InverseDynamicStudy.EnvironmentModel.GlobalRef;
AnySeg &seg1 =Main.Studies.HumanModel.BodyModel.Right.Leg.Seg.Foot;
//AnySeg &seg2=Main.Studies.HumanModel.BodyModel.Right.Leg.Seg.Talus;
#include “C:\bestanden\AMMRV1.4 - kopie\Body\AAUHuman\LegTD\LegMuscleNamesAnalyse.any”

IncludeGravity=Off;
AnyFolder &jnt1=Main.Studies.InverseDynamicStudy.EnvironmentModel.Plate2.ContactDetectionLimb1.PlateFootReactions;
AnyFolder &jnt2= Main.Studies.InverseDynamicStudy.EnvironmentModel.Plate2.ContactDetectionLimb2.PlateFootReactions;
//Make transformation to the anklejoint.rotnode coordinate system
AnyVec3 Mlocal=M*ref2.Axes;

  //AnyRefNode &ref3=Main.Studies.HumanModel.BodyModel.Right.Leg.Seg.Foot.AnkleJoint.RotNode;
  AnyVar MPlantarFlexion=Mlocal[2];

// AnyDrawVector DrawVector=
// {
// AnyRefNode &ref1=Main.Studies.HumanModel.BodyModel.Right.Leg.Seg.Shank.AnkleJoint.RotNode;
// Vec = Main.DrawSettings.NetMomentVector.ScaleFactor*.M;
// PointAway = On;
// DrawCoord = Off;
// Line.RGB = Main.DrawSettings.NetMomentVector.RGB;
// Line.Thickness = Main.DrawSettings.NetMomentVector.Thickness;
// Line.End.Thickness = 2Main.DrawSettings.NetMomentVector.Thickness;
// Line.End.Length = 4
Main.DrawSettings.NetMomentVector.Thickness;
// };
};

But it is calculating the same results as AnklePlantarFlexionMomentMuscle. So somehow it’s not taking the reaction forces into account. I wonder why this is the case. The muscle names are the same as in the standard file.

What I need to have is the following:

  1. AnkleForces Expressed in the reference frame of the forceplates.
  2. AnkleMoments of forces Expressed in the same reference frame as 1,
  3. The point of interest is comparing the moments of forces of AnyBody with another independent software tool where another reference frame(as in 1) is used to measure the moments of force.

Best regards,

Hans

Hi,

Please put the following code inside your ‘AnyBodyStudy’ class instance in main file.
Please be sure that the force plate name that I used is ‘Right_Foot_Plate’. Yours may be different.

AnyFolder Ankle_Analysis = 
{
    AnyRefFrame& Right_Ankle_Base_Frame = 
    Main.Studies.HumanModel.BodyModel.Right.Leg.Seg.Shank.AnkleJoint;
    
    // The name of your force plate may be different!
    AnyRefFrame& Force_Plate_Frame = 
    Main.Studies.InverseDynamicStudy.EnvironmentModel.Right_Foot_Plate.ForcePlate;
    
    AnyVec3 Right_Ankle_ReacForce_Expressed_In_Ankle_Base_Frame = 
    {
      Main.Studies.HumanModel.BodyModel.Right.Leg.Jnt.Ankle.Constraints.Reaction.Fout[0],
      Main.Studies.HumanModel.BodyModel.Right.Leg.Jnt.Ankle.Constraints.Reaction.Fout[1],
      Main.Studies.HumanModel.BodyModel.Right.Leg.Jnt.Ankle.Constraints.Reaction.Fout[2]
    };
    
    AnyVec3 Right_Ankle_ReacForce_Expressed_In_Global_Coordinate_System = 
    Right_Ankle_ReacForce_Expressed_In_Ankle_Base_Frame * Right_Ankle_Base_Frame.Axes' ;
    
    
    //Ankle Reaction Force expressed in the reference frame of the forceplate 
    AnyVec3 Right_Ankle_ReacForce_Expressed_In_ForcePlate_Coordinate_System =
    Right_Ankle_ReacForce_Expressed_In_Global_Coordinate_System * Force_Plate_Frame.Axes;
    
    AnyForceMomentMeasure2 AnklePlantarFlexion_Only_By_Joint_Reactions_Expressed_In_Global_Coordinate_System = 
    {
        AnyRefNode& Point_Of_Interest = Main.Studies.HumanModel.BodyModel.Right.Leg.Seg.Shank.AnkleJoint;
        AnySeg& seg1 = Main.Studies.HumanModel.BodyModel.Right.Leg.Seg.Foot;
        AnySeg& seg2 = Main.Studies.HumanModel.BodyModel.Right.Leg.Seg.Talus;
        
        //Let's only consider the ankle joint reactions!
        AnyReacForce& jnt_reac = Main.Studies.HumanModel.BodyModel.Right.Leg.Jnt.Ankle.Constraints.Reaction;
    };
    
    AnyVec3 AnklePlantarFlexion_Only_By_Joint_Reactions_Expressed_In_ForcePlate_Coordinate_System =
    AnklePlantarFlexion_Only_By_Joint_Reactions_Expressed_In_Global_Coordinate_System.M //<-- This value is global!
    * Force_Plate_Frame.Axes;
};

Here I only considered the joint reaction forces of the ankle joint.
So, if you also want to consider the joint reaction forces of the talus joint, you should modify your code.

Also I attached this script in an anyscript fie.

This answer is all I can do for you.

Best regards,
Moonki

P.S) Could you please let us know the name of software which you are using for the comparison with AnyBody?

Hi,

thank you for your reply. This provides me a lot of help. The name of the software tool is called Analyse. This is constructed in Matlab and can be used to analyze c3d files just as AnyBody does.

Before I could compare output of the two different systems it was essential that the model in AnyBody contains nodes and measures in the same local reference frame as the model in Analyse which is successfully done for the segment positions and joint angles. The next step is to compare the joint moments of forces but there was an offset in the output between the two system and my task is to investigate the cause of the offset.

Again it was caused by the fact that the reference frames for the moments were expressed in a different framework. So that’s why I asked your help since I don’t want to change the model properties in the joints which can make undesired changes to output.

I hope this explanation makes it clear for you why I need to change the output in the ankle joints.

Best regards,

Hans

Hi Hans,

If possible, would you please let us know the website or link for ‘Analyse’ software?

Best regards,
Moonki

Hi,

Unfortunately I cannot provide you a link to this software tool since it’s not a commercial software package but a local written software tool.

Best regards,

Hans

Hi,

One remaining question: How are the forceplate moment signals used to calculate the ankleplantarflexionMoment?

Best regards,

Hans

Hi,

The force and moment from ‘force plate’ to ‘human foot’ are not considered in the calculation of AnklePlantarFlexion measure.

If you want to see the force and moment from ‘force plate’ to ‘human foot’,
then in ‘ForcePlateType2.any’ file there are some pieces of code like this:

AnyReacForce PlateFootReaction=
{
    
    AnyKinLinear Lin={
      Ref=0;
      AnySeg &ref2=..ForcePlate;
      AnySeg &ref1=..Limb;
    };
    
    AnyKinRotational Rot={
      AnySeg &ref2=..ForcePlate;
      AnySeg &ref1=..Limb;
      Type=RotAxesAngles;
    };
};

So if you are interested in the effect from ‘ground reaction forces and moments’ to ‘AnklePlantarFlexion’ moment,
you have to define your own AnyForceMomentMeasure2 object by yourself.

Best regards,
Moonki

[LEFT]Hi,

Thank you for your reply. This is all I need to know.

Best regards,

Hans[/LEFT]