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

Download this file

379 lines (346 with data), 11.3 kB

AnyFolder Drivers = 
{
  // Aliases for convenient referencing
  AnyFolder &RefHM = Main.Model.BodyModel;
    
  AnyFolder &JntPos= ..Mannequin.Posture;  
  AnyFolder &JntVel= ..Mannequin.PostureVel;  
  
  // ************************************
  // Drivers for the left & right legs
  // ************************************  
  
  AnyStdJoint Left_Foot_Connect = 
  {
    AnyRefFrame& base = Main.Model.FitnessMachine._ANY_INTERFACE_.Pedal___1____ANY_TOE2;
    AnyRefFrame& target = Main.Model.Human_RefNodes.Left_Toe_Node;
    //Constraints.Reaction.Type = {On, NonNegative, On, On, On, On};
    Constraints.Reaction.Type = {Off, Off, Off, Off, Off, Off};
  };

  AnyStdJoint Right_Foot_Connect = 
  {
    AnyRefFrame& base = Main.Model.FitnessMachine._ANY_INTERFACE_.Pedal___2____ANY_TOE2;
    AnyRefFrame& target = Main.Model.Human_RefNodes.Right_Toe_Node;
    //Constraints.Reaction.Type = {On, NonNegative, On, On, On, On};
    Constraints.Reaction.Type = {Off, Off, Off, Off, Off, Off};
  };  
  
//  AnyKinEqSimpleDriver HipAbduction_Rhythm_Driver = 
//  {
//    AnyKinMeasureLinComb lincomb = 
//    {
//      AnyKinMeasure& ref0 = ....HumanModel.Interface.Right.HipAbduction;
//      AnyKinMeasure& ref1 = ....HumanModel.Interface.Left.HipAbduction ;
//      Coef = {{1, -1}};
//      OutDim = 1;
//    };
//    DriverPos = {0.0};
//    DriverVel = {0.0};
//    Reaction.Type = {Off};
//  };

  AnyKinEqSimpleDriver HipExternalRotation_Rhythm_Driver = 
  {
    AnyKinMeasureLinComb lincomb = 
    {
      AnyKinMeasure& ref0 = ....BodyModel.Interface.Right.HipExternalRotation;
      AnyKinMeasure& ref1 = ....BodyModel.Interface.Left.HipExternalRotation ;
      Coef = {{1, -1}};
      OutDim = 1;
    };    
    DriverPos = {0.0};
    DriverVel = {0.0};
    Reaction.Type = {Off};
    };    
  
  AnyKinEqSimpleDriver KneeFlexion_Rhythm_Driver =
  {
    AnyKinMeasureLinComb limcomb = 
    {
      AnyKinMeasure& ref0 = ....BodyModel.Interface.Right.KneeFlexion ;
      AnyKinMeasure& ref1 = ....BodyModel.Interface.Left.KneeFlexion ;
      Coef = {{1, 1}};
      OutDim = 1 ;
    };
    DriverPos = pi/180*{90};
    DriverVel = {0.0};
    Reaction.Type={Off};
  };
  
  // ************************************
  // Drivers for the trunk
  // ************************************
    
//  AnyKinEqSimpleDriver Pelvis_Rot_Driver = 
//  {
//    AnyKinRotational rot = 
//    {
//      AnyRefFrame &Base = Main.Model.FitnessMachine._ANY_INTERFACE_.ANY_PELVIS;
//      AnyRefFrame &Target = Main.Model.Human_RefNodes.Pelvis_Node;       
//      Type = PlanarAngles ;
//      Axis1 = y;
//      Axis2 = z;
//      Axis3 = x;
//    };
//    MeasureOrganizer = {1, 2};
//    DriverPos = {0, 0};
//    DriverVel = {0, 0};
//    Reaction.Type = {Off, Off};
//  };
  
  AnyKinEqSimpleDriver Pelvis_RotX_Driver = 
  {
    AnyKinMeasure& ref = ...BodyModel.Interface.Trunk.PelvisRotX;
    DriverPos = pi/180*
    {
      .JntPos.PelvisRotX
    };    
    DriverVel = pi/180*
    {
      .JntVel.PelvisRotX
    };    
    Reaction.Type={Off};
  };

  AnyKinEqSimpleDriver Pelvis_RotZ_Driver = 
  {
    AnyKinMeasure& ref = ...BodyModel.Interface.Trunk.PelvisRotZ;
    DriverPos = pi/180*
    {
      .JntPos.PelvisRotZ
  };
    DriverVel = pi/180*
    {
      .JntVel.PelvisRotZ
    };    
    Reaction.Type = {Off};
  };  
  
  AnyKinEqSimpleDriver Human_Full_CoM_Z_Driver = 
  {
    AnyKinMeasureLinComb lincomb = 
    {
      AnyKinCoM& human_CoM = Main.Model.Human_CoM.CoM_Full;
      AnyKinLinear lin = 
      {
        AnyRefFrame& target =  Main.Model.FitnessMachine._ANY_INTERFACE_.ANY_PELVIS;
      };
      OutDim = 3;
      Coef = {{1,0,0,-1,0,0},{0,1,0,0,-1,0},{0,0,1,0,0,-1}}; 
    };
    MeasureOrganizer = {2};
    Reaction.Type = {Off}; 
    DriverPos = {0.0};
    DriverVel = {0.0};
  }; 
    
  AnyKinEqSimpleDriver Human_Full_CoM_X_Driver = 
  {
    AnyKinMeasureLinComb lincomb = 
    {
      AnyKinCoM& human_CoM = Main.Model.Human_CoM.CoM_Full;
      AnyKinLinear lin0 = 
      {
        AnyRefFrame& target =  Main.HumanModel.BodyModel.Right.Leg.Seg.Foot.SubTalarJoint;
      };
      AnyKinLinear lin1 = 
      {
        AnyRefFrame& target =  Main.HumanModel.BodyModel.Left.Leg.Seg.Foot.SubTalarJoint;
      };      
      OutDim = 3;
      Coef = 
      {
        {1,0,0,-0.5,0,0,-0.5,0,0},
        {0,1,0,0,-0.5,0,0,-0.5,0},
        {0,0,1,0,0,-0.5,0,0,-0.5}
      }; 
    };
    MeasureOrganizer = {0};
    Reaction.Type = {Off}; 
    DriverPos = {0.0};
    DriverVel = {0.0};
  };  

//  AnyKinEqSimpleDriver Human_CoM_Y_Driver = 
//  {
//    AnyKinMeasureLinComb lincomb = 
//    {
//      AnyKinCoM& human_CoM = Main.Model.Human_CoM.human_CoM;
//      AnyKinLinear lin = 
//      {
//        AnyRefFrame& target =  Main.Model.FitnessMachine._ANY_INTERFACE_.ANY_PELVIS;
//      };
//      OutDim = 3;
//      Coef = {{1,0,0,-1,0,0},{0,1,0,0,-1,0},{0,0,1,0,0,-1}}; 
//    };
//    MeasureOrganizer = {1};
//    Reaction.Type = {Off}; 
//    DriverPos = {0.3};
//    DriverVel = {0.0};
//  };     
  
//  AnyKinEqSimpleDriver Human_Upper_CoM_X_Driver = 
//  {
//    AnyKinMeasureLinComb lincomb = 
//    {
//      AnyKinCoM& CoM_Upper = Main.Model.Human_CoM.CoM_Upper;
//      AnyKinCoM& CoM_Full = Main.Model.Human_CoM.CoM_Full;    
//      OutDim = 3;
//      Coef = 
//      {
//        {1,0,0,-1,0,0},
//        {0,1,0,0,-1,0},
//        {0,0,1,0,0,-1}
//      }; 
//    };
//    MeasureOrganizer = {0};
//    Reaction.Type = {Off}; 
//    DriverPos = {0.0};
//    DriverVel = {0.0};
//  }; 

  //Thorax pelvis rotation driver
  AnyKinEqSimpleDriver PelvisThorax_Driver =
  {
    //AnyKinMeasure& Ref0 = ...BodyModel.Interface.Trunk.PelvisThoraxRotation;   
    AnyKinMeasure& Ref1 = ...BodyModel.Interface.Trunk.PelvisThoraxExtension;
    AnyKinMeasure& Ref2 = ...BodyModel.Interface.Trunk.PelvisThoraxLateralBending;   
    
    DriverPos = pi/180*
    {   
      //.JntPos.PelvisThoraxRotation,
      .JntPos.PelvisThoraxExtension,
      .JntPos.PelvisThoraxLateralBending
    };
    DriverVel = pi/180*
    {  
      //.JntVel.PelvisThoraxRotation,
      .JntVel.PelvisThoraxExtension,
      .JntVel.PelvisThoraxLateralBending
    };
    //Reaction.Type = {Off,Off,Off};
    Reaction.Type = {Off, Off};
    //Reaction.Type = {Off};
  }; 

  AnyKinEqSimpleDriver PelvisThoraxRotation_Rhythm_Driver = 
  {
    AnyKinMeasureLinComb lincomb = 
    {
      AnyKinMeasure& ref0 = ....BodyModel.Interface.Trunk.PelvisThoraxRotation;
      AnyKinMeasureLinComb HipFlexion_Diff = 
      {
          AnyKinMeasure& ref0 = .....BodyModel.Interface.Right.HipFlexion ;
          AnyKinMeasure& ref1 = .....BodyModel.Interface.Left.HipFlexion ;    
          Coef = {{1, -1}};
          OutDim = 1;
  }; 
      Coef = {{1, -1/50}};
      OutDim = 1;
    };
    DriverPos = {0.0};
    DriverVel = {0.0};
    Reaction.Type = {Off};
  };
    
//  //Neck driver 
//  AnyKinEqSimpleDriver NeckJnt_Driver = 
//  {
//    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, .JntPos.NeckExtension};
//    DriverVel = pi/180*{.JntVel.NeckLateralBending, .JntVel.NeckRotation, .JntVel.NeckExtension};
//    Reaction.Type = {Off, Off, Off};
//  };
  
  AnyKinEqSimpleDriver HeadOrientation_Driver = 
  {
    AnyKinRotational rot = 
    {
      AnyRefFrame& ref = Main.HumanModel.BodyModel.Trunk.SegmentsCervicalSpine.SkullSeg.TopOfHead;
      Type = PlanarAngles;
    };
    DriverPos = {0, 0, 0};
    DriverVel = {0, 0, 0};
    Reaction.Type = {Off, Off, Off};
  };
  
  // ************************************
  // Drivers for the left & right arms
  // ************************************
  
  //Sterno clavicular joint driver
  #if BM_ARM_LEFT & (BM_ARM_SHOULDER_RHYTHM == 0)
  AnyKinEqSimpleDriver SCDriverLeft_Driver =
  {
    AnyKinMeasure& ref1 =Main.Model.BodyModel.Interface.Left.SternoClavicularProtraction;
    AnyKinMeasure& ref2 =Main.Model.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};
  };
  #endif  
  
  //Sterno clavicular joint driver
  #if BM_ARM_RIGHT & (BM_ARM_SHOULDER_RHYTHM == 0)
  AnyKinEqSimpleDriver SCDriverRight_Driver =
  {
    AnyKinMeasure& ref1 =Main.Model.BodyModel.Interface.Right.SternoClavicularProtraction;
    AnyKinMeasure& ref2 =Main.Model.BodyModel.Interface.Right.SternoClavicularElevation;
    DriverPos = pi/180*
    {
      .JntPos.Right.SternoClavicularProtraction,
      .JntPos.Right.SternoClavicularElevation
    };
    DriverVel = pi/180*
    {
      .JntVel.Right.SternoClavicularProtraction,
      .JntVel.Right.SternoClavicularElevation
    };
    Reaction.Type = {Off,Off};
  };
  #endif
  
  AnyKinEqSimpleDriver GlenohumeralAbduction_Rhythm_Driver = 
  {
    AnyKinMeasureLinComb lincomb = 
    {
      AnyKinMeasure& ref0 = ....BodyModel.Interface.Left.GlenohumeralAbduction;
      AnyKinMeasure& ref1 = ....BodyModel.Interface.Right.GlenohumeralAbduction ; 
      Coef = {{1, 1}};
      OutDim = 1;
    };    
    DriverPos = pi/180*{20};
    DriverVel = {0.0};
    Reaction.Type = {Off};
  };  
  
  AnyKinEqSimpleDriver Elbow_Rhythm_Driver = 
  {
    AnyKinMeasureLinComb lincomb = 
    {
      AnyKinMeasureOrg org0 = 
      {
        AnyKinLinear lin = 
        {
          AnyRefFrame& ref0 = Main.Model.FitnessMachine.MainBase___1.ANY_PELVIS;
          AnyRefFrame& ref1 = ......BodyModel.Left.ShoulderArm.Seg.Humerus.fe;
          Ref = 0;
    };    
        MeasureOrganizer = {2}; //z
    };    
      AnyKinMeasureOrg org1 = 
      {
        AnyKinLinear lin = 
        {
          AnyRefFrame& ref0 = Main.Model.FitnessMachine.MainBase___1.ANY_PELVIS;
          AnyRefFrame& ref1 = ......BodyModel.Right.ShoulderArm.Seg.Humerus.fe;
          Ref = 0;
        };
        MeasureOrganizer = {2}; //z
      };
      Coef = {{1, 1}};
      OutDim = 1;
    };
    DriverPos = {0.0};
    DriverVel = {0.0};
    Reaction.Type = {Off};
  };
    
  AnyStdJoint Left_Hand_Connect = 
  {
    AnyRefFrame& base = Main.Model.FitnessMachine._ANY_INTERFACE_.ANY_LEFT_HAND2;
    AnyRefFrame& target = Main.Model.Human_RefNodes.Left_Palm_Node;
    Constraints.Reaction.Type = {On, On, On, On, On, On};
  };
  
  AnyStdJoint Right_Hand_Connect = 
  {
    AnyRefFrame& base = Main.Model.FitnessMachine._ANY_INTERFACE_.ANY_RIGHT_HAND2;
    AnyRefFrame& target = Main.Model.Human_RefNodes.Right_Palm_Node;    
    Constraints.Reaction.Type = {On, On, On, On, On, On};
  };    
    
};//Drivers