Difference between JRF and GRF

Hi,

I’m using AMMR 1.5 and GaitUniMiami model. I’m trying to compute the knee joint reaction forces (JRF) (ie. effect of mass and inertia without muscle action) and compare it to the ground reaction force (GRF) using the AnyForceMomentMeasure2 function. I tried to use all the body segments in my calculations and the options (include inertia and gravity forces) but I’m in doubt about the validity because the difference between GRF and JRF is not zero (see figure “JRF minus GRF.png”). It should be zero at least when the foot is in contact with the ground and the GRF is acting on the foot, otherwise there is no equilibrium !

I also tried to discard the muscles and use JntMuscles instead, but the simulation ends with an error after a few steps. Finally, when I put the reaction forces in the joints, the JRF approaches the GRF, but there are still strange peaks of differences (400N) at to different time intervals (see figure “ReactionForcesOn.png”). Is it possible that there is a delay between the ground reaction force data and the kinematic data ?

Anyway, what is the best way to compute the joint reaction forces ?

Pierre


FUNCTIONS:

AnyForceMomentMeasure2 JointReactionForce = {
AnyRefFrame &ref = .Side.Leg.Seg.Shank.KneeJoint.TibialPlateau;

IncludeGravity = On;
IncludeInertiaForces = On;

AnySeg &seg1=Main.Studies.HumanModel.BodyModel.Trunk.SegmentsThorax.SkullSeg;
AnySeg &seg2=Main.Studies.HumanModel.BodyModel.Trunk.SegmentsThorax.ThoraxSeg;
AnySeg &seg3=Main.Studies.HumanModel.BodyModel.Trunk.SegmentsCervicalSpine.C7Seg;
AnySeg &seg4=Main.Studies.HumanModel.BodyModel.Trunk.SegmentsCervicalSpine.C6Seg;
AnySeg &seg5=Main.Studies.HumanModel.BodyModel.Trunk.SegmentsCervicalSpine.C5Seg;
AnySeg &seg6=Main.Studies.HumanModel.BodyModel.Trunk.SegmentsCervicalSpine.C4Seg;
AnySeg &seg7=Main.Studies.HumanModel.BodyModel.Trunk.SegmentsCervicalSpine.C3Seg;
AnySeg &seg8=Main.Studies.HumanModel.BodyModel.Trunk.SegmentsCervicalSpine.C2Seg;
AnySeg &seg9=Main.Studies.HumanModel.BodyModel.Trunk.SegmentsCervicalSpine.C1Seg;

AnySeg &seg10=Main.Studies.HumanModel.BodyModel.Trunk.SegmentsLumbar.L5Seg;
AnySeg &seg11=Main.Studies.HumanModel.BodyModel.Trunk.SegmentsLumbar.L4Seg;
AnySeg &seg12=Main.Studies.HumanModel.BodyModel.Trunk.SegmentsLumbar.L3Seg;
AnySeg &seg13=Main.Studies.HumanModel.BodyModel.Trunk.SegmentsLumbar.L2Seg;
AnySeg &seg14=Main.Studies.HumanModel.BodyModel.Trunk.SegmentsLumbar.L1Seg;

AnySeg &seg15=Main.Studies.HumanModel.BodyModel.Trunk.SegmentsLumbar.SacrumSeg;
AnySeg &seg16=Main.Studies.HumanModel.BodyModel.Trunk.SegmentsLumbar.PelvisSeg;

AnySeg &seg17=Main.Studies.HumanModel.BodyModel.Right.ShoulderArm.Seg.Clavicula;
AnySeg &seg18=Main.Studies.HumanModel.BodyModel.Right.ShoulderArm.Seg.Scapula;
AnySeg &seg19=Main.Studies.HumanModel.BodyModel.Right.ShoulderArm.Seg.Humerus;
AnySeg &seg20=Main.Studies.HumanModel.BodyModel.Right.ShoulderArm.Seg.Ulna;
AnySeg &seg21=Main.Studies.HumanModel.BodyModel.Right.ShoulderArm.Seg.Radius;
AnySeg &seg22=Main.Studies.HumanModel.BodyModel.Right.ShoulderArm.Seg.Hand;

AnySeg &seg23=Main.Studies.HumanModel.BodyModel.Left.ShoulderArm.Seg.Clavicula;
AnySeg &seg24=Main.Studies.HumanModel.BodyModel.Left.ShoulderArm.Seg.Scapula;
AnySeg &seg25=Main.Studies.HumanModel.BodyModel.Left.ShoulderArm.Seg.Humerus;
AnySeg &seg26=Main.Studies.HumanModel.BodyModel.Left.ShoulderArm.Seg.Ulna;
AnySeg &seg27=Main.Studies.HumanModel.BodyModel.Left.ShoulderArm.Seg.Radius;
AnySeg &seg28=Main.Studies.HumanModel.BodyModel.Left.ShoulderArm.Seg.Hand;

AnySeg &seg29=Main.Studies.HumanModel.BodyModel.Right.Leg.Seg.Thigh;
AnySeg &seg30=Main.Studies.HumanModel.BodyModel.Right.Leg.Seg.Shank;
AnySeg &seg31=Main.Studies.HumanModel.BodyModel.Right.Leg.Seg.Patella;
AnySeg &seg32=Main.Studies.HumanModel.BodyModel.Right.Leg.Seg.Talus;
AnySeg &seg33=Main.Studies.HumanModel.BodyModel.Right.Leg.Seg.Foot;

AnySeg &seg34=Main.Studies.HumanModel.BodyModel.Left.Leg.Seg.Thigh;
AnySeg &seg35=Main.Studies.HumanModel.BodyModel.Left.Leg.Seg.Shank;
AnySeg &seg36=Main.Studies.HumanModel.BodyModel.Left.Leg.Seg.Patella;
AnySeg &seg37=Main.Studies.HumanModel.BodyModel.Left.Leg.Seg.Talus;
AnySeg &seg38=Main.Studies.HumanModel.BodyModel.Left.Leg.Seg.Foot;

AnyVec3 FLocal = Fref.Axes;
AnyVec3 MLocal = M
ref.Axes;
};

