119 lines (98 with data), 4.3 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 LegCal1 ={
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;
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;
};
};
AnyKinEqSimpleDriver Hip = {
AnyKinRotational &Spherical = ..SideInterfaceFolderRef.HipFlexion.HipMeasure;
DriverPos = {0,0,0}*pi/180; // Flexion - Abduction - external rotation
DriverVel = {0,0,0}*pi/180;
Reaction.Type = {Off,Off,Off};
};
AnyKinEqSimpleDriver Knee = {
AnyKinMeasure& Hinge = ..SideInterfaceFolderRef.KneeFlexion;
DriverPos = {0*pi/180};
DriverVel = {0*pi/180};
Reaction.Type = {Off};
};
#if BM_FOOT_MODEL == _FOOT_MODEL_DEFAULT_
AnyKinEqSimpleDriver Ankle = {
AnyKinMeasure& Hinge = ..SideInterfaceFolderRef.AnklePlantarFlexion;
DriverPos = {0*pi/180};
DriverVel = {0*pi/180};
Reaction.Type = {Off};
};
AnyKinEqSimpleDriver SubTalar = {
AnyKinMeasure& Hinge = ..SideInterfaceFolderRef.SubTalarEversion;
DriverPos = {0*pi/180};
DriverVel = {0*pi/180};
Reaction.Type = {Off};
};
#endif
};
// The study: Operations to be performed on the model
AnyBodyCalibrationStudy LegCalibrationStudy1 = {
AnyFolder &ref=.LegCal1;
nStep = 1;
InitialConditions.SmallStepAssumptionOnOff = Off;
Kinematics.SmallStepAssumptionOnOff = Off;
Kinematics.PosAnalysisOnlyOnOff = On;
InitialConditions.PosAnalysisOnlyOnOff = On;
#if (ANYBODY_V1 > 7)|(ANYBODY_V1 == 7 & ANYBODY_V2 > 2)|(ANYBODY_V1 == 7 & ANYBODY_V2 == 2 & ANYBODY_V3 >= 2)
MuscleArr = set_difference(
ObjSearchRecursive(CompleteNameOf(&.SideHumanFolderRef.Leg.Mus),"*", "AnyMuscle&"),
arrcat(
..CALIBRATION_STUDY_REF(2).MuscleArr,
..CALIBRATION_STUDY_REF(3).MuscleArr,
..CALIBRATION_STUDY_REF(5).MuscleArr,
..CALIBRATION_STUDY_REF(6).MuscleArr,
..CALIBRATION_STUDY_REF(7).MuscleArr,
..CALIBRATION_STUDY_REF(8).MuscleArr
)
);
#else
MuscleArr = arrcat(
ObjSearch(CompleteNameOf(&.SideHumanFolderRef.Leg.Mus)+".BicepsFemorisCaput*", "AnyMuscle"),
ObjSearch(CompleteNameOf(&.SideHumanFolderRef.Leg.Mus)+".Iliacus*", "AnyMuscle"),
ObjSearch(CompleteNameOf(&.SideHumanFolderRef.Leg.Mus)+".PeroneusBrevis*", "AnyMuscle"),
ObjSearch(CompleteNameOf(&.SideHumanFolderRef.Leg.Mus)+".Piriformis*", "AnyMuscle"),
ObjSearch(CompleteNameOf(&.SideHumanFolderRef.Leg.Mus)+".Popliteus*", "AnyMuscle"),
ObjSearch(CompleteNameOf(&.SideHumanFolderRef.Leg.Mus)+".RectusFemoris*", "AnyMuscle"),
ObjSearch(CompleteNameOf(&.SideHumanFolderRef.Leg.Mus)+".Sartorius*", "AnyMuscle"),
ObjSearch(CompleteNameOf(&.SideHumanFolderRef.Leg.TrunkMuscles.PsoasMajor)+".*", "AnyMuscle")
);
#endif
};