[38ba34]: / Body / AAUHuman / LegTLEM1 / Calibration / HipFlexorCal.any

Download this file

111 lines (90 with data), 3.7 kB

AnyFolder HipFlexorCal ={
  AnyComponentDefinition obj = {};  

  AnyFolder &Pelvis = ...HumanFolderRef.Trunk.SegmentsLumbar.PelvisSeg;
  AnyFolder &Sacrum = ...HumanFolderRef.Trunk.SegmentsLumbar.SacrumSeg;
  
  // Segments needed for the Psoas Major muscles
  AnyFolder& SegmentsLumbar = ...HumanFolderRef.Trunk.SegmentsLumbar;
  AnyFolder &Thorax = ...HumanFolderRef.Trunk.SegmentsThorax.ThoraxSeg;
  
  
  AnyFolder &LegSegSide = .SideHumanFolderRef.Leg.Seg;
  AnyFolder &LegJointsSide = .SideHumanFolderRef.Leg.Jnt;
  AnyFolder &TrunkJoints = ...HumanFolderRef.Trunk.JointsLumbar;
  
  
  AnyFixedRefFrame ground = {
    AnyRefNode node = {
      ARel=..Pelvis.Axes0;
      sRel=..Pelvis.r0;
    };
  };
  
  AnyKinEq ThoraxFix = {
    AnyKinMeasure& PelvisThoraxExtension = ....HumanFolderRef.Interface.Trunk.PelvisThoraxExtension;
    AnyKinMeasure& PelvisThoraxLateralBending = ....HumanFolderRef.Interface.Trunk.PelvisThoraxLateralBending;
    AnyKinMeasure& PelvisThoraxRotation = ....HumanFolderRef.Interface.Trunk.PelvisThoraxRotation;
  };
  
  AnyKinEq PelvisFix = {
    AnyKinLinear Lin = {
      AnyRefFrame &ground = ..ground.node;
      AnyRefFrame &Pelvis = .....HumanFolderRef.Trunk.SegmentsLumbar.PelvisSeg;
    };
    AnyKinRotational Rot = {
      Type = RotAxesAngles;
      AnyRefFrame &ground = ..ground.node;
      AnyRefFrame &Pelvis = .....HumanFolderRef.Trunk.SegmentsLumbar.PelvisSeg;
    };
  };

  
  AnyKinEqInterPolDriver Hip = {
    AnyKinRotational &Spherical = ..SideInterfaceFolderRef.HipFlexion.HipMeasure;
    Type = PiecewiseLinear;
    T =      {0.0, 1.0 };
    Data = { {130,  -20},
             {-25,  40},
             {0,  -6}
    }*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 = {{140, 90}}*pi/180; // ? degrees knee flexion
    Reaction.Type = {Off};
  };
  
  
  AnyKinEqInterPolDriver Ankle = {
    AnyKinMeasure& Hinge = ..SideInterfaceFolderRef.AnklePlantarFlexion;
    Type = PiecewiseLinear;
    T =      {0.0, 1.0 };
    Data = {{0,-10}}*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 IliacusMuscles = ObjSearch(MusPrefix+".Iliacus*", "AnyMuscle");
  AnyFloat  IliacusRmin = repmat(NumElemOf(IliacusMuscles), 0.5);
  AnyFloat  IliacusRmax = repmat(NumElemOf(IliacusMuscles), 1.2);
  
  // Psoas muscles are created in the trunk folder, and search function is not returning pointers  
  AnyObjectPtrArray PsoasMajorMuscles = ObjSearch(CompleteNameOf(&.SidePsoasRef)+".PM*", "AnyMuscle");
  AnyFloat  PsoasMajorRmin = repmat(NumElemOf(PsoasMajorMuscles), 0.5);
  AnyFloat  PsoasMajorRmax = repmat(NumElemOf(PsoasMajorMuscles), 1.2);
};

// The study: Operations to be performed on the model
AnyBodyCalibrationStudy LegCalibrationStudyHipFlexor = {
  AnyFolder &ref=.HipFlexorCal; 
  nStep = 2;
  MuscleArr = arrcat(
      ref.IliacusMuscles,
      ref.PsoasMajorMuscles
  );
  RminMuscleFiber = arrcat(
      ref.IliacusRmin,
      ref.PsoasMajorRmin
  );
  RmaxMuscleFiber = arrcat(
      ref.IliacusRmax,
      ref.PsoasMajorRmax
                   );
  InitialConditions.SolverType = KinSolOverDeterminate;
};