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 = Mref.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 = Mref.Axes;
};