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

Download this file

231 lines (192 with data), 9.0 kB

//This is the calibration1 file, it will calibrate all muscle in the leg in
//a neutral position (all joint angles in the drivers are zero)
//The subsequent calibrations 2 and 3 will overwrite some of the values
//obtained in this study

AnyFolder LegCalAnkle =
{  
  AnyComponentDefinition obj = {};  
  AnyFolder &Pelvis = ...BodyModel.Trunk.SegmentsLumbar.PelvisSeg;
  AnyFolder &Sacrum = ...BodyModel.Trunk.SegmentsLumbar.SacrumSeg;
  
  // Segments needed for the Psoas Major muscles
  AnyFolder &SegmentsLumbar = ...BodyModel.Trunk.SegmentsLumbar;
  AnyFolder &Thorax = ...BodyModel.Trunk.SegmentsThorax.ThoraxSeg;
  
  AnyFolder &LegSegSide = .SideHumanFolderRef.Leg.Seg;
  
  AnyFolder &LegJointsSide = .SideHumanFolderRef.Leg.Jnt;
  AnyFolder &TrunkJoints = ...BodyModel.Trunk.JointsLumbar;
  
  AnyFolder &MusCalSide =  .SideHumanFolderRef.Leg.Mus;
  
  // Ankle position variables // PlantarFlexion - SubtalarEversion
  AnyFloat PlantarFlexion      = {  45,   0} * pi/180;
  AnyFloat SubtalarEversion    = {   0,  20} * pi/180;
  AnyFloat DorsiFlexion        = { -20,   0} * pi/180;
  AnyFloat SubtalarInversion   = {   0, -30} * pi/180;
  
  AnyFloat KneeFlexed      = { 155} * pi/180;
  AnyFloat KneeExtended    = {  -3} * pi/180;
  
  AnyFloat AnklePositions = flatten(repmat(2,{
      PlantarFlexion[0],
      SubtalarEversion[0],
      DorsiFlexion[0],
      SubtalarInversion[0]
  }'));
  AnyFloat SubtalarPositions = flatten(repmat(2,{
      PlantarFlexion[1],
      SubtalarEversion[1],
      DorsiFlexion[1],
      SubtalarInversion[1]
  }'));
  AnyFloat KneePositions = flatten({repmat(4,KneeFlexed),repmat(4,KneeExtended)});
  
  
  AnyFixedRefFrame ground = 
  {
    AnyRefNode node = 
    {
      ARel=..Pelvis.Axes0;
      sRel=..Pelvis.r0;
    };
  };

  AnyKinEq ThoraxFix = 
  {
    AnyKinMeasure& PelvisThoraxExtension = ....BodyModel.Interface.Trunk.PelvisThoraxExtension;
    AnyKinMeasure& PelvisThoraxLateralBending = ....BodyModel.Interface.Trunk.PelvisThoraxLateralBending;
    AnyKinMeasure& PelvisThoraxRotation = ....BodyModel.Interface.Trunk.PelvisThoraxRotation;
  };
  
  AnyKinEq PelvisFix = 
  {
    AnyKinLinear Lin = 
    {
      AnyRefFrame &ground = ..ground.node;
      AnyRefFrame &Pelvis = .....BodyModel.Trunk.SegmentsLumbar.PelvisSeg;
    };
    AnyKinRotational Rot = 
    {
      Type = RotAxesAngles;
      AnyRefFrame &ground = ..ground.node;
      AnyRefFrame &Pelvis = .....BodyModel.Trunk.SegmentsLumbar.PelvisSeg;
    };
  };
  
  AnyKinEqInterPolDriver Hip = 
  {
    AnyKinRotational &Spherical = ..SideInterfaceFolderRef.HipFlexion.HipMeasure;
    Type = PiecewiseLinear;
    T =     {0.0, 1.0};
    Data = {{0,  0},
            {0,  0},
            {0,  0}}*pi/180;
    Reaction.Type = {Off, Off, Off};
  };
  
  AnyKinEqInterPolDriver Knee = 
  {
    AnyKinMeasure& Hinge = ..SideInterfaceFolderRef.KneeFlexion;
    Type = PiecewiseLinear;
    T = linspace(0,1,SizesOf(Data)[1]);
    Data = {.KneePositions}; // ? degrees knee flexion
    Reaction.Type = {Off};
  };
  
  #if BM_FOOT_MODEL == _FOOT_MODEL_DEFAULT_
  AnyKinEqInterPolDriver Ankle = 
  {
    AnyKinMeasure& Hinge = ..SideInterfaceFolderRef.AnklePlantarFlexion;
    Type = PiecewiseLinear;
    T = linspace(0,1,SizesOf(Data)[1]);
    Data = {.AnklePositions};
    Reaction.Type = {Off};
  };
  
  AnyKinEqInterPolDriver SubTalar = 
  {
    AnyKinMeasure& Hinge = ..SideInterfaceFolderRef.SubTalarEversion;
    Type = PiecewiseLinear;
    T = linspace(0,1,SizesOf(Data)[1]);
    Data = {.SubtalarPositions};
    Reaction.Type = {Off};
  };
  #endif
  
  AnyString MusPrefix = CompleteNameOf(&.SideHumanFolderRef.Leg.Mus);
  
  AnyObjectPtrArray TibialisAnteriorMuscles = ObjSearch(MusPrefix+".TibialisAnterior*", "AnyMuscle");
  AnyFloat  TibialisAnteriorRmin = repmat(NumElemOf(TibialisAnteriorMuscles), ..RMin);
  AnyFloat  TibialisAnteriorRmax = repmat(NumElemOf(TibialisAnteriorMuscles), ..RMax);
  
  AnyObjectPtrArray ExtensorDigitorumLongusMuscles = ObjSearch(MusPrefix+".ExtensorDigitorumLongus*", "AnyMuscle");
  AnyFloat  ExtensorDigitorumLongusRmin = repmat(NumElemOf(ExtensorDigitorumLongusMuscles), ..RMin);
  AnyFloat  ExtensorDigitorumLongusRmax = repmat(NumElemOf(ExtensorDigitorumLongusMuscles), ..RMax);
  
  AnyObjectPtrArray ExtensorHallucisLongusMuscles = ObjSearch(MusPrefix+".ExtensorHallucisLongus*", "AnyMuscle");
  AnyFloat  ExtensorHallucisLongusRmin = repmat(NumElemOf(ExtensorHallucisLongusMuscles), ..RMin);
  AnyFloat  ExtensorHallucisLongusRmax = repmat(NumElemOf(ExtensorHallucisLongusMuscles), ..RMax);

  AnyObjectPtrArray SoleusMuscles = ObjSearch(MusPrefix+".Soleus*", "AnyMuscle");
  AnyFloat  SoleusRmin = repmat(NumElemOf(SoleusMuscles), ..RMin);
  AnyFloat  SoleusRmax = repmat(NumElemOf(SoleusMuscles), ..RMax);
  
  AnyObjectPtrArray TibialisPosteriorMuscles = ObjSearch(MusPrefix+".TibialisPosterior*", "AnyMuscle");
  AnyFloat  TibialisPosteriorRmin = repmat(NumElemOf(TibialisPosteriorMuscles), ..RMin);
  AnyFloat  TibialisPosteriorRmax = repmat(NumElemOf(TibialisPosteriorMuscles), ..RMax);
  
  AnyObjectPtrArray FlexorDigitorumLongusMuscles = ObjSearch(MusPrefix+".FlexorDigitorumLongus*", "AnyMuscle");
  AnyFloat  FlexorDigitorumLongusRmin = repmat(NumElemOf(FlexorDigitorumLongusMuscles), ..RMin);
  AnyFloat  FlexorDigitorumLongusRmax = repmat(NumElemOf(FlexorDigitorumLongusMuscles), ..RMax);

  AnyObjectPtrArray FlexorHallucisLongusMuscles = ObjSearch(MusPrefix+".FlexorHallucisLongus*", "AnyMuscle");
  AnyFloat  FlexorHallucisLongusRmin = repmat(NumElemOf(FlexorHallucisLongusMuscles), ..RMin);
  AnyFloat  FlexorHallucisLongusRmax = repmat(NumElemOf(FlexorHallucisLongusMuscles), ..RMax);
  
  AnyObjectPtrArray PeroneusBrevisMuscles = ObjSearch(MusPrefix+".PeroneusBrevis*", "AnyMuscle");
  AnyFloat  PeroneusBrevisRmin = repmat(NumElemOf(PeroneusBrevisMuscles), ..RMin);
  AnyFloat  PeroneusBrevisRmax = repmat(NumElemOf(PeroneusBrevisMuscles), ..RMax);
  
  AnyObjectPtrArray PeroneusLongusMuscles = ObjSearch(MusPrefix+".PeroneusLongus*", "AnyMuscle");
  AnyFloat  PeroneusLongusRmin = repmat(NumElemOf(PeroneusLongusMuscles), ..RMin);
  AnyFloat  PeroneusLongusRmax = repmat(NumElemOf(PeroneusLongusMuscles), ..RMax);
  
  AnyObjectPtrArray PeroneusTertiusMuscles = ObjSearch(MusPrefix+".PeroneusTertius*", "AnyMuscle");
  AnyFloat  PeroneusTertiusRmin = repmat(NumElemOf(PeroneusTertiusMuscles), ..RMin);
  AnyFloat  PeroneusTertiusRmax = repmat(NumElemOf(PeroneusTertiusMuscles), ..RMax);
  
  // Two-joint muscles
  AnyObjectPtrArray GastrocnemiusMuscles = ObjSearch(MusPrefix+".Gastrocnemius*", "AnyMuscle");
  AnyFloat  GastrocnemiusRmin = repmat(NumElemOf(GastrocnemiusMuscles), ..RMin);
  AnyFloat  GastrocnemiusRmax = repmat(NumElemOf(GastrocnemiusMuscles), ..RMax);
  
  AnyObjectPtrArray PlantarisMuscles = ObjSearch(MusPrefix+".Plantaris*", "AnyMuscle");
  AnyFloat  PlantarisRmin = repmat(NumElemOf(PlantarisMuscles), ..RMin);
  AnyFloat  PlantarisRmax = repmat(NumElemOf(PlantarisMuscles), ..RMax);

  
};

// The study: Operations to be performed on the model
AnyBodyCalibrationStudy LegCalibrationStudyAnkle = 
{
  AnyFolder &ref=.LegCalAnkle; 
  nStep = 8; 
  FiberAndTendonLengthAdjustment.CalibrateTendonAtMaxForceOnOff = On;
  Kinematics.SmallStepAssumptionOnOff = Off;
  InitialConditions.SmallStepAssumptionOnOff = Off;
  Kinematics.PosAnalysisOnlyOnOff = On;
  InitialConditions.PosAnalysisOnlyOnOff = On;

  MuscleArr = arrcat(arrcat(
      ref.TibialisAnteriorMuscles,
      ref.ExtensorDigitorumLongusMuscles,
      ref.ExtensorHallucisLongusMuscles,
      ref.SoleusMuscles,
      ref.TibialisPosteriorMuscles,
      ref.FlexorDigitorumLongusMuscles,
      ref.FlexorHallucisLongusMuscles,
      ref.PeroneusBrevisMuscles,
      ref.PeroneusLongusMuscles,
      ref.PeroneusTertiusMuscles),
      ref.GastrocnemiusMuscles,
      ref.PlantarisMuscles
      

  );
  RminMuscleFiber = arrcat(arrcat(
      ref.TibialisAnteriorRmin,
      ref.ExtensorDigitorumLongusRmin,
      ref.ExtensorHallucisLongusRmin,
      ref.SoleusRmin,
      ref.TibialisPosteriorRmin,
      ref.FlexorDigitorumLongusRmin,
      ref.FlexorHallucisLongusRmin,
      ref.PeroneusBrevisRmin,
      ref.PeroneusLongusRmin,
      ref.PeroneusTertiusRmin),
      ref.GastrocnemiusRmin,
      ref.PlantarisRmin

  );
  RmaxMuscleFiber = arrcat(arrcat(
      ref.TibialisAnteriorRmax,
      ref.ExtensorDigitorumLongusRmax,
      ref.ExtensorHallucisLongusRmax,
      ref.SoleusRmax,
      ref.TibialisPosteriorRmax,
      ref.FlexorDigitorumLongusRmax,
      ref.FlexorHallucisLongusRmax,
      ref.PeroneusBrevisRmax,
      ref.PeroneusLongusRmax,
      ref.PeroneusTertiusRmax),
      ref.GastrocnemiusRmax,
      ref.PlantarisRmax
  );               
  
};