Cervical Joint Reaction Force Direction

Hi all,

I am trying to make sense with my JRF simulation outcome and compare it with others' (as I am slightly confused).

I have extracted the JRF for C5-C6 in proximodistal direction from my simulation (picture below) using AMMR v2.3.0 Plug-in Gait Multitrial model.

And I have compared it with the force within the spine of the same activities from literature ([doi.org/10.1016/j.jbiomech.2017.11.033]) and I found the shape of my graph is inverted (see below).

Screenshot 2021-01-08 at 13.37.47

I have a look around the forum and found this and this and this.

And I checked on the C5-C6 joint/constraint definition are:-

From Main.HumanModel.BodyModel.Trunk.JointsCervicalSpine.C6C5Jnt.Constraints.RefFrameOutput.RefFrameArr

  AnySphericalJoint C6C5Jnt = {
    AnyRefNode &C6Node = ..SegmentsCervicalSpine.C6Seg.C6C5JntNode;
    AnyRefNode &C5Node = ..SegmentsCervicalSpine.C5Seg.C6C5JntNode;
  };

And from Main.HumanModel.BodyModel.SelectedOutput.Trunk.JointReactionForce.C6C5ProximoDistalForce

/// Lateral positive
AnyVar C6C5MedioLateralForce = ...Trunk.JointsCervicalSpine.C6C5Jnt.Constraints.Reaction.Fout[2];
/// Distal (superior) positive
AnyVar C6C5ProximoDistalForce = ...Trunk.JointsCervicalSpine.C6C5Jnt.Constraints.Reaction.Fout[1];
/// Anterior positive
AnyVar C6C5AnteroPosteriorForce = ...Trunk.JointsCervicalSpine.C6C5Jnt.Constraints.Reaction.Fout[0];
//C6 ref

The questions are:-

  1. Is it correct for me to assume, that the JRF output I have extracted is actually force on C5 caused by C6 (and not the other way round)?

  2. Is there anyway I could get the JRF on the C6 due to C5 (the opposite way) without having to re-run the simulation?

  3. And if it is not possible to do number (2), could you direct me to any post/tutorial that could help me to define it in Study analysis for all the outcome that I am interested in?

Thank you.

Kind regards,
Faizal

Hi Faizal,

I have looked at the paper and as far as I can see the graph you are referring to in the paper displays forces from T1/T2 towards L5/S1 so not the cervical joints, so it is not comparable.

Concerning the question here are soma answers:

1: Yes this is correct. When i am in doubt about such questions i often make a small model to display it. eg. like this one:

Main = {
  AnyBodyStudy MyStudy ={
    AnyFixedRefFrame Global ={};
    AnySeg Segment1={
      Mass=10;
      Jii={0,0,0};
    };
    AnyStdJoint StdJoint1  ={
      AnyFixedRefFrame &ref=.Global;
      AnySeg &ref2=.Segment1;
    };
    Gravity ={0,-9.81,0};
   };
};

it shows Main.MyStudy.StdJoint1.Constraints.Reaction.Fout= {0.0, 98.1, 0.0, 0.0, 0.0, 0.0};
Meaning that globalref creates a force of 98.1 N on Sement1 in the y direction of global ref. (typically for a joint the reference system is not fixed like in this example)

2 : you would need to re-run the simulation or do the transformation outside AnyBody see e.g. this wiki post https://github.com/AnyBody/support/wiki/All-about-Kinetics#measure-the-reaction-force-in-a-joint-in-a-certain-coordinate-system
Also note that there is the property "Reaction.RefFrameOutput" available in all joints it provides the forces acting on both the reference systems so equal and opposite forces, these data are always given in a global reference system, and will need to be transformed to a local reference system using the Axes property of the node in question.
3. Please see answer in 2

Best regards
Søren

1 Like

Hi Søren,

Thank you for the answers.

I have followed the instruction from wiki as well as from here. (AnyForceMomentMeasure.any example file from the wiki is missing though)

AnyForceMomentMeasure C5C6SegmentJointReactionMeasure = 
      {
        //IncludeForces = ;
        //RefPoint = ;
        AnyForceBase &reaction = Main.HumanModel.BodyModel.Trunk.JointsCervicalSpine.C6C5Jnt.Constraints.Reaction;
        AnyRefFrame &cause = Main.HumanModel.BodyModel.Trunk.SegmentsCervicalSpine.C5Seg.C6C5JntNode;
        AnyVec3 Flocal = Main.Studies.InverseDynamicStudy.C5C6SegmentJointReactionMeasure.F*Main.HumanModel.BodyModel.Trunk.SegmentsCervicalSpine.C5Seg.C6C5JntNode.Axes;
      };

I put the code inside Main.Studies.InverseDynamicStudy.C5C6SegmentJointReactionMeasure.

My questions are:-

  1. Does it really matter (in terms of simulation time) where I put the code for AnyForceMomentMeasure (I will need to run simulation to get values for all cervical and lumbar joints for multiple subjects)?
  2. However, upon checking Flocal, the values are no different from the default JRF in Selected Output. The F (of C5C6SegmentJointReactionMeasure), however, produces 3 different curves which might be the solution that I need. But I couldn't make sense of this output as the order [0,1,2] changed and not sure about the definition either.

Please assist me on this. Thank you.

Kind regards,
Faizal

Hi Faizal,

The location of where you add the measure is not important, but you need to ensure that it is either directly include into your study or that the study refers to it, otherwise it will not be calculated.

It makes sense that the measure is giving same values, it looks like the node being used are the same, and it is the reaction forces which are being used also.

I do not understand the comment on the order being changed, this measure will give Flocal as Fx,Fy,Fz

Please try to use the measure on the small example in one of the previous post and play around with some known loads by e.g. changing gravity or adding a AnyForce3D.

Best regards
Søren

Hi Søren,

I think I understood now where my confusion is.

And my next question might sound silly, but could you suggest to me on how do I get/code to get the force/load acting on C6 segment that caused by C5 and all the segments superior to it as well as all the structure/muscles associated with it (from skull to C5)?

Your help is really appreciated.

Kind regards,
Faizal

Hi Fiazal,

If you look at the refframeoutput in the joint it will give the force acting on both frames in the joint (in global coordinates). This is relatively new feature that we have added to the joints, this removes the need for the forcemomentmeasure in most cases.

"note that there is the property "Reaction.RefFrameOutput" available in all joints it provides the forces acting on both the reference systems so equal and opposite forces, these data are always given in a global reference system, and will need to be transformed to a local reference system using the Axes property of the node in question."

These forces will be equal and opposite.
For a model with muscles in they will include all force contributions from muscles, segment masses, dynamics etc.

By the way I have added the missing file in the wiki, it seems to have been lost when we transferred the wiki to a new platform.

Best regards
Søren

1 Like

This topic was automatically closed 125 days after the last reply. New replies are no longer allowed.