[bfdf16]: / Body / AAUHuman / LegTLEM2.1 / Calibration / QuadricepsCal.any

Download this file

128 lines (105 with data), 4.4 kB

AnyFolder QuadricepsCal ={
  AnyComponentDefinition obj = {};  

  AnyFolder &Pelvis = ...HumanFolderRef.Trunk.SegmentsLumbar.PelvisSeg;
  AnyFolder &Sacrum = ...HumanFolderRef.Trunk.SegmentsLumbar.SacrumSeg;
  
  AnyFolder &LegSegSide = .SideHumanFolderRef.Leg.Seg;
  
  AnyFolder &LegJointsSide = .SideHumanFolderRef.Leg.Jnt;
  AnyFolder &SacrumPelvisJnt = ...HumanFolderRef.Trunk.JointsLumbar.SacrumPelvisJnt;
  
  
  AnyFixedRefFrame ground = {
    AnyRefNode node = {
      ARel=..Pelvis.Axes0;
      sRel=..Pelvis.r0;
    };
  };
  
  AnyKinEq PelvisFix = {
    AnyKinLinear PelvisSacrumLinFix = {
      AnyRefFrame &ground = ..ground.node;
      AnyRefFrame &Pelvis = .....HumanFolderRef.Trunk.SegmentsLumbar.PelvisSeg;
    };
    AnyKinRotational PelvisSacrumRotFix = {
      Type = RotAxesAngles;
      AnyRefFrame &ground = ..ground.node;
      AnyRefFrame &Pelvis = .....HumanFolderRef.Trunk.SegmentsLumbar.PelvisSeg;
    };
  };
  
  AnyKinEqSimpleDriver PelvisSacrumFix = {
    AnyKinMeasure& Jnt = .SacrumPelvisJnt;
    DriverPos = {0,0,0};
    DriverVel = {0,0,0};
    Reaction.Type = {Off,Off,Off};
  };
  
  AnyKinEqInterPolDriver Hip = {
    AnyKinRotational &Spherical = ..SideInterfaceFolderRef.HipFlexion.HipMeasure;
    Type = PiecewiseLinear;
    T =      {0.0, 1.0 };
    Data = { {110,  -20},
             {0,  0},
             {0,  0}
    }*pi/180; // Flexion - Abduction - internal rotation 
    
    Reaction.Type = {Off, Off, Off};
  };
  
  AnyKinEqInterPolDriver Knee = {
    AnyKinMeasure& Hinge = ..SideInterfaceFolderRef.KneeFlexion;
    Type = PiecewiseLinear;
    T =      {0.0, 1.0 };
    Data = {{-6,150}}*pi/180; // ? degrees knee flexion
    Reaction.Type = {Off};
  };
  
  
  AnyKinEqInterPolDriver Ankle = {
    AnyKinMeasure& Hinge = ..SideInterfaceFolderRef.AnklePlantarFlexion;
    Type = PiecewiseLinear;
    T =      {0.0, 1.0 };
    Data = {{0,50}}*pi/180;
    Reaction.Type = {Off};
  };
  
  AnyKinEqInterPolDriver SubTalar = {
    AnyKinMeasure& Hinge = ..SideInterfaceFolderRef.SubTalarEversion;
    Type = PiecewiseLinear;
    T =      {0.0, 1.0 };
    Data = {{0,0}}*pi/180;
    Reaction.Type = {Off};
  };
  
  AnyString MusPrefix = CompleteNameOf(&.SideHumanFolderRef.Leg.Mus);
  
  AnyObjectPtrArray RectusFemorisMuscles = ObjSearch(MusPrefix+".RectusFemoris*", "AnyMuscle");
  AnyFloat  RectusFemorisRmin = repmat(NumElemOf(RectusFemorisMuscles), 0.5);
  AnyFloat  RectusFemorisRmax = repmat(NumElemOf(RectusFemorisMuscles), 1.2);
  
  AnyObjectPtrArray VastusMedialisMuscles = ObjSearch(MusPrefix+".VastusMedialis*", "AnyMuscle");
  AnyFloat  VastusMedialisRmin = repmat(NumElemOf(VastusMedialisMuscles), 0.5);
  AnyFloat  VastusMedialisRmax = repmat(NumElemOf(VastusMedialisMuscles), 1.2);
  
  AnyObjectPtrArray VastusLateralisMuscles = ObjSearch(MusPrefix+".VastusLateralis*", "AnyMuscle");
  AnyFloat  VastusLateralisRmin = repmat(NumElemOf(VastusLateralisMuscles), 0.5);
  AnyFloat  VastusLateralisRmax = repmat(NumElemOf(VastusLateralisMuscles), 1.2);
  
  AnyObjectPtrArray VastusIntermediusMuscles = ObjSearch(MusPrefix+".VastusIntermedius*", "AnyMuscle");
  AnyFloat  VastusIntermediusRmin = repmat(NumElemOf(VastusIntermediusMuscles), 0.5);
  AnyFloat  VastusIntermediusRmax = repmat(NumElemOf(VastusIntermediusMuscles), 1.2);
  
  AnyObjectPtrArray SartoriusMuscles = ObjSearch(MusPrefix+".Sartorius*", "AnyMuscle");
  AnyFloat  SartoriusRmin = repmat(NumElemOf(SartoriusMuscles), 0.5);
  AnyFloat  SartoriusRmax = repmat(NumElemOf(SartoriusMuscles), 1.2);
  
};

// The study: Operations to be performed on the model
AnyBodyCalibrationStudy LegCalibrationStudyQuadriceps = {
  AnyFolder &ref=.QuadricepsCal; 
  nStep = 2;
  MuscleArr = arrcat(
      ref.RectusFemorisMuscles,
      ref.VastusMedialisMuscles,
      ref.VastusLateralisMuscles,
      ref.VastusIntermediusMuscles,
      ref.SartoriusMuscles
  );
  RminMuscleFiber = arrcat(
      ref.RectusFemorisRmin,
      ref.VastusMedialisRmin,
      ref.VastusLateralisRmin,
      ref.VastusIntermediusRmin,
      ref.SartoriusRmin
  );
  RmaxMuscleFiber = arrcat(
      ref.RectusFemorisRmax,
      ref.VastusMedialisRmax,
      ref.VastusLateralisRmax,
      ref.VastusIntermediusRmax,
      ref.SartoriusRmax
  );
  InitialConditions.SolverType = KinSolOverDeterminate;
};