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.
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.
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.
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?
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”
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?
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:
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”
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
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?
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;
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:
AnkleForces Expressed in the reference frame of the forceplates.
AnkleMoments of forces Expressed in the same reference frame as 1,
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.
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?
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.
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:
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.