Joints reaction moments in FDK

Dear all,

I would know how to interpret joints reaction moments when using FDK.
In details: I’m dealing with spherical joints and the following is the moment output


where results:

.RefFrameOutput.M[0][0] = 0.5
.RefFrameOutput.M[0][1] = 0.9
.RefFrameOutput.M[0][2] = 0.1
.RefFrameOutput.M[1][0] = 0
.RefFrameOutput.M[1][1] = 0
.RefFrameOutput.M[1][2] = 0

My questions are:

  • how moments are computed accounting for the FDK approach? are they inferred from acting forces and joint displacements?

  • why the components M[1][:] result all zeros??

thanks in advance

Hi Tito,

Here is the explanation from the manual

Constraints.Reaction.RefFrameOutput.M “Array of 3D moment vectors (global coordinates) associated with the references frames used by the force object (i.e. by the underlying kinematic measure).”

So the first set of moments are referring to the first mentioned reference frame measuring the moment in global coordinates. The second set should be equal to the first set but opposite because they work the other way. Unfortunately these are reported as zero. I tried a sample model and saw the same type of behavior, which looks to me as an error, we will look into this.
So the first set of moments are ok, but the second set should be simply opposite and not zero.
If you try to do the same for the forces you will see how it should have been.

Sorry for the trouble this may have caused you, will try to correct this in the next release, thanks a lot for bringing this to our attention.

Best regards

Thanks Søren!

I would ask for elucidation:

the F and M joint outputs should be measured in local coordinates, not in global, as specified in:

where it states: “All forces and moments are acting on the second mentioned coordinate system and measured wrt to the first mentioned coordinate system in the measure”.

This should mean that F and M are measured in the first mentioned segment local ref system. Is it correct?

Can you please check that?


Hi Tito,

Both descriptions are correct are correct i believe.

The Fout is like described in the wiki pages … and forces inside RefFrameOutput is in global. So the joint reports the forces in two different ways local for the Fout and in global in the RefFrameOutput foder…

If you compare the results in any joint you will also find them to be different

Hope it made sense

Best regards

I think it is not the same. But I found the answer here:


Hi Tito,

Thanks for the link to the post.

This post is in line with the description of the wiki page.

Wiki: All forces and moments are acting on the second mentioned coordinate system and measured wrt to the first mentioned coordinate system in the measure

Old post: The reactions forces of a joint are given in the coordinate system of the first mentioned reference frame of the joint. So only in the case where
this reference frame is the global one, the reactions are given in the
global coordinate system

The folder “RefFrameOutput” is something which has been added as extra output in a recent release and it allows to have the output in a standard way namely always global, so now you have always the ability to see the output in two ways.

Sorry if i have contributed to any confusion in the previous posts i hope it is clear now.

Best regards

Thanks a lot Søren,

now I understand the difference between joint.F (local coord.) and joint.RefFrameOutput.F (global coord). However not easy to gather without your help…

Can you please confirm me that while F is measured in x,y,z sequence components, the M vector depends on the coord. sequence I declared in joint OrientationAxis specifications?

In example if I set:

Orientation.Axis1 = x;
Orientation.Axis2 = z;
Orientation.Axis3 = y;

so the moments will be expressed in the {x,z,y} global coordinates sequence? although the orientation.axis sequence is “local” to that joint?

It is also really important for me to receive answer to my initial question concerning how FDK computes the joints moments. Since in the driver setting we set the x,z,y reactions as {off}, the moments should result all zeros but that doesn’t happen. Do FDK calculates the moments after computing the forces acting on the joint and the relative displacement? or the explanation is different?

Best regards,

Hi Tito,

I have made a small model to display how this works.

Main ={
  AnyFolder Model ={
    AnyFixedRefFrame GlobalRef ={    };
    AnySeg Mass={
      AnyDrawRefFrame drw ={};
    AnyKinLinear Lin ={
      AnyRefFrame &ref1=.GlobalRef;
      AnySeg &ref2=.Mass;
    AnyKinRotational Rot ={
      AnyRefFrame &ref1=.GlobalRef;
      AnySeg &ref2=.Mass;
      Axis1 =z;
      Axis2 =y;
      Axis3 =x;
    AnyMoment3D Moment ={
      AnySeg &ref1=.Mass;
      Mlocal ={10,0,0};
    AnyKinEq Driver ={
      AnyKinLinear &ref1=.Lin;  
      AnyKinRotational &ref2=.Rot;
  AnyBodyStudy Study ={
    AnyFolder &ref=.Model;
    Gravity ={-9.81,0,0};

Please try to do this:
[li] run the inverse dynamics
[/li][li] Compare the output in Main.Study.Output.ref.Driver.Reaction.Fout and
[li] Change the sequence of the rotations in the joint by alter the definition of the Axis1…3
[/li][li] Notice that altering the sequence of rotations does not alter the output of Main.Study.Output.ref.Driver.Reaction.RefFrameOutput.M but alters Main.Study.Output.ref.Driver.Reaction.Fout

Concerning the other question on the moment reactions:
You are correct that the FDK reactions should end up being small once the FDK has been resolved, this is what you will expect.
Initially the reactions will be non-zero and depend on the starting positions provided for the driver… so the DriverPos. Then while the FDK is running it alters the driver position to make the reaction force go below the specified tolerance. The tolerance is speficed in the AnyBodyStudy using the property

In you case the explanation why you see the values you have listed could be because:
[li] FDK did not finish correctly and reported that the tolerance could not be fullfiled.
[/li][li] The forcetolerance could be set to 1? this would mean that the FDK solver would stop as soon as it made the reaction to be less than 1.

Hope it made sense

Best regards

Thank you Søren, everything looks clear now. But it wouldn’t be without your help.

From your explanation about how FDK computes joint reaction moments (joint.RefFrameOutput.M) let me summarize in the following:

  1. although driver reactions were set as {off}, FDK solving puts non null values in .joint.RefFrameOutput.M output (they would be zeros without using FDK).

  2. however, using FDK, those M values are NOT passive reaction moments (that I would interpret since having set the driver reactions as {off}) but a sort of residuals of FDK force computation related to tolerance threshold.

If that conclusion is correct, let me suggest that it would be better to keep M output values as zeros in order to avoid incorrectly interpreting the M outputs as passive reaction moments.

Best regards,

Dear Tito,

As Søren explained, the reaction values in those FDK dofs are a kind of residual forces(or moments).

Of course it would be better if FDK solver can find a solution where all those residual forces(or moments) would be very small.

As Søren explained, you can try to set the force tolerance of FDK setting as small. But it may take longer time for FDK solver to find a solution.

Best regards,

1 Like