[770c98]: / Application / Examples / MaxForceNeckModel / Model / JointsAndDrivers.any

Download this file

223 lines (181 with data), 7.5 kB

/* Definition of Driver for the segments in the lumbar spine. From PelvisL5 to T12L1

Mark de Zee
*/

AnyFolder &RefHM = Main.HumanModel.BodyModel;

AnyFolder Joints={
  AnyRevoluteJoint GroundPelvisJnt = {
    Axis = z;
    AnyRefNode &GroundNode = Main.Model.EnvironmentModel.GlobalRef.GroundNode;
    AnyRefNode &PelvisNode = ..RefHM.Trunk.SegmentsLumbar.PelvisSeg.GroundPelvisJntNode;
  };
};


AnyFolder DriversLumbar = {
  
  AnyKinEqSimpleDriver GroundPelvisJntDriver = {
    AnyRevoluteJoint &GroundPelvisJoint = ..Joints.GroundPelvisJnt;
    DriverPos = {0.0*pi};
    DriverVel = {0.0};
    Reaction.Type = {On};
  };
  
  //Thorax pelvis rotation driver
  AnyKinEqSimpleDriver PostureDriver ={
    AnyKinMeasure& Ref2 = ..RefHM.Interface.Trunk.PelvisThoraxLateralBending;        
    AnyKinMeasure& Ref3 = ..RefHM.Interface.Trunk.PelvisThoraxRotation;   
    AnyKinMeasure& Ref1 = ..RefHM.Interface.Trunk.PelvisThoraxExtension;
    
    DriverPos = pi/180*{0.0,0.0,0.0};
    DriverVel = pi/180*{0.0,0.0,0.0};
    Reaction.Type = {Off,Off,Off};  
  };
  

/// These reaction forces are supporting the lumbar spine.
/// This is necessary, because there are no muscles.
  AnyReacForce SacrumPelvisReaction = {
    AnyJoint &u2 = ..RefHM.Trunk.JointsLumbar.L5SacrumJnt;
    AnyJoint &u3 = ..RefHM.Trunk.JointsLumbar.L4L5Jnt;
    AnyJoint &u4 = ..RefHM.Trunk.JointsLumbar.L3L4Jnt;
    AnyJoint &u5 = ..RefHM.Trunk.JointsLumbar.L2L3Jnt;
    AnyJoint &u6 = ..RefHM.Trunk.JointsLumbar.L1L2Jnt;
    AnyJoint &u7 = ..RefHM.Trunk.JointsLumbar.T12L1Jnt;
  };
    
};

AnyFolder DriversCervical = {
  
  AnyKinEqSimpleDriver CervicalDriver ={
    AnyKinMeasure& Ref1 = ..RefHM.Interface.Trunk.SkullThoraxFlexion;  
    AnyKinMeasure& Ref2 = ..RefHM.Interface.Trunk.SkullThoraxLateralBending;
    AnyKinMeasure& Ref3 = ..RefHM.Interface.Trunk.SkullThoraxRotation;
    DriverPos = pi/180*{0, 0, 0};
    DriverVel = pi/180*{0, 0, 0};
    Reaction.Type = {Off, Off, Off};  
  };  
  
};

