[38ba34]: / Body / AAUHuman / Hand / Thumb.any

Download this file

568 lines (443 with data), 19.5 kB

 
AnyFolder Seg={
  AnySeg DistalPhalanx={
    Mass=..Mass4;
    Jii={0,0,0};
    r0= .ProximalPhalanx.IPFlexionExtensionAxis.sRel*.ProximalPhalanx.Axes0'+.ProximalPhalanx.r0-IPFlexionExtensionAxis.sRel*Axes0';
    
    Axes0 =.ProximalPhalanx.Axes0*
    IPFlexionExtensionAxis.ARel*
    RotMat((pi/180)*..JntPos.DIPFlexion,z)*
    IPFlexionExtensionAxis.ARel';
    
    
    
    AnyRefNode EllipsoidNode={
      AnySurfEllipsoid Ellipsoid={
        AnyVar BoneLength= vnorm(..ProximalJointSurfaceNode.sRel-..DistalJointSurfaceNode.sRel,2);
        Radius =..Scale*{0.005,0,0.005}+{0,a,0}; //the bonelength is already scaled..
        //definition of focus points for the ellipsoid these are used for defining contact
        AnyVar a =BoneLength/2;
        AnyVar c = sqrt(Radius[1]^2-Radius[0]^2);   //distance for center of ellipsoid to focus point
        //AnyDrawParamSurf drw ={ RGB=...BoneSurf.RGB; Opacity = ........BonesOpacity.Hand;};
      };
      //definition of focus points
      AnyRefNode F1 ={      sRel={0,.Ellipsoid.c,0};    };
      AnyRefNode F2 ={      sRel={0,-.Ellipsoid.c,0};    };      
    };
    
    AnyDrawSurf  BoneSurf = {  
      RGB=Main.DrawSettings.Colors.Segments;
      FileName = "DistalPhalanx1";
      ScaleXYZ=.Scale*{1,1,......Sign*1};
      Opacity = ......BonesOpacity.Hand;
    };
    
    AnyVar StdSegmentLength= 0.0308;// unscaled segment length
    AnyVar Scale= ...SegmentLengthTable[0][3]/StdSegmentLength;

    AnyRefNode ProximalJointNode={
      sRel=.Scale*{0.0,0.012+0,......Sign*0};
      //        AnyDrawRefFrame drw={        ScaleXYZ={0.05,0.05,0.05}; RGB={1,0,0};      };
    };
    
    AnyRefNode ProximalJointSurfaceNode={
      sRel=.Scale*{0.0,0.008,......Sign*0};
      //        AnyDrawRefFrame drw={        ScaleXYZ={0.05,0.05,0.05}; RGB={1,0,0};      };
    };

    //Na
    AnyRefNode DistalJointSurfaceNode={
      sRel=.Scale*{0.0,-0.01,......Sign*0};
      //        AnyDrawRefFrame drw={        ScaleXYZ={0.05,0.05,0.05}; RGB={1,0,0};      };
      
    };
    //Flexion extension axis for Interphalangeal joint
    AnyRefNode IPFlexionExtensionAxis={
      
      sRel=.Scale*{0,0.0132,......Sign*0};
      ARel=RotMat(......Sign*-(90-83)*pi/180,x);
      //        AnyDrawRefFrame drw={};
    };
    
    
    
  }; //DistalPhalanx3 Seg definition (Finger's tip)
  
  
  
  AnySeg ProximalPhalanx={
    Mass=..Mass2;
    Jii={0,0,0};
    
    //    AnyDrawRefFrame drw={};
    r0=.MCPJointSeg.r0+.MCPJointSeg.AbductionAdductionAxis.sRel*.MCPJointSeg.Axes0'-MCPAbductionAdductionAxis.sRel*Axes0';
    Axes0=.MCPJointSeg.Axes0*.MCPJointSeg.AbductionAdductionAxis.ARel*
    RotMat((.....Sign*pi/180)*..JntPos.MCPDeviation,x)*MCPAbductionAdductionAxis.ARel';
    
    
    AnyRefNode EllipsoidNode={
      
      AnySurfEllipsoid Ellipsoid={
        AnyVar BoneLength= vnorm(..ProximalJointSurfaceNode.sRel-..DistalJointNode.sRel,2);
        Radius =..Scale*{0.006,0,0.006}+{0,a,0}; //the bonelength is already scaled..
        //definition of focus points for the ellipsoid these are used for defining contact
        AnyVar a =BoneLength/2;
        AnyVar c = sqrt(Radius[1]^2-Radius[0]^2);   //distance for center of ellipsoid to focus point
        
        //AnyDrawParamSurf drw ={ RGB=...BoneSurf.RGB; Opacity = ........BonesOpacity.Hand;};
      };
      //definition of focus points
      AnyRefNode F1 ={      sRel={0,.Ellipsoid.c,0};    };
      AnyRefNode F2 ={      sRel={0,-.Ellipsoid.c,0};    };      
    };
    
    AnyVar StdSegmentLength= 0.0489;// unscaled segment length
    AnyVar Scale= ...SegmentLengthTable[0][1]/ StdSegmentLength;
    
    
    AnyDrawSurf  BoneSurf = {   
      RGB=Main.DrawSettings.Colors.Segments;
      
      FileName = "ProximalPhalanx1"; 
      ScaleXYZ=.Scale*{1,1,......Sign*1};
      Opacity = ......BonesOpacity.Hand;
    };
    
    //AnyVar Length=0.1;//.MiddlePhalanx.O2O3*1.608;
    //O6
    AnyRefNode ProximalJointNode={
      sRel=.Scale*{0.0,0.019,......Sign*0};
      //        AnyDrawRefFrame drw={        ScaleXYZ={0.05,0.05,0.05}; RGB={1,0,0};      };
    };
    //O5
    AnyRefNode ProximalJointSurfaceNode={
      sRel=.Scale*{0.0,0.015,......Sign*0};
      //        AnyDrawRefFrame drw={        ScaleXYZ={0.05,0.05,0.05}; RGB={1,0,0};      };
    };
    //O4
    AnyRefNode DistalJointNode={
      sRel=.Scale*{0.00,-0.015,......Sign*0};
      //                AnyDrawRefFrame drw={        ScaleXYZ={0.05,0.05,0.05}; RGB={1,0,0};      };
    };
    AnyRefNode DistalJointSurfaceNode={
      sRel=.Scale*{0.00,-0.017,......Sign*0};
      //                AnyDrawRefFrame drw={        ScaleXYZ={0.05,0.05,0.05}; RGB={1,0,0};      };
    };
    
    //This is the Abduction adduction axis for the MCP joint
    AnyRefNode MCPAbductionAdductionAxis={
      sRel=.Scale*{0.00,0.02172,......Sign*0.000}; 
      ARel=RotMat(-0.175,z)*RotMat(......Sign*-0.087,y); //these numbers are taken from measures...
      //AnyDrawRefFrame drw={RGB={1,1,1};ScaleXYZ={0.13,0.131,0.13};};
    };
    
    //Bone lenght
    AnyVar BL=ProximalJointSurfaceNode.sRel[1]-DistalJointSurfaceNode.sRel[1];
    
    //Flexion extension axis for Interphalangeal joint
    AnyRefNode IPFlexionExtensionAxis={
      
      sRel=.ProximalJointSurfaceNode.sRel-{0,0.9*.BL,......Sign*0};
      ARel=RotMat(......Sign*-(90-83)*pi/180,x);
      //        AnyDrawRefFrame drw={};
    };
    
  }; //ProximalPhalanx Seg definition (Thumb Middle part)
  
  AnySeg Metacarpal={
    Mass=..Mass1;
    Jii={0,0,0};
  //      AnyDrawRefFrame drw={ScaleXYZ={1,1,1}*0.15;};
    r0=.CMCJointSeg.r0 +.CMCJointSeg.AbductionAdductionJointNode.sRel*.CMCJointSeg.Axes0'+-CMCAbductionAdductionAxis.sRel*Axes0';
     
//    Axes0=.CMCJointSeg.Axes0'*.CMCJointSeg.AbductionAdductionJointNode.ARel*
//    RotMat((....Sign*pi/180)*..JntPos.CMCDeviation,x)*CMCAbductionAdductionAxis.ARel';
    
   Axes0 =  ...Carpals.Axes0*...Carpals.CMC1.ARel* RotMat((pi/180)*..JntPos.CMCFlexion,z)*RotMat((.....Sign*pi/180)*..JntPos.CMCDeviation,x);

   
    AnyRefNode EllipsoidNode={
      
      AnySurfEllipsoid Ellipsoid={
        AnyVar BoneLength= vnorm(..ProximalJointNode.sRel-..DistalJointNode.sRel,2);
        Radius =..Scale*{0.006,0,0.006}+{0,a,0}; //the bonelength is already scaled..
        //definition of focus points for the ellipsoid these are used for defining contact
        AnyVar a =BoneLength/2;
        AnyVar c = sqrt(Radius[1]^2-Radius[0]^2);   //distance for center of ellipsoid to focus point
        
        //AnyDrawParamSurf drw ={ RGB=...BoneSurf.RGB; Opacity = ........BonesOpacity.Hand;};
      };
      //definition of focus points
      AnyRefNode F1 ={      sRel={0,.Ellipsoid.c,0};    };
      AnyRefNode F2 ={      sRel={0,-.Ellipsoid.c,0};    };      
    };
    
    
    AnyVar StdSegmentLength= 0.023;// unscaled segment length
    AnyVar Scale= ...SegmentLengthTable[0][0]/StdSegmentLength;
    
    AnyDrawSurf  BoneSurf = {  
      RGB=Main.DrawSettings.Colors.Segments;
      
      FileName = "MetacarpalBase1";
      ScaleXYZ=.Scale*{1,1,......Sign*1};
      Opacity = ......BonesOpacity.Hand;
    };
    
    AnyRefNode ProximalJointNode={
      sRel=.Scale*{0.00,0.023+0.005,......Sign*0};
      //        AnyDrawRefFrame drw={        ScaleXYZ={0.05,0.05,0.05}; RGB={1,0,0};      };
    };
    
    AnyRefNode ProximalSurfaceNode={
      sRel=.Scale*{-0.004,0.023,......Sign*0};
      //        AnyDrawRefFrame drw={        ScaleXYZ={0.05,0.05,0.05}; RGB={1,0,0};      };
    };
    
    //node on the ulna side of the bone used onluy for the location of the abduction/adduction axis
    AnyRefNode ProximalSurfaceUlnaSide={
      sRel=.Scale*{-0.00,0.02,......Sign*-0.006};
      //        AnyDrawRefFrame drw={        ScaleXYZ={0.015,0.015,0.015}; RGB={1,0,0};      };
    };
    
    //node on the ulna side of the bone used onluy for the location of the abduction/adduction axis
    AnyRefNode ProximalSurfaceRadialSide={
      sRel=.Scale*{-0.00,0.02,......Sign*0.006};
      //        AnyDrawRefFrame drw={        ScaleXYZ={0.015,0.015,0.015}; RGB={1,0,0};      };
    };
    
    
    
    //06
    AnyRefNode DistalJointNode={
      sRel=.Scale*{0.00,-0.021,......Sign*0};
      //        AnyDrawRefFrame drw={           ScaleXYZ={0.05,0.05,0.05}; RGB={1,1,0};      };
    };
    
    AnyRefNode DistalSurfaceNode={
      sRel=.Scale*{0.00,-0.025,......Sign*0};
      //        AnyDrawRefFrame drw={    ScaleXYZ={0.15,0.15,0.15}; RGB={1,1,0};      };
    };
    
    
    //BoneLength 
    AnyVar BL=vnorm((DistalSurfaceNode.sRel[1]-ProximalSurfaceNode.sRel[1]),2);
    
    //BoneWidth 
    AnyVar T=vnorm((ProximalSurfaceRadialSide.sRel[2]-ProximalSurfaceUlnaSide.sRel[2]),2);
    
    
    AnyRefNode CMCAbductionAdductionAxis={
      
      sRel=.ProximalSurfaceNode.sRel-{0,0.12*.BL,......Sign*0.595*.T+.ProximalSurfaceUlnaSide.sRel[2]};//hollister1992 fig. 5
           
      ARel=RotMat((-90+86)*pi/180,z)*RotMat(......Sign*(90-78.3)*pi/180,y); //Hollister1992 fig.5 
      
//              AnyDrawRefFrame drw={
//                ScaleXYZ={0.15,0.15,0.15}; RGB={1,1,1};     
//              };
      
    };
    
    
    //Definition of MCP Flexion extension axis    using Hollister1995 fig 2b     
    AnyRefNode DistalDorsalNode = {
      sRel=.DistalSurfaceNode.sRel+.Scale*{-0.005,0,......Sign*0};
      //AnyDrawRefFrame drw={};
    };
    
    AnyRefNode DistalVolarNode = {
      sRel=.DistalSurfaceNode.sRel+.Scale*{0.006,0,......Sign*0};
      //AnyDrawRefFrame drw={};
    };
    
    AnyVar TDistal=vnorm(DistalVolarNode.sRel-DistalDorsalNode.sRel,2);
    
    
    AnyRefNode MCPFlexionExtensionAxis={
      
      sRel={.DistalDorsalNode.sRel[0]+0.44*.TDistal,0.10*.BL+.DistalSurfaceNode.sRel[1],......Sign*0};//hollister1992 fig. 2b and table 1
      
      ARel=RotMat(......Sign*(-90+101)*pi/180,x); //Hollister1995 fig.2b 
      
      //AnyDrawRefFrame drw={
      //        ScaleXYZ={0.05,0.05,0.05}; RGB={1,1,1};     
      //      };
    };
    
  }; //Metacarpal seg definition (Thumb's base)
  
  //this is segment connects the flexion and the abduction/adduction axis in the CMC joint.
  AnySeg CMCJointSeg ={
    //AnyDrawRefFrame drw={ScaleXYZ={0.19,0.19,0.19};RGB={1,0,0};};
   // AnyDrawRefFrame drws = {RGB= {1,0,0};ScaleXYZ={1,1,1}*0.15;};

    r0= ...Carpals.CMC1.sRel* ...Carpals.Axes0'+...Carpals.r0;
    Axes0 = ...Carpals.Axes0*...Carpals.CMC1.ARel* RotMat((pi/180)*..JntPos.CMCFlexion,z);
   
    //    r0= .Metacarpal.r0- .Metacarpal.MCPFlexionExtensionAxis.sRel*.Metacarpal.Axes0';
    //    Axes0 =.Metacarpal.Axes0*.Metacarpal.MCPFlexionExtensionAxis.ARel;
    //
    Mass=1e-5;
    Jii={0,0,0};
    AnyRefNode FlexionExtensionJointNode={
      
    };
    
    AnyRefNode AbductionAdductionJointNode={
      sRel=..Metacarpal.Scale*{-0.004000001, -0.01076, ......Sign*-0.00114};
      ARel=RotMat(-0.06981316,z)*RotMat(......Sign*0.2042035,y);
     // AnyDrawRefFrame drw={ScaleXYZ={0.1,0.1,0.1};};

    };
  };
  
  // These two folling measured was used to obtain the position and orientation of the 
  // AbductionAdductionJointNode for a neutral position
  //  AnyKinLinear lin={
  //    Ref=0;
  //    AnyRefNode &ref1=.CMCJointSeg.FlexionExtensionJointNode;
  //    
  //    AnyRefNode &ref2=.Metacarpal.CMCAbductionAdductionAxis;
  //    
  //  };
  //  AnyKinRotational rot={
  //    Ref=0;
  //    AnyRefNode &ref1=.CMCJointSeg.FlexionExtensionJointNode;
  //    
  //    AnyRefNode &ref2=.Metacarpal.CMCAbductionAdductionAxis;
  //    Type=RotAxesAngles;
  //  };
  
  
  
  
  
  //This is segment connects the flexion and the abduction/adduction axis in the CMC joint
  //Definition of MCP abduction adduction axis  using Hollister1995 fig 2c     
  //this axis is positioned wrt to metacarpal bone but moves with proximal phalanx 
  //the positioning is done with the MCP flexion extenion in neutral posiotion
  
  AnySeg MCPJointSeg ={
    
    r0= .Metacarpal.r0+.Metacarpal.MCPFlexionExtensionAxis.sRel*.Metacarpal.Axes0'-FlexionExtensionAxis.sRel;
    Axes0 =.Metacarpal.Axes0*.Metacarpal.MCPFlexionExtensionAxis.ARel*
    RotMat((pi/180)*..JntPos.MCPFlexion,z)*FlexionExtensionAxis.ARel';
    
    Mass=1e-5;
    Jii={0,0,0};
    AnyRefNode FlexionExtensionAxis={
      ARel=RotMat(......Sign*(-90+101)*pi/180,x); //Hollister1995 fig.2b  Rotate back again so the finger remains straight 
      //this means that with flexion extension in neutral posiotion the coordinate system of this segment is 
      //allignet with metacarpal bone
      
    };
    
    AnyRefNode AbductionAdductionAxis={
      //for the y position subtract the y position used by the flexion extension axis 
      sRel=..Metacarpal.Scale*{0,(0.87-0.83),0}*..Metacarpal.BL+{0,0,......Sign*0};//hollister1995 fig. 2a and 2b and table 1 
      ARel=RotMat(-(90-80)*pi/180,z)*RotMat(......Sign*-5*pi/180,y); //Hollister1995 fig.c 
      
      //AnyDrawRefFrame drw={
      //  ScaleXYZ={0.05,0.05,0.05}; RGB={0,0,0};     
      //};
    };
  };
  
  //  // These two folling measured was used to obtain the position and orientation of the 
  //  // AbductionAdductionJointNode for a neutral position
//    AnyKinLinear lin={
//      Ref=0;
//      AnyRefNode &ref2=.ProximalPhalanx;
//      
//      AnyRefNode &ref1=.MCPJointSeg.AbductionAdductionAxis;
//      
//    };
//    AnyKinRotational rot={
//      Ref=0;
//      AnyRefNode &ref2=.ProximalPhalanx;
//      
//      AnyRefNode &ref1=.MCPJointSeg.AbductionAdductionAxis;
//      Type=RotAxesAngles;
//    };
//  //  
//  
  
  // These two folling measured was used to obtain the position and orientation of the 
  // AbductionAdductionJointNode for a neutral position
  AnyKinLinear lin={
    Ref=0;
    AnySeg &ref2=.DistalPhalanx;
    
    AnyRefNode &ref1=.ProximalPhalanx.IPFlexionExtensionAxis;
    
  };
  AnyKinRotational rot={
    AnySeg &ref2=.ProximalPhalanx;
    AnyRefNode &ref1=.ProximalPhalanx.IPFlexionExtensionAxis;
    Type=RotAxesAngles;
  };
  
}; //Segs




