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

Download this file

330 lines (277 with data), 10.9 kB

/* ----------------------------------------------------------------
Drivers for the model:
----------------------------------------------------------------  */

// Spherical joints connecting the hands to the weight bar.
AnySphericalJoint rGloveWeight = {
  AnyRefFrame &Weight = Main.Model.EnvironmentModel.Weight.rhand;
  AnyRefFrame &Glove = Main.Model.BodyModel.Right.ShoulderArm.Seg.Glove;
};  

AnySphericalJoint lGloveWeight = {
  AnyRefFrame &Weight = Main.Model.EnvironmentModel.Weight.lhand;
  AnyRefFrame &Glove = Main.Model.BodyModel.Left.ShoulderArm.Seg.Glove;
};

// Additional support forces to the ground.
AnyReacForce ThoraxGround = {
  AnyKinLinear lin = {
    AnyRefFrame &Thorax = Main.Model.BodyModel.Trunk.SegmentsThorax.ThoraxSeg;
  };
};

AnyReacForce HeadGround = {
  AnyKinMeasureOrg Org = {
    AnyKinLinear lin = {
      AnyRefFrame &Head = Main.Model.BodyModel.Trunk.SegmentsCervicalSpine.SkullSeg;
      Ref = -1;
    };
    MeasureOrganizer = {1};
  };
};

AnyReacForce FeetGround = {
  AnyKinLinear rlin = {
    AnyRefFrame &rfoot = Main.Model.BodyModel.Right.Leg.Seg.Foot;
  };
  AnyKinLinear llin = {
    AnyRefFrame &rfoot = Main.Model.BodyModel.Left.Leg.Seg.Foot;
  };
};

