[38ba34]: / Tools / ModelUtilities / FrictionContactMuscles / ContactSurfaceLinPushTrigger.any

Download this file

315 lines (229 with data), 9.6 kB

AnyFolder Push ={
  
  AnyKinLinear LinS={
    Ref=0;
    AnyRefFrame &BaseObject=..BaseObject;
    AnyRefFrame &StrengthObject=..StrengthObject;
  };
  
  
  AnyKinMeasureOrg LinMeasureOrg0 ={
    AnyKinLinear &ref=.LinS;
    MeasureOrganizer={..Direction[0]};
  };

    AnyKinMeasureOrg LinMeasureOrg1 ={
    AnyKinLinear &ref=.LinS;
    MeasureOrganizer={..Direction[1]};
  };

    AnyKinMeasureOrg LinMeasureOrg2 ={
    AnyKinLinear &ref=.LinS;
    MeasureOrganizer={..Direction[2]};
  };

  
  AnyVar UserDefinedMeasure=LinMeasureOrg0.Pos[0];
  AnyVar RadiusMeasure=sqrt(LinMeasureOrg1.Pos[0]^2+LinMeasureOrg2.Pos[0]^2);
  
  
  AnyIntVar LowerThanHighLimit = ltfun(UserDefinedMeasure,.UserDefinedLimitHigh);
  AnyIntVar GreaterThanLowLimit = gtfun(UserDefinedMeasure,.UserDefinedLimitLow);
  AnyIntVar LowerThanRadiusLimit = ltfun(RadiusMeasure,.UserDefinedRadiusLimit);

  AnyVar UserDefinedStrengthFunction= .Trigger*iffun( andfun(andfun(LowerThanHighLimit,GreaterThanLowLimit),LowerThanRadiusLimit),.Strength,0.0);

  
  //create the directions vectors 
  
  AnyVec3 NormalVector={ 
    iffun(.Direction[0]-0,0,1),
    iffun(.Direction[0]-1,0,1),
    iffun(.Direction[0]-2,0,1)};
  
  AnyVec3 FrictionVector1={ 
    iffun(.Direction[1]-0,0,1),
    iffun(.Direction[1]-1,0,1),
    iffun(.Direction[1]-2,0,1)};
  
  AnyVec3 FrictionVector2={ 
    iffun(.Direction[2]-0,0,1),
    iffun(.Direction[2]-1,0,1),
    iffun(.Direction[2]-2,0,1)};
  
  
  
  
  AnyMuscleModelUsr1 ContactMuscleModel=   {
    F0 = 0.000000;
    S = .UserDefinedStrengthFunction;
  };        
  
  AnyMuscleModelUsr1 ContactMuscleModel1=   {
    F0 = 0.000000;
    S = .UserDefinedStrengthFunction;
  };        
  
  AnyMuscleModelUsr1 ContactMuscleModel2=   {
    F0 = 0.000000;
    S = .UserDefinedStrengthFunction;
  };        
  
  
  AnyKinLinear Lin={
    AnyRefFrame &Box =..BaseObject;
    AnyRefFrame &Hand = ..TargetObject;
    Ref=0;
  };
  
  
  
  AnyFolder Direction0Muscle ={
    AnyRecruitedActuator NormalDirectionMuscle={
      AnyKinMeasureOrg NormalDir={
        AnyKinLinear &ref=...Lin;
        MeasureOrganizer={....Direction[0]}; //always pick first element
      };
      Strength = ..UserDefinedStrengthFunction;
      Type = NonNegative;
      SET_DEFAULT_ACTUATOR_VOLUME;
       
    };
  };
  
  
  
  AnyFolder Direction01Muscle={
    AnyFolder Push={
      AnyKinMeasureOrg NormalDir={
        AnyKinLinear &ref=...Lin;
        MeasureOrganizer={....Direction[0]}; //always pick first element
      };
      AnyKinMeasureOrg FrictionDir={
        AnyKinLinear &ref=...Lin;
        MeasureOrganizer={....Direction[1]}; // pick second element
      };
      AnyKinMeasureLinComb LinCombinationMeasure ={
        AnyKinMeasure& u1=.NormalDir;
        AnyKinMeasure& u2=.FrictionDir;    
        Coef={
          {1,....StaticFrictionCoefficient}
        };     
      };
      
      AnyRecruitedActuator FrictionMuscle={
        //       AnyKinMeasure& ref1=.FrictionDir;
        AnyKinMeasureLinComb &ref1=.LinCombinationMeasure;
        Strength = ...UserDefinedStrengthFunction;
        Type = NonNegative;
        SET_DEFAULT_ACTUATOR_VOLUME;
         
      };
      
    };//Push
    
    AnyFolder Pull={
      AnyKinMeasureOrg NormalDir={
        AnyKinLinear &ref=...Lin;
        MeasureOrganizer={....Direction[0]}; //always pick first element
      };
      AnyKinMeasureOrg FrictionDir={
        AnyKinLinear &ref=...Lin;
        MeasureOrganizer={....Direction[1]}; // pick second element
      };
      AnyKinMeasureLinComb LinCombinationMeasure ={
        AnyKinMeasure& u1=.NormalDir;
        AnyKinMeasure& u2=.FrictionDir;    
        Coef={
          {-1,....StaticFrictionCoefficient}
        };     
        
      };
      
      AnyRecruitedActuator FrictionMuscle={
        AnyKinMeasureLinComb &ref1=.LinCombinationMeasure;
        //        AnyKinMeasure& ref1=.FrictionDir;
        Strength = ...UserDefinedStrengthFunction;
        Type = NonPositive;
        SET_DEFAULT_ACTUATOR_VOLUME;
         
      };
      
    };//Pull
    
  };
  
  
  
  AnyFolder Direction02Muscle={
    AnyFolder Push={
      AnyKinMeasureOrg NormalDir={
        AnyKinLinear &ref=...Lin;
        MeasureOrganizer={....Direction[0]}; //always pick first element
      };
      AnyKinMeasureOrg FrictionDir={
        AnyKinLinear &ref=...Lin;
        MeasureOrganizer={....Direction[2]}; // pick last element
      };
      AnyKinMeasureLinComb LinCombinationMeasure ={
        AnyKinMeasure& u1=.NormalDir;
        AnyKinMeasure& u2=.FrictionDir;    
        Coef={
          {1,....StaticFrictionCoefficient}
        };     
        
      };
      
      AnyRecruitedActuator FrictionMuscle={
        AnyKinMeasureLinComb &ref1=.LinCombinationMeasure;
        //        AnyKinMeasure& ref1=.FrictionDir;
        
        Strength = ...UserDefinedStrengthFunction;
        Type = NonNegative;
        SET_DEFAULT_ACTUATOR_VOLUME;
         
      };
      
    };//Push
    
    AnyFolder Pull={
      AnyKinMeasureOrg NormalDir={
        AnyKinLinear &ref=...Lin;
        MeasureOrganizer={....Direction[0]}; //always pick first element
      };
      AnyKinMeasureOrg FrictionDir={
        AnyKinLinear &ref=...Lin;
        MeasureOrganizer={....Direction[2]}; // pick last element
      };
      AnyKinMeasureLinComb LinCombinationMeasure ={
        AnyKinMeasure& u1=.NormalDir;
        AnyKinMeasure& u2=.FrictionDir;    
        Coef={
          {-1,....StaticFrictionCoefficient}
        };     
        
      };
      
      AnyRecruitedActuator FrictionMuscle={
        AnyKinMeasureLinComb &ref1=.LinCombinationMeasure;
        //        AnyKinMeasure& ref1=.FrictionDir;
        Strength = ...UserDefinedStrengthFunction;
        Type = NonPositive;
        SET_DEFAULT_ACTUATOR_VOLUME;
         
      };
      
    };//Pull
    
  };
  
  
  AnyDrawVector DrawNormalForce =     {
    AnyRefFrame &ref=..TargetObject;
    AnyVar Strength=   iffun(.ContactMuscleModel.S,.ContactMuscleModel.S,0.00001);
    Vec =0*..ScaleFactor*..DrawRef.DrawSettingsSupport.Lin.ScaleFactor*(
    .NormalVector*.Direction0Muscle.NormalDirectionMuscle.Fout[0]*..BaseObject.Axes'
    +.NormalVector*.Direction01Muscle.Push.FrictionMuscle.Fout[0]*..BaseObject.Axes'
    +.NormalVector*.Direction02Muscle.Push.FrictionMuscle.Fout[0]*..BaseObject.Axes'
    +.NormalVector*.Direction01Muscle.Pull.FrictionMuscle.Fout[0]*..BaseObject.Axes'
    +.NormalVector*.Direction02Muscle.Pull.FrictionMuscle.Fout[0]*..BaseObject.Axes');
    AnyVar lenght=Strength*(2-(1-Strength/sqrt(Strength^2)));
    
    PointAway = Off;
    DrawCoord = Off;
    
    Line.RGB = ..DrawRef.DrawSettingsSupport.Lin.RGB;
    Line.Thickness = ..DrawRef.DrawSettingsSupport.Lin.Thickness;
    Line.End.Thickness = 2*..DrawRef.DrawSettingsSupport.Lin.Thickness;  
    Line.End.Length = 4*..DrawRef.DrawSettingsSupport.Lin.Thickness;
    
  };
  
  
  AnyDrawVector DrawFrictionForce =     {
    
    AnyRefFrame &ref=..TargetObject;
    
    Vec =0*..ScaleFactor*..DrawRef.DrawSettingsSupport.Lin.ScaleFactor*..StaticFrictionCoefficient*(
    .FrictionVector1*.Direction01Muscle.Push.FrictionMuscle.Fout[0]
    -.FrictionVector1*.Direction01Muscle.Pull.FrictionMuscle.Fout[0]
    +.FrictionVector2*.Direction02Muscle.Push.FrictionMuscle.Fout[0]
    -.FrictionVector2*.Direction02Muscle.Pull.FrictionMuscle.Fout[0])*..BaseObject.Axes';
    
    PointAway = Off;
    DrawCoord = Off;
    
    Line.RGB = ..DrawRef.DrawSettingsSupport.Lin.RGB;
    Line.Thickness = ..DrawRef.DrawSettingsSupport.Lin.Thickness;
    Line.End.Thickness = 2*..DrawRef.DrawSettingsSupport.Lin.Thickness;  
    Line.End.Length = 4*..DrawRef.DrawSettingsSupport.Lin.Thickness;
  };
  
  
  //resultann force given in global ref system
  AnyVec3 NormalForceVec = DrawNormalForce.Vec/(.ScaleFactor*.DrawRef.DrawSettingsSupport.Lin.ScaleFactor);
    AnyVar NormalForceScalar = (NormalForceVec[0]^2+NormalForceVec[1]^2+NormalForceVec[2]^2)^0.5;

  AnyVec3 FrictionForceVec = DrawFrictionForce.Vec/(.ScaleFactor*.DrawRef.DrawSettingsSupport.Lin.ScaleFactor);
    AnyVar FrictionForceScalar = (FrictionForceVec[0]^2+FrictionForceVec[1]^2+FrictionForceVec[2]^2)^0.5;
   
    //AnyVar TotalForceScalar = (TotalForceVec[0]^2+TotalForceVec[1]^2+TotalForceVec[2]^2)^0.5;



  /*
  AnyDrawVector DrawFrictionForce1 =     {
  
  AnyRefFrame &ref=..TargetObject;
  
  Vec =0.001*..StaticFrictionCoefficient*(
  .FrictionVector1*.Direction01Muscle.Push.FrictionMuscle.Fout[0]*..BaseObject.Axes'+
  -.FrictionVector1*.Direction01Muscle.Pull.FrictionMuscle.Fout[0]*..BaseObject.Axes');
  
  PointAway = Off;
  DrawCoord = Off;
  Line.RGB = {0,1,0};
  Line.Thickness = 0.015;
  Line.End.Thickness = 2*0.015; 
  Line.End.Length = 4*0.015;
  };
  
  
  
  
  
  AnyDrawVector DrawFrictionForce2 =     {
  
  AnyRefFrame &ref=..TargetObject;
  
  Vec =0.001*..StaticFrictionCoefficient*(
  .FrictionVector2*.Direction02Muscle.Push.FrictionMuscle.Fout[0]*..BaseObject.Axes'+
  -.FrictionVector2*.Direction02Muscle.Pull.FrictionMuscle.Fout[0]*..BaseObject.Axes');
  
  PointAway = Off;
  DrawCoord = Off;
  Line.RGB = {1,0,0};
  Line.Thickness = 0.015;
  Line.End.Thickness = 2*0.015; 
  Line.End.Length = 4*0.015;
  };
  */
  
  
};