Joint angles and Force generation capacity of the cervical spine model

Hello,AnyBody,
I am working with AnyBody to simulate the cervical spine movement. But when I load the example MaxForceNeckModel(v6.0) to simulate the flexion-extension movement of neck, I found the values of all joint angles namely C2~C3,C3~C4,C4~C5… are quite the same. Form the papers, we know the joint angles may have some different more or less. The situation doesn’t appear the lumbar spine model.

Also,I read the website “A detailed rigid-body cervical spine model based on inverse dynamics” from Mark de Zee. In the website, Mark calculated the maximal force generation capacity of the cervical spine model in all directions to validate the neck model. But when I load the example MaxForceNeckModel, I can’t get the correct values of maximal force generation capacity of the cervical spine model.

My questions are that:
1.how can I modify the codes to predict the joint angles like the lumbar spine model?
2.how can I get the correct values of force generation capacity in all directions to plot the figure in the website?

Many thanks for your help and your time in advance!
Qing

Dear Qing,

  1. Regarding how to modify the joint angles in the cervical spine, you should change the code for the cervical spine rhythm.

You can find the following pieces of the code in the ‘AMMR\Body\AAUHuman\TrunkNeck\JointsTrunkLumbarNeck.any’ file:

    AnyKinEqSimpleDriver CervicalFlexionRhythmDrv = {
      
      AnyKinMeasureLinComb Measure = {
        
        AnyKinMeasure &u0 = ..SkullThoraxFlexion;
        AnyKinMeasure &u1 = ...C1C0Jnt;
        AnyKinMeasure &u2 = ..C3C2JntFlexion;
        AnyKinMeasure &u3 = ..C4C3JntFlexion;
        AnyKinMeasure &u4 = ..C5C4JntFlexion;
        AnyKinMeasure &u5 = ..C6C5JntFlexion;
        AnyKinMeasure &u6 = ..C7C6JntFlexion;
        AnyKinMeasure &u7 = ..T1C7JntFlexion;
        OutDim = 6;
        Const = {0, 0, 0, 0, 0, 0};
        Coef = {
          {40/122, 1, 0, 0, 0, 0, 0, 0},
          {0, 0, 1, -1, 0, 0,  0,  0},
          {0, 0, 0, 1, -1, 0,  0,  0},
          {0, 0, 0, 0, 1, -1,  0,  0},
          {0, 0, 0, 0, 0,  1, -1,  0},
          {0, 0, 0, 0, 0,  0,  1, -1}};
        
      }; // Measure
      
      DriverPos = {0, 0, 0, 0, 0, 0};
      DriverVel = {0, 0, 0, 0, 0, 0};
      Reaction.Type = {Off,Off,Off, Off,Off,Off};
      
    }; // CervicalFlexionRhythmDrv

    AnyKinEqSimpleDriver CervicalLateralBendingRhythmDrv = {
      
      AnyKinMeasureLinComb Measure = {
        
        AnyKinMeasure &u2 = ..C3C2JntLateralBending;
        AnyKinMeasure &u3 = ..C4C3JntLateralBending;
        AnyKinMeasure &u4 = ..C5C4JntLateralBending;
        AnyKinMeasure &u5 = ..C6C5JntLateralBending;
        AnyKinMeasure &u6 = ..C7C6JntLateralBending;
        AnyKinMeasure &u7 = ..T1C7JntLateralBending;
        OutDim = 5;
        Const = {0, 0, 0, 0, 0};
        Coef = {
          {1, -1, 0, 0,  0,  0},
          {0, 1, -1, 0,  0,  0},
          {0, 0, 1, -1,  0,  0},
          {0, 0, 0,  1, -1,  0},
          {0, 0, 0,  0,  1, -1}};
        
      }; // Measure
      
      DriverPos = {0, 0, 0, 0, 0};
      DriverVel = {0, 0, 0, 0, 0};
      Reaction.Type = {Off,Off,Off, Off,Off};
      
    }; // CervicalLateralBendingRhythmDrv

    AnyKinEqSimpleDriver CervicalRotationRhythmDrv = {
      
      AnyKinMeasureLinComb Measure = {
        
        AnyKinMeasure &u0 = ..SkullThoraxRotation;
        AnyKinMeasure &u1 = ...C2C1Jnt;
        AnyKinMeasure &u2 = ..C3C2JntRotation;
        AnyKinMeasure &u3 = ..C4C3JntRotation;
        AnyKinMeasure &u4 = ..C5C4JntRotation;
        AnyKinMeasure &u5 = ..C6C5JntRotation;
        AnyKinMeasure &u6 = ..C7C6JntRotation;
        AnyKinMeasure &u7 = ..T1C7JntRotation;
        OutDim = 6;
        Const = {0, 0, 0, 0, 0, 0};
        Coef = {
          {77/132, 1, 0, 0, 0, 0, 0, 0},
          {0, 0, 1, -1, 0, 0,  0,  0},
          {0, 0, 0, 1, -1, 0,  0,  0},
          {0, 0, 0, 0, 1, -1,  0,  0},
          {0, 0, 0, 0, 0,  1, -1,  0},
          {0, 0, 0, 0, 0,  0,  1, -1}};
        
      }; // Measure
      
      DriverPos = {0, 0, 0, 0, 0, 0};
      DriverVel = {0, 0, 0, 0, 0, 0};
      Reaction.Type = {Off,Off,Off, Off,Off,Off};
      
    }; // CervicalRotationRhythmDrv

If you can change the ‘Coef’ values in the AnyKinMeasureLinComb objects, you can implement a different set of joint angle distribution.

  1. This question seems to be already answered in the other post:
    http://forum.anyscript.org/showthread.php?p=20042#post20042

Best regards,
Moonki