AnyFolder Drivers = {
  
  // Aliases for convenient referencing
  AnyFolder &JntPos=..Mannequin.Posture;  
  AnyFolder &JntVel=..Mannequin.PostureVel;  
  
  AnyFolder &Thorax = ..BodyModel.Trunk.SegmentsThorax.ThoraxSeg;
  AnyFolder &ref=Main.Model.BodyModel.Trunk;
  
  
  // ************************************
  // Drivers for attaching the pelvis to the global reference system
  // ************************************  
  
  AnyKinEqSimpleDriver PelvisGroundDriver ={
    AnyKinLinear lin ={
      AnyRefFrame &ref1 =....EnvironmentModel.GlobalRef;
      AnyRefFrame &ref2 =....BodyModel.Trunk.SegmentsLumbar.PelvisSeg.AnatomicalFrameTrunk;
    };
    AnyKinRotational rot ={
      AnyRefFrame &ref1 =....EnvironmentModel.GlobalRef;
      AnyRefFrame &ref2 =....BodyModel.Trunk.SegmentsLumbar.PelvisSeg.AnatomicalFrameTrunk;
      Type=RotAxesAngles;
    };
    DriverPos={
      .JntPos.PelvisPosX,
      .JntPos.PelvisPosY,
      .JntPos.PelvisPosZ,
      pi/180*.JntPos.PelvisRotZ,
      pi/180*.JntPos.PelvisRotY,
      pi/180*.JntPos.PelvisRotX
    };
    DriverVel={
      .JntVel.PelvisPosX,
      .JntVel.PelvisPosY,
      .JntVel.PelvisPosZ,
      pi/180*.JntVel.PelvisRotX,
      pi/180*.JntVel.PelvisRotY,
      pi/180*.JntVel.PelvisRotZ
    };
    Reaction.Type={On,On,On,On,On,On};
  };
  
  
  // ************************************
  // Drivers for the spine
  // ************************************
  
  //Neck driver 
  AnyKinEqSimpleDriver NeckJntDriver = {
    AnyKinMeasure& lb = ...BodyModel.Interface.Trunk.SkullThoraxLateralBending;
    AnyKinMeasure& ar = ...BodyModel.Interface.Trunk.SkullThoraxRotation;
    AnyKinMeasure& fe = ...BodyModel.Interface.Trunk.SkullThoraxFlexion;
    DriverPos = pi/180*{.JntPos.NeckLateralBending, .JntPos.NeckRotation, -1*.JntPos.NeckExtension};
    DriverVel = pi/180*{.JntVel.NeckLateralBending, .JntVel.NeckRotation, -1*.JntVel.NeckExtension};
    Reaction.Type = {Off, Off, Off};
  };
  
  //Thorax pelvis rotation driver
  AnyKinEqSimpleDriver PostureDriver ={
    AnyKinMeasure& Ref2 = ...BodyModel.Interface.Trunk.PelvisThoraxLateralBending;        
    AnyKinMeasure& Ref3 = ...BodyModel.Interface.Trunk.PelvisThoraxRotation;   
    AnyKinMeasure& Ref1 = ...BodyModel.Interface.Trunk.PelvisThoraxExtension;
    
    DriverPos = pi/180*{
      .JntPos.PelvisThoraxLateralBending,
      .JntPos.PelvisThoraxRotation,
      .JntPos.PelvisThoraxExtension
    };
    DriverVel = pi/180*{
      .JntVel.PelvisThoraxLateralBending,
      .JntVel.PelvisThoraxRotation,
      .JntVel.PelvisThoraxExtension
    };
    Reaction.Type = {Off,Off,Off};  
  };  
  
  
  
  // ************************************
  // Drivers for the right arm
  // ************************************
  
  
  //Sterno clavicular joint driver
  AnyKinEqSimpleDriver SCDriverRight ={
    AnyKinMeasure& ref1 =...BodyModel.Interface.Right.SternoClavicularProtraction;
    AnyKinMeasure& ref2 =...BodyModel.Interface.Right.SternoClavicularElevation;
    DriverPos = pi/180*{
      .JntPos.Right.SternoClavicularProtraction,
      .JntPos.Right.SternoClavicularElevation
    };
    DriverVel = {
      .JntVel.Right.SternoClavicularProtraction,
      .JntVel.Right.SternoClavicularElevation
    };
    Reaction.Type={Off,Off};
  };
  
  
  // Glenohumeral joint. GH flexion and rotation are replaced by the connection
  // to the weight, and the same goes for elbow flexion.
  AnyKinEqSimpleDriver GHDriverRight={
    AnyKinMeasure& ref1 =...BodyModel.Interface.Right.GlenohumeralAbduction;
    
    DriverPos=pi/180*{
      .JntPos.Right.GlenohumeralAbduction  //GH joint
    };
    DriverVel = pi/180*{
      .JntVel.Right.GlenohumeralAbduction  //GH joint
    };
    Reaction.Type={Off};
  };
  
  //Elbow pronation driver
  AnyKinEqSimpleDriver ElbowPronationDriverRight={
    AnyKinMeasure& Elbow =...BodyModel.Interface.Right.ElbowPronation;
    DriverPos = pi/180*{.JntPos.Right.ElbowPronation };  
    
    DriverVel=pi/180*{.JntVel.Right.ElbowPronation };  
    Reaction.Type={Off};
  };
  
  //Wrist driver 
  AnyKinEqSimpleDriver WristDriverRight ={
    AnyKinMeasure& ref1 =...BodyModel.Interface.Right.WristFlexion;
    AnyKinMeasure& ref2 =...BodyModel.Interface.Right.WristAbduction;
    DriverPos = pi/180*{
      .JntPos.Right.WristFlexion,
      .JntPos.Right.WristAbduction
    };
    
    DriverVel = pi/180*{
      .JntVel.Right.WristFlexion,
      .JntVel.Right.WristAbduction};
    Reaction.Type={Off,Off};
  };
  
  
  
  // ************************************
  // Drivers for the left arm
  // ************************************
  
  //Sterno clavicular joint driver
  AnyKinEqSimpleDriver SCDriverLeft ={
    AnyKinMeasure& ref1 =...BodyModel.Interface.Left.SternoClavicularProtraction;
    AnyKinMeasure& ref2 =...BodyModel.Interface.Left.SternoClavicularElevation;
    
    DriverPos = pi/180*{
      .JntPos.Left.SternoClavicularProtraction,
      .JntPos.Left.SternoClavicularElevation
    };
    
    DriverVel = pi/180*{
      .JntVel.Left.SternoClavicularProtraction,
      .JntVel.Left.SternoClavicularElevation
    };
    
    Reaction.Type={Off,Off};
  };
  
  // Glenohumeral joint. GH flexion and rotation are replaced by the connection
  // to the weight, and the same goes for elbow flexion.
  AnyKinEqSimpleDriver GHDriverLeft={
    AnyKinMeasure& ref1 =...BodyModel.Interface.Left.GlenohumeralAbduction;
    DriverPos=pi/180*{
      .JntPos.Left.GlenohumeralAbduction  //GH joint
    };    
    DriverVel = pi/180*{
      .JntVel.Left.GlenohumeralAbduction  //GH joint
    };    
    Reaction.Type={Off};
  };
    
  //Elbow pronation driver 
  AnyKinEqSimpleDriver ElbowPSDriverLeft={
    AnyKinMeasure& Elbow =...BodyModel.Interface.Left.ElbowPronation;
    DriverPos= pi/180*{.JntPos.Left.ElbowPronation };  
    DriverVel = pi/180*{.JntVel.Left.ElbowPronation };  
    Reaction.Type={Off};
  };
  
  
  //Wrist driver
  AnyKinEqSimpleDriver WristDriverLeft ={
    AnyKinMeasure& ref1 =...BodyModel.Interface.Left.WristFlexion;
    AnyKinMeasure& ref2 =...BodyModel.Interface.Left.WristAbduction;
    DriverPos = pi/180*{
      .JntPos.Left.WristFlexion,
      .JntPos.Left.WristAbduction};
    
    DriverVel = pi/180*{
      .JntVel.Left.WristFlexion,
      .JntVel.Left.WristAbduction};
    Reaction.Type={Off,Off};
  };
  
  // ************************************
  // Drivers for the right leg
  // ************************************
  
  //Hip driver 
  AnyKinEqSimpleDriver HipDriverRight={
    AnyKinMeasure& ref1 =...BodyModel.Interface.Right.HipFlexion;
    AnyKinMeasure& ref2 =...BodyModel.Interface.Right.HipExternalRotation;
    AnyKinMeasure& ref3 =...BodyModel.Interface.Right.HipAbduction;
    DriverPos= pi/180*{
      .JntPos.Right.HipFlexion,
      .JntPos.Right.HipExternalRotation,
      .JntPos.Right.HipAbduction
    };    
    DriverVel = pi/180*{
      .JntVel.Right.HipFlexion,
      .JntVel.Right.HipExternalRotation,
      .JntVel.Right.HipAbduction
    };    
    Reaction.Type={Off,Off,Off};
    
  };
  
  //Knee driver
  AnyKinEqSimpleDriver KneeDriverRight={
    AnyKinMeasure& Knee = ...BodyModel.Interface.Right.KneeFlexion;
    DriverPos=pi/180*{.JntPos.Right.KneeFlexion};  
    DriverVel = pi/180*{.JntVel.Right.KneeFlexion};  
    Reaction.Type={Off};
  };
  
  //Ankle driver
  AnyKinEqSimpleDriver AnkleDriverRight={
    AnyKinMeasure& ref1=...BodyModel.Interface.Right.AnklePlantarFlexion;
    #if BM_LEG_MODEL == _LEG_MODEL_LEG_
    AnyKinMeasure& ref2=...BodyModel.Interface.Right.AnkleEversion;
    #else 
    AnyKinMeasure& ref2=...BodyModel.Interface.Right.SubTalarEversion;
    #endif
    DriverPos = pi/180*{.JntPos.Right.AnklePlantarFlexion,.JntPos.Right.SubTalarEversion};  
    DriverVel=pi/180*{.JntVel.Right.AnklePlantarFlexion,.JntVel.Right.SubTalarEversion};  
    
    Reaction.Type={Off,Off};
  };
  
  
  // ************************************
  // Drivers for the Left leg
  // ************************************
  
  //Left hip driver
  AnyKinEqSimpleDriver HipDriverLeft={
    AnyKinMeasure& ref1 =...BodyModel.Interface.Left.HipFlexion;
    AnyKinMeasure& ref2 =...BodyModel.Interface.Left.HipExternalRotation;
    AnyKinMeasure& ref3 =...BodyModel.Interface.Left.HipAbduction;
    DriverPos=pi/180*{
      .JntPos.Left.HipFlexion,
      .JntPos.Left.HipExternalRotation,
      .JntPos.Left.HipAbduction
    };    
    DriverVel = pi/180*{
      .JntVel.Left.HipFlexion,
      .JntVel.Left.HipExternalRotation,
      .JntVel.Left.HipAbduction
    };    
    Reaction.Type={Off,Off,Off};
  };
  
  //Knee driver
  AnyKinEqSimpleDriver KneeDriverLeft={
    AnyKinMeasure& Knee =...BodyModel.Interface.Left.KneeFlexion;
    DriverPos=pi/180*{      .JntPos.Left.KneeFlexion   };  
    DriverVel = pi/180*{      .JntVel.Left.KneeFlexion   };  
    Reaction.Type={Off};
  };
  
  //Ankle driver
  AnyKinEqSimpleDriver AnkleDriverLeft={
    AnyKinMeasure& ref1=...BodyModel.Interface.Left.AnklePlantarFlexion;
    #if BM_LEG_MODEL == _LEG_MODEL_LEG_
    AnyKinMeasure& ref2=...BodyModel.Interface.Left.AnkleEversion;
    #else 
    AnyKinMeasure& ref2=...BodyModel.Interface.Left.SubTalarEversion;
    #endif
    DriverPos = pi/180*{.JntPos.Left.AnklePlantarFlexion,.JntPos.Left.SubTalarEversion};  
    DriverVel=pi/180*{.JntVel.Left.AnklePlantarFlexion,.JntVel.Left.SubTalarEversion};  
    Reaction.Type={Off,Off};
  };
};//Drivers