262 lines (220 with data), 8.8 kB
///This is the calibration file it will calibrate the supraspinatus, infraspinatus and triceps muscles neutral pos
AnyFolder ArmCal4 ={
AnyComponentDefinition obj = {};
AnyFolder &ThoraxSegs = ...BodyModel.Trunk.SegmentsThorax;
AnyFolder &LumbarSegs = ...BodyModel.Trunk.SegmentsLumbar;
AnyFolder &CervicalSegs = ...BodyModel.Trunk.SegmentsCervicalSpine;
AnyFolder &LumbarSpineJoints = ...BodyModel.Trunk.JointsLumbar;
AnyFolder &LumbarCervicalJoints = ...BodyModel.Trunk.JointsCervicalSpine;
AnyFolder &SegSideCal = .SideHumanFolderRef.ShoulderArm.Seg;
AnyFolder &JointsSideCal = .SideHumanFolderRef.ShoulderArm.Jnt;
#if BM_ARM_DELTOID_WRAPPING == _DELTOID_WRAPPING_RAKE_
AnyFolder& DeltoidRakeRef = .SideHumanFolderRef.ShoulderArm.Mus.ArtificialRake;
#else
AnyFolder& DeltoidWrappingPosteriorRef = .SideHumanFolderRef.ShoulderArm.Mus.DeltoidWrappingPosterior;
AnyFolder& DeltoidWrappingLateralRef = .SideHumanFolderRef.ShoulderArm.Mus.DeltoidWrappingLateral;
AnyFolder& DeltoidWrappingAnteriorRef = .SideHumanFolderRef.ShoulderArm.Mus.DeltoidWrappingAnterior;
#endif
AnyFolder& TricepsLHWrappingRef = .SideHumanFolderRef.ShoulderArm.Mus.TricepsLHWrapping;
AnyFolder &MusParCalSide = .SideHumanFolderRef.ShoulderArm.MuscleModels;
AnyFixedRefFrame ground = {
AnyRefNode node = {
ARel=.....BodyModel.Trunk.SegmentsThorax.ThoraxSeg.Axes0;
sRel=.....BodyModel.Trunk.SegmentsThorax.ThoraxSeg.r0;
};
};
AnySphericalJoint ThoraxGround={
AnyRefFrame &Ground = .ground.node;
AnyRefFrame &Sacrum= ....BodyModel.Trunk.SegmentsThorax.ThoraxSeg;
};
AnyKinEqSimpleDriver ThoraxGroundDriver = {
AnySphericalJoint &Jnt = .ThoraxGround;
DriverPos = {0,0,0};
DriverVel = {0,0,0};
Reaction.Type = {Off,Off,Off};
};
AnyKinEqSimpleDriver NeckJntDriver = {
AnyKinMeasure& lb = ....BodyModel.Interface.Trunk.SkullThoraxLateralBending;
AnyKinMeasure& ar = ....BodyModel.Interface.Trunk.SkullThoraxRotation;
AnyKinMeasure& fe = ....BodyModel.Interface.Trunk.SkullThoraxFlexion;
DriverPos = {0,0,0};
DriverVel = {0,0,0};
Reaction.Type = {On,On,On};
};
AnyKinEqSimpleDriver ThoraxDriver ={
AnyKinMeasure& Ref2 = ....BodyModel.Interface.Trunk.PelvisThoraxLateralBending;
AnyKinMeasure& Ref3 = ....BodyModel.Interface.Trunk.PelvisThoraxRotation;
AnyKinMeasure& Ref1 = ....BodyModel.Interface.Trunk.PelvisThoraxExtension;
DriverPos = pi/180*{0,0,0};
DriverVel = pi/180*{0,0,0};
Reaction.Type = {On,On,On};
};
#if !BM_ARM_SHOULDER_RHYTHM
AnyKinEqSimpleDriver SCDriver ={
AnyKinMeasureOrg SC_measure = {
AnyKinMeasure& ref = ...SideInterfaceFolderRef.SternoClavicularProtraction.SCRot;
MeasureOrganizer = {0,1};
};
DriverPos = {-0.2536878, 0.06273779};
DriverVel = {0.0,0.0};
Reaction.Type={Off,Off};
};
#endif
AnyKinEqSimpleDriver WristDriver ={
AnyKinMeasure& WF = ..SideInterfaceFolderRef.WristFlexion;
AnyKinMeasure& WA = ..SideInterfaceFolderRef.WristAbduction;
DriverPos = {0,0};
DriverVel = {0,0};
Reaction.Type={On,On};
};
AnyKinEqSimpleDriver FEDriver ={
AnyKinMeasure& FE = ..SideInterfaceFolderRef.ElbowFlexion;
DriverPos = {65*pi/180};
DriverVel = {0};
Reaction.Type = {Off};
};
AnyKinEqSimpleDriver PSDriver ={
AnyKinMeasure& PS = ..SideInterfaceFolderRef.ElbowPronation;
DriverPos = pi/180*{-90.0};
DriverVel = pi/180*{ 0.0 };
Reaction.Type = {Off};
};
AnyKinEqSimpleDriver GHDriver ={
AnyKinRotational &GHRotR = ..SideInterfaceFolderRef.GlenohumeralFlexion.GHMeasure;
DriverPos = pi/180*{0,0,0 };
DriverVel = {0,0,0};
Reaction.Type = {Off,Off,Off};
};
//---------------------------------------------------------------------
//Finger drivers
#if BM_ARM_DETAILED_HAND
//finger1
AnyKinEqSimpleDriver CMC1Flexion={
AnyRevoluteJoint &ref= ..SideHumanFolderRef.ShoulderArm.Seg.Hand.Finger1.Jnt.CMCFlexion;
DriverPos={0}*pi/180;
DriverVel={0};
};
AnyKinEqSimpleDriver CMC1Abduction={
AnyRevoluteJoint &ref= ..SideHumanFolderRef.ShoulderArm.Seg.Hand.Finger1.Jnt.CMCAbduction;
DriverPos={0}*pi/180;
DriverVel={0};
};
AnyKinEqSimpleDriver MCP1Flexion={
AnyRevoluteJoint &ref=..SideHumanFolderRef.ShoulderArm.Seg.Hand.Finger1.Jnt.MCPFlexion;
DriverPos={0}*pi/180;
DriverVel={0};
};
AnyKinEqSimpleDriver MCP1Abduction={
AnyRevoluteJoint &ref=..SideHumanFolderRef.ShoulderArm.Seg.Hand.Finger1.Jnt.MCPAbduction;
DriverPos={0}*pi/180;
DriverVel={0};
};
AnyKinEqSimpleDriver DIP1={
AnyRevoluteJoint &ref= ..SideHumanFolderRef.ShoulderArm.Seg.Hand.Finger1.Jnt.DIP;
DriverPos={0}*pi/180;
DriverVel={0};
};
// finger2
// AnyKinEqSimpleDriver CMC2={
// AnyUniversalJoint &ref= ..SideHumanFolderRef.ShoulderArm.Seg.Hand.Finger2.Jnt.CMC;
// DriverPos={0,0};
// DriverVel={0,0};
// };
AnyKinEqSimpleDriver MCP2={
AnyRevoluteJoint &ref= ..SideHumanFolderRef.ShoulderArm.Seg.Hand.Finger2.Jnt.MCP;
DriverPos={0}*pi/180;
DriverVel={0};
};
AnyKinEqSimpleDriver PIP2={
AnyRevoluteJoint &ref= ..SideHumanFolderRef.ShoulderArm.Seg.Hand.Finger2.Jnt.PIP;
DriverPos={0}*pi/180;
DriverVel={0};
};
AnyKinEqSimpleDriver DIP2={
AnyRevoluteJoint &ref= ..SideHumanFolderRef.ShoulderArm.Seg.Hand.Finger2.Jnt.DIP;
DriverPos={0};
DriverVel={0};
};
// finger3
// AnyKinEqSimpleDriver CMC3={
// AnyUniversalJoint &ref= ..SideHumanFolderRef.ShoulderArm.Seg.Hand.Finger3.Jnt.CMC;
// DriverPos={0,0};
// DriverVel={0,0};
// };
AnyKinEqSimpleDriver MCP3={
AnyRevoluteJoint &ref= ..SideHumanFolderRef.ShoulderArm.Seg.Hand.Finger3.Jnt.MCP;
DriverPos={0}*pi/180;
DriverVel={0};
};
AnyKinEqSimpleDriver PIP3={
AnyRevoluteJoint &ref= ..SideHumanFolderRef.ShoulderArm.Seg.Hand.Finger3.Jnt.PIP;
DriverPos={0}*pi/180;
DriverVel={0};
};
AnyKinEqSimpleDriver DIP3={
AnyRevoluteJoint &ref= ..SideHumanFolderRef.ShoulderArm.Seg.Hand.Finger3.Jnt.DIP;
DriverPos={0};
DriverVel={0};
};
//finger4
// AnyKinEqSimpleDriver CMC4={
// AnyUniversalJoint &ref= ..SideHumanFolderRef.ShoulderArm.Seg.Hand.Finger4.Jnt.CMC;
// DriverPos={0,0}*pi/180;
// DriverVel={0,0};
// };
AnyKinEqSimpleDriver MCP4={
AnyRevoluteJoint &ref= ..SideHumanFolderRef.ShoulderArm.Seg.Hand.Finger4.Jnt.MCP;
DriverPos={0}*pi/180;
DriverVel={0};
};
AnyKinEqSimpleDriver PIP4={
AnyRevoluteJoint &ref= ..SideHumanFolderRef.ShoulderArm.Seg.Hand.Finger4.Jnt.PIP;
DriverPos={0}*pi/180;
DriverVel={0};
};
AnyKinEqSimpleDriver DIP4={
AnyRevoluteJoint &ref= ..SideHumanFolderRef.ShoulderArm.Seg.Hand.Finger4.Jnt.DIP;
DriverPos={0}*pi/180;
DriverVel={0};
};
// finger5
// AnyKinEqSimpleDriver CMC5={
// AnyUniversalJoint &ref= ..SideHumanFolderRef.ShoulderArm.Seg.Hand.Finger5.Jnt.CMC;
// DriverPos={0,0};
// DriverVel={0,0};
// };
AnyKinEqSimpleDriver MCP5={
AnyRevoluteJoint &ref= ..SideHumanFolderRef.ShoulderArm.Seg.Hand.Finger5.Jnt.MCP;
DriverPos={0}*pi/180;
DriverVel={0};
};
AnyKinEqSimpleDriver PIP5={
AnyRevoluteJoint &ref= ..SideHumanFolderRef.ShoulderArm.Seg.Hand.Finger5.Jnt.PIP;
DriverPos={0}*pi/180;
DriverVel={0};
};
AnyKinEqSimpleDriver DIP5={
AnyRevoluteJoint &ref= ..SideHumanFolderRef.ShoulderArm.Seg.Hand.Finger5.Jnt.DIP;
DriverPos={0};
DriverVel={0};
};
#endif
AnyString MusPrefix = CompleteNameOf(&.SideHumanFolderRef.ShoulderArm.Mus);
AnyObjectPtrArray supraspinatusMuscles = ObjSearch(MusPrefix+".supraspinatus*", "AnyMuscle");
AnyObjectPtrArray infraspinatusMuscles = ObjSearch(MusPrefix+".infraspinatus*", "AnyMuscle");
AnyObjectPtrArray TricepsMuscles = ObjSearch(MusPrefix+".Triceps*", "AnyMuscle");
};
// The study: Operations to be performed on the model
AnyBodyCalibrationStudy ArmCalibrationStudy4 = {
AnyFolder &ref=.ArmCal4;
nStep = 1;
MuscleArr = arrcat(
ref.supraspinatusMuscles,
ref.infraspinatusMuscles,
ref.TricepsMuscles
);
Kinematics.KinematicTol = 1e-07;
Kinematics.SmallStepAssumptionOnOff = Off;
InitialConditions.PosAnalysisOnlyOnOff = On;
Kinematics.PosAnalysisOnlyOnOff = On;
};