AnyFolder Jnt ={
  
  //    //Carpometacarpal Flexion joint  
  //    AnyUniversalJoint CMC={
  //      
  //      AnyRefNode &ref1=...Carpals.CMC1;
  //      AnyRefNode &ref2=..Seg.Metacarpal.ProximalJointNode;
  //      Axis1=z;
  //      Axis2=x;
  //      
  //    };
  
  //    AnyKinEqSimpleDriver CMCdriver ={
  //    AnyRevoluteJoint &ref=.CMCFlexion;
  //    DriverPos={0};
  //    DriverVel={0};
  // 
  //    
  //    };
  AnyRevoluteJoint CMCFlexion={
    
    AnyRefNode &ref1=...Carpals.CMC1;
    
    AnyRefNode &ref2=..Seg.CMCJointSeg.FlexionExtensionJointNode;
    //
//        ref1={AnyDrawRefFrame drw= {};};
//       ref2={AnyDrawRefFrame drw= {};};
    Axis=z;
    #include "DrawJointAxisZ.any"
  };
  
  
  
  // Carpometacarpal abduction adduction joint
  AnyRevoluteJoint CMCAbduction={
    AnyRefNode &ref1=..Seg.CMCJointSeg.AbductionAdductionJointNode; //oMetacarpal.ProximalJointNode;
    AnyRefNode &ref2=..Seg.Metacarpal.CMCAbductionAdductionAxis;
      //ref1={AnyDrawRefFrame drw3={RGB={1,0,1};};};  
     //ref2={AnyDrawRefFrame drw= {};};
    Axis=x;
    #include "DrawJointAxisX.any"
  };
  
//        //Metacarpophalangeal joint
//        AnyRevoluteJoint MCP={
//          AnyRefNode &ref1=..Seg.Metacarpal.DistalJointNode;
//          AnyRefNode &ref2=..Seg.ProximalPhalanx.ProximalJointNode;
//          Axis=z;
//        };
  //      

  //Metacarpophalangeal joint flexion extension (along the blue axis)
  AnyRevoluteJoint MCPFlexion={
    AnyRefNode &ref1=..Seg.Metacarpal.MCPFlexionExtensionAxis;
    AnyRefNode &ref2=..Seg.MCPJointSeg.FlexionExtensionAxis;
    Axis=z;
    #include "DrawJointAxisZ.any"
    //ref1={AnyDrawRefFrame drw= {};};
      // ref2={AnyDrawRefFrame drw= {};};

    
  };
  
  
  //Metacarpophalangeal joint abduction adduction (along the black axis)
  //MCP joint is at the middle of thumb
  AnyRevoluteJoint MCPAbduction={
    AnyRefNode &ref1=..Seg.MCPJointSeg.AbductionAdductionAxis;
    AnyRefNode &ref2=..Seg.ProximalPhalanx.MCPAbductionAdductionAxis;
    Axis=x;
    #include "DrawJointAxisX.any"
  };

  //Distalinterphalangeal joint
  AnyRevoluteJoint DIP={
    AnyRefNode &ref1=..Seg.ProximalPhalanx.IPFlexionExtensionAxis;
    AnyRefNode &ref2=..Seg.DistalPhalanx.IPFlexionExtensionAxis;
    Axis=z;
    #include "DrawJointAxisZ.any"
  };
}; //jnt  