AnyForceMomentMeasure2 GroundReactionForce = {
AnyRefFrame &ref = .Side.Leg.Seg.Shank.KneeJoint.TibialPlateau;

AnySeg &seg34=.Side.Leg.Seg.Thigh;
AnySeg &seg35=.Side.Leg.Seg.Shank;
AnySeg &seg36=.Side.Leg.Seg.Patella;
AnySeg &seg37=.Side.Leg.Seg.Talus;
AnySeg &seg38=.Side.Leg.Seg.Foot;

AnySeg &seg39= Main.Studies.InverseDynamicStudy.EnvironmentModel.PlateA.ForcePlate;
AnySeg &seg40= Main.Studies.InverseDynamicStudy.EnvironmentModel.PlateA.ForcePlate;
AnySeg &seg41= Main.Studies.InverseDynamicStudy.EnvironmentModel.PlateC.ForcePlate;
AnySeg &seg42= Main.Studies.InverseDynamicStudy.EnvironmentModel.PlateC.ForcePlate;

// Plate A (only left leg touches it)
AnyForceBase &GRF_PlateA_Fx12 = Main.Studies.InverseDynamicStudy.EnvironmentModel.PlateA.Fx12;
AnyForceBase &GRF_PlateA_Fx34 = Main.Studies.InverseDynamicStudy.EnvironmentModel.PlateA.Fx34;
AnyForceBase &GRF_PlateA_Fy14 = Main.Studies.InverseDynamicStudy.EnvironmentModel.PlateA.Fy14;
AnyForceBase &GRF_PlateA_Fy23 = Main.Studies.InverseDynamicStudy.EnvironmentModel.PlateA.Fy23;
AnyForceBase &GRF_PlateA_Fz1 = Main.Studies.InverseDynamicStudy.EnvironmentModel.PlateA.Fz1;
AnyForceBase &GRF_PlateA_Fz2 = Main.Studies.InverseDynamicStudy.EnvironmentModel.PlateA.Fz2;
AnyForceBase &GRF_PlateA_Fz3 = Main.Studies.InverseDynamicStudy.EnvironmentModel.PlateA.Fz3;
AnyForceBase &GRF_PlateA_Fz4 = Main.Studies.InverseDynamicStudy.EnvironmentModel.PlateA.Fz4;

// Plate C (Only left leg touches it)
AnyForceBase &GRF_PlateC_Fx12 = Main.Studies.InverseDynamicStudy.EnvironmentModel.PlateC.Fx12;
AnyForceBase &GRF_PlateC_Fx34 = Main.Studies.InverseDynamicStudy.EnvironmentModel.PlateC.Fx34;
AnyForceBase &GRF_PlateC_Fy14 = Main.Studies.InverseDynamicStudy.EnvironmentModel.PlateC.Fy14;
AnyForceBase &GRF_PlateC_Fy23 = Main.Studies.InverseDynamicStudy.EnvironmentModel.PlateC.Fy23;
AnyForceBase &GRF_PlateC_Fz1 = Main.Studies.InverseDynamicStudy.EnvironmentModel.PlateC.Fz1;
AnyForceBase &GRF_PlateC_Fz2 = Main.Studies.InverseDynamicStudy.EnvironmentModel.PlateC.Fz2;
AnyForceBase &GRF_PlateC_Fz3 = Main.Studies.InverseDynamicStudy.EnvironmentModel.PlateC.Fz3;
AnyForceBase &GRF_PlateC_Fz4 = Main.Studies.InverseDynamicStudy.EnvironmentModel.PlateC.Fz4;

AnyVec3 FLocal = Fref.Axes;
AnyVec3 MLocal = M
ref.Axes;
};

Hi Pierre,

Here we’ve discussed your questions here are some answers.

  1. We don’t understand how the joint reaction force and the ground reaction could be same. Could you introduce any kind of reference to us?

  2. If you want to use AnyForceMomentMeasure2 class object, you have to imagine a kind of free body diagram. So you should only include either one side of objects(forces) from your point of interest.
    But when I looked your JointReactionForce object, it seems that you just tried to include all segments. This is not true.

  3. Could you let us know why you are interested in the joint reaction force portion due to the mass and the inertia without muscles?
    Also it will be easier for you to exclude muscles from your model first.

Best regards,
Moonki

If I may ask, how did you plot the GRF? What are the magnitudes? Be careful if you are using F2 of the C3D data - it’s analog data which doesn’t have an unit as Newton.

As Moonki pointed out, the JRF (knee, hip, ankle) shouldn’t have the same values of GRF. I used MoCap (walking) model and GRF is approximately BW(kg)X9.8, while all JRFs are between 4-6 BW.

Hope you have solved your problem!

Phoebe