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

Download this file

255 lines (190 with data), 7.9 kB

AnyFolder Push ={
  
    AnyKinPLine LinS={
      AnyRefFrame &BaseObject=..BaseObject;
      AnyRefFrame &StrengthObject=..StrengthObject;
    };
    
    AnyVar UserDefinedMeasure=LinS.Pos[0];
   /* 
    AnyVar UserDefinedStrengthFunction= 
    (UserDefinedMeasure-.UserDefinedLimitLow)/sqrt((UserDefinedMeasure-.UserDefinedLimitLow)^2)*
    (.UserDefinedLimitHigh-UserDefinedMeasure)/sqrt((.UserDefinedLimitHigh-UserDefinedMeasure)^2)*.Strength;
    */
    
  
    AnyIntVar LowerThanHighLimit = ltfun(UserDefinedMeasure,.UserDefinedLimitHigh);
  AnyIntVar GreaterThanLowLimit = gtfun(UserDefinedMeasure,.UserDefinedLimitLow);
  

  AnyVar UserDefinedStrengthFunction= iffun(andfun(LowerThanHighLimit,GreaterThanLowLimit),.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)};
     

  
  AnyKinLinear Lin={
    AnyRefFrame &Box =..BaseObject;
    AnyRefFrame &Hand = ..TargetObject;
    Ref=0;
  };
  
  
  
  
  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(.UserDefinedStrengthFunction,.UserDefinedStrengthFunction,0.00001);
    Vec =..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 =..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;
  };

  
  /*
    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;
  };
*/
  
  
};