// Muscles Definition of the Thumb:
AnyFolder JntMus = {
  
  //Two muscles for the CMC joint - Flexion/Extension motion (base of thumb):
  AnyMuscleGeneric CMCflexion = {
    AnyMuscleModel MusMdl = {
      F0 =  ...CMCMusForceFlex;
      Vol0 = 1e-6;
    };
    AnyRevoluteJoint &jnt = ..Jnt.CMCFlexion;
    Type = NonNegative;
  };
  
  AnyMuscleGeneric CMCextension = {
    AnyMuscleModel MusMdl = {
      F0 = ...CMCMusForceExten;
      Vol0 = 1e-6;
    };
    AnyRevoluteJoint &jnt = ..Jnt.CMCFlexion;
    Type = NonPositive;
  };
    //Two muscles for the CMC joint - Abduction/Adduction motion (base of thumb):
  AnyMuscleGeneric CMCAdduction = {
    AnyMuscleModel MusMdl = {
      F0 = ...CMCMusForceAdduc;
      Vol0 = 1e-6;      
    };
    AnyRevoluteJoint &jnt = ..Jnt.CMCAbduction;
    Type = NonNegative;
  };
  
  AnyMuscleGeneric CMCAbduction = {
    AnyMuscleModel MusMdl = {
      F0 = ...CMCMusForceAbduc;
      Vol0 = 1e-6;      
    };
    AnyRevoluteJoint &jnt = ..Jnt.CMCAbduction;
    Type = NonPositive;
  };
    //Two muscles for the MCP joint - Flexion/Extension motion (base of thumb):
  AnyMuscleGeneric MCPflexion = {
    AnyMuscleModel MusMdl = {
      F0 = ...MCPMusForceFlex;
      Vol0 = 1e-6;      
    };
    AnyRevoluteJoint &jnt = ..Jnt.MCPFlexion;
    Type = NonNegative;
  };
  
  AnyMuscleGeneric MCPextension = {
    AnyMuscleModel MusMdl = {
      F0 = ...MCPMusForceExten;
      Vol0 = 1e-6;      
    };
    AnyRevoluteJoint &jnt = ..Jnt.MCPFlexion;
    Type = NonPositive;
  };
  //Two muscles for the MCP joint  - Abduction/Adduction motion (middle of thumb):
  AnyMuscleGeneric MCPAdduction = {
    AnyMuscleModel MusMdl = {
      F0 = ...MCPMusForceAdduc;
      Vol0 = 1e-6;      
    };
    AnyRevoluteJoint &jnt = ..Jnt.MCPAbduction;
    Type = NonNegative;
  };
  
  AnyMuscleGeneric MCPAbduction = {
    AnyMuscleModel MusMdl = {
      F0 = ...MCPMusForceAbduc;
      Vol0 = 1e-6;      
    };
    AnyRevoluteJoint &jnt = ..Jnt.MCPAbduction;
    Type = NonPositive;
  };
  
  //Two muscles for the DIP joint - Flexion/Extension motion (base of thumb):
  AnyMuscleGeneric DIPflexion = {
    AnyMuscleModel MusMdl = {
      F0 = ...DIPMusForceFlex;
      Vol0 = 1e-6;
    };
    AnyRevoluteJoint &jnt = ..Jnt.DIP;
    Type = NonNegative;
  };
  
  AnyMuscleGeneric DIPextension = {
    AnyMuscleModel MusMdl = {
      F0 = ...DIPMusForceExten;
      Vol0 = 1e-6;      
    };
    AnyRevoluteJoint &jnt = ..Jnt.DIP;
    Type = NonPositive;
  };
  
  
}; // End muscles definition