Lever arm modelling with FDK

Hey everyone,

I included an exoskeleton (see below) to the standing model and would need some help with FDK.
FDK (4)

I added some Motion Capture-data (sym Squat). The axis of the exoskeleton is connected to the pelvis and the two "Leverarm segments" can rotate about the z-axis.
My goal is that the higher the force F (green) is the more rotation of the "Leverarm segment" is generated about the axis and the higher Fx (red) gets.

I changed the revolute joint to an AnyStdJoint and added different constraints:

AnyStdJoint JntLeverArm2 = 
    AnyRefFrame &Ground = Main.EnvironmentModel.LeverArm.ExoPelvisSegment.ExoPelvisAxisSegment___1.ExoPelvisSegment_Deckungsgleich1;
    AnyRefFrame &CoMTool = Main.EnvironmentModel.LeverArm.ExoPelvisSegment.ExoPelvisLeverArmSegment___2.ExoPelvisSegment_Deckungsgleich1;
    Constraints = {
      CType = {Hard, Hard, Hard, Hard, Hard, ForceDep};

My idea was to model Fx as an elasticity like that:

  AnyForce FDKTrunk2ExoPelvisLeftRot = {
    AnyKinRotational &rot = Main.EnvironmentModel.LeverArm.ExoPelvisSegment.Mates.JntLeverArm2.Orientation;
    F = {0, 0, - 100 *rot.Pos[2]};


I have tried an AnyGeneralMuscle and a constant force with AnyForce for F but both did not work. The solver can only solve it when I increase InverseDynamics.ForceDepKin.ForceTol to 10 but still the rotation about z is zero and so is Fx.

I have checked your github: All about Force Dependent Kinematics · AnyBody/support Wiki · GitHub
and the tutorial for FDK: Force-Dependent Kinematics — AnyBody Tutorials v7.4.3

but I could not solve the problem.

If anyone can help me please let me know.

Best regards,

We figured that for an rotation about z-axis the fourth value and not the last has to be changed:

Constraints = {
      CType = {Hard, Hard, Hard, ForceDep, Hard, Hard};

F = {- 100 *rot.Pos[0], 0, 0};

By pulling at the lever arm with in AnyGeneralMuscle a very small Fx (-0.8 N) and rotation (0.008 rad) is the result:

AnyMuscleModel SimpleModel = 
      F0 = 100;

AnyGeneralMuscle LinearMuscleExoPelvis2ThighLeft = 
  MetabModel = None;
  ForceDirection = 1.0;
  AnyKinMeasureOrg LinearExoPelvis2ThighLeft = {
    AnyKinMeasure &PelvisThighX0 = Main.EnvironmentModel.Notes_ElasticStrapes.MuscleExoPelvis2ThighLeft;
    MeasureOrganizer = {0};  
  AnyMuscleModel &ContactStrength = Main.EnvironmentModel.Notes_ElasticStrapes.SimpleModel;

Do you know how to increase the force Fx and with that the rotation?

Increasing the AnyGeneralMuscle (F0 > 100N) or decreasing InverseDynamics.ForceDepKin.ForceTol (< 0.3) seems to be to much for the solver.

Hi Tobias,

From what I can see, everything seems to be ok. The muscle generates 0.8Nm of force (torque), and you see a rotation of 0.008 radians. This means the spring force in your FDK dof is 100*0.008 = 0.8 Nm, which is in equilibrium with the applied torque of 0.8Nm. If you want to see more rotation, you can lower the stiffness constant.

I am not entirely sure I understand all the aspects of your model. For example, it's not clear to me how are you applying a force with AnyGeneralMuscle? Normally, the general muscle activity will be minimized in the muscle recruitment so the solver will find a solution which has the lowest muscle activity. So, if you increase the F0 of the muscle, it can be recruited to generate more torque for the same activity. But I don't understand what other loads in the model are leading to the recruitment of this muscle.

If you switch the general muscle to an external applied force that you can manually specify, then you should see the deformation proportional to the applied force.

I would also suggest that you try to start with a simple model with just your segment fixed to the global ref and try to see how FDK behaves in isolation before implementing it in a detailed model with motion.

I hope this helps.

Best regards,