AnyFolder DriversArms={
  
  // Aliases for convenient referencing
  AnyFolder &JntPos=..Mannequin.Posture;  
  AnyFolder &JntVel=..Mannequin.PostureVel;  
  
  
  //Sterno clavicular joint driver
  AnyKinEqSimpleDriver SCDriverRight ={
    AnyKinMeasure& ref1 =..RefHM.Interface.Right.SternoClavicularProtraction;
    AnyKinMeasure& ref2 =..RefHM.Interface.Right.SternoClavicularElevation;
    DriverPos = pi/180*{
      .JntPos.Right.SternoClavicularProtraction,
      .JntPos.Right.SternoClavicularElevation
    };
    DriverVel = {
      .JntVel.Right.SternoClavicularProtraction,
      .JntVel.Right.SternoClavicularElevation
    };
    Reaction.Type={Off,Off};
  };
  AnyReacForce SCReacForceRight = {
    AnyKinMeasure& ref1 =..RefHM.Interface.Right.SternoClavicularProtraction;
    AnyKinMeasure& ref2 =..RefHM.Interface.Right.SternoClavicularElevation;
    AnyKinMeasure& ref3 =..RefHM.Interface.Right.SternoClavicularAxialRotation;
  };
  
  
  //Glenohumeral joint 
  AnyKinEqSimpleDriver GHDriverRight={
    AnyKinMeasure& ref1 =..RefHM.Interface.Right.GlenohumeralAbduction;
    AnyKinMeasure& ref2 =..RefHM.Interface.Right.GlenohumeralFlexion;
    AnyKinMeasure& ref3 =..RefHM.Interface.Right.GlenohumeralExternalRotation;
    
    DriverPos=pi/180*{
      .JntPos.Right.GlenohumeralAbduction,  //GH joint
      .JntPos.Right.GlenohumeralFlexion,  //GH joint
      .JntPos.Right.GlenohumeralExternalRotation  //GH joint
    };
    DriverVel = pi/180*{
      .JntVel.Right.GlenohumeralAbduction,  //GH joint
      .JntVel.Right.GlenohumeralFlexion,  //GH joint
      .JntVel.Right.GlenohumeralExternalRotation  //GH joint
    };    
    //Reaction.Type={Off,Off,Off};
    Reaction.Type={On,On,On};
  };
  
  
  //Elbow flexion driver  
  AnyKinEqSimpleDriver ElbowFlexionDriverRight={
    AnyKinMeasureOrg  &Elbow =..RefHM.Interface.Right.ElbowFlexion;
    DriverPos=pi/180*{.JntPos.Right.ElbowFlexion};  
    DriverVel = pi/180*{.JntVel.Right.ElbowFlexion};  
    Reaction.Type={On};
  };
  
  //Elbow pronation driver
  AnyKinEqSimpleDriver ElbowPronationDriverRight={
    AnyKinMeasure& Elbow =..RefHM.Interface.Right.ElbowPronation;
    DriverPos = pi/180*{.JntPos.Right.ElbowPronation };  
    
    DriverVel=pi/180*{.JntVel.Right.ElbowPronation };  
    Reaction.Type={On};
  };
  
  //Wrist driver 
  AnyKinEqSimpleDriver WristDriverRight ={
    AnyKinMeasure& ref1 =..RefHM.Interface.Right.WristFlexion;
    AnyKinMeasure& ref2 =..RefHM.Interface.Right.WristAbduction;
    DriverPos = pi/180*{
      .JntPos.Right.WristFlexion,
      .JntPos.Right.WristAbduction
    };
    
    DriverVel = pi/180*{
      .JntVel.Right.WristFlexion,
      .JntVel.Right.WristAbduction};
    Reaction.Type={On,On};
  };
  
  
  //Sterno clavicular joint driver
  AnyKinEqSimpleDriver SCDriverLeft ={
    AnyKinMeasure& ref1 =..RefHM.Interface.Left.SternoClavicularProtraction;
    AnyKinMeasure& ref2 =..RefHM.Interface.Left.SternoClavicularElevation;
    DriverPos = pi/180*{
      .JntPos.Left.SternoClavicularProtraction,
      .JntPos.Left.SternoClavicularElevation
    };
    DriverVel = {
      .JntVel.Left.SternoClavicularProtraction,
      .JntVel.Left.SternoClavicularElevation
    };
    Reaction.Type={Off,Off};
  };
  
  AnyReacForce SCReacForceLeft= {
    AnyKinMeasure& ref1 =..RefHM.Interface.Left.SternoClavicularProtraction;
    AnyKinMeasure& ref2 =..RefHM.Interface.Left.SternoClavicularElevation;
    AnyKinMeasure& ref3 =..RefHM.Interface.Left.SternoClavicularAxialRotation;
  };
  
  
  //Glenohumeral joint 
  AnyKinEqSimpleDriver GHDriverLeft={
    AnyKinMeasure& ref1 =..RefHM.Interface.Left.GlenohumeralAbduction;
    AnyKinMeasure& ref2 =..RefHM.Interface.Left.GlenohumeralFlexion;
    AnyKinMeasure& ref3 =..RefHM.Interface.Left.GlenohumeralExternalRotation;
    
    DriverPos=pi/180*{
      .JntPos.Left.GlenohumeralAbduction,  //GH joint
      .JntPos.Left.GlenohumeralFlexion,  //GH joint
      .JntPos.Left.GlenohumeralExternalRotation  //GH joint
    };
    DriverVel = pi/180*{
      .JntVel.Left.GlenohumeralAbduction,  //GH joint
      .JntVel.Left.GlenohumeralFlexion,  //GH joint
      .JntVel.Left.GlenohumeralExternalRotation  //GH joint
    };    
    //Reaction.Type={Off,Off,Off};
    Reaction.Type={On,On,On};
  };
  
  
  //Elbow flexion driver  
  AnyKinEqSimpleDriver ElbowFlexionDriverLeft={
    AnyKinMeasureOrg  &Elbow =..RefHM.Interface.Left.ElbowFlexion;
    DriverPos=pi/180*{.JntPos.Left.ElbowFlexion};  
    DriverVel = pi/180*{.JntVel.Left.ElbowFlexion};  
    Reaction.Type={On};
  };
  
  //Elbow pronation driver
  AnyKinEqSimpleDriver ElbowPronationDriverLeft={
    AnyKinMeasure& Elbow =..RefHM.Interface.Left.ElbowPronation;
    DriverPos = pi/180*{.JntPos.Left.ElbowPronation };  
    
    DriverVel=pi/180*{.JntVel.Left.ElbowPronation };  
    Reaction.Type={On};
  };
  
  //Wrist driver 
  AnyKinEqSimpleDriver WristDriverLeft ={
    AnyKinMeasure& ref1 =..RefHM.Interface.Left.WristFlexion;
    AnyKinMeasure& ref2 =..RefHM.Interface.Left.WristAbduction;
    DriverPos = pi/180*{
      .JntPos.Left.WristFlexion,
      .JntPos.Left.WristAbduction
    };
    
    DriverVel = pi/180*{
      .JntVel.Left.WristFlexion,
      .JntVel.Left.WristAbduction};
    Reaction.Type={On,On};
  };
  
  
};