--- a +++ b/Application/Examples/FreePosture/Model/MannequinInterpolation.any @@ -0,0 +1,303 @@ +//This file can be used for controlling the mannequin to certain motions +//All drivers in the model is based on interpolation drivers (PiesewiseLine) +// +//In this mannequin file you may type a vetor of values for each joint or +//make a reference to a file containing the values as a column +//For each data vector there must be an equivalent time serie +// +//In this file there are examples of joints which are diven using two values, three values +//(Hip and Glenohumeral) and finally there is a joint using an include file (PelvisThorax rotation) + + +Main.HumanModel.Mannequin ={ + + // special functions to estimate initial conditions + #include "InterpolationFunctions.any" + + Posture ={ + + AnyVector TimeSerie={0/4,1/4,2/4,3/4,4/4}; //This time serie should be used in general + + AnyVector PelvisPosTime=TimeSerie; + AnyVector PelvisPos = .InterpolationFunctions.PelvisGroundFunction(Main.Study.tStart); // uses Pelvis..Vec + + //This controls the position of the pelvi wrt. to the global reference frame + PelvisPosX= PelvisPos[0]; + PelvisPosY= PelvisPos[1]; + PelvisPosZ= PelvisPos[2]; + + //This controls the rotation of the pelvis wrt. to the global reference frame + AnyVector PelvisRotTime=TimeSerie; + PelvisRotX=(180/pi)*PelvisPos[3]; + PelvisRotY=(180/pi)*PelvisPos[4]; + PelvisRotZ=(180/pi)*PelvisPos[5]; + + + AnyVector PelvisPosXVec={0,0,0,0,0}; + AnyVector PelvisPosYVec={1,1,1,1,1}; + AnyVector PelvisPosZVec={0,0,0,0,0}; + AnyVector PelvisRotXVec={0,0,0,0,0}; + AnyVector PelvisRotYVec={0,0,0,0,0}; + AnyVector PelvisRotZVec={0,0,0,0,0}; + + + // These variables control the rotation of the thorax wrt the + // pelvis + AnyVector PelvisThoraxTime=TimeSerie; + AnyVector ThoraxRot = .InterpolationFunctions.PostureFunction(Main.Study.tStart); // uses PelvisThorax..Vec + PelvisThoraxExtension=(180/pi)*ThoraxRot[0]; + PelvisThoraxLateralBending=(180/pi)*ThoraxRot[1]; + PelvisThoraxRotation=(180/pi)*ThoraxRot[2]; + + AnyVector PelvisThoraxExtensionVec={0,0,0,0,0}; + AnyVector PelvisThoraxLateralBendingVec={0,0,0,0,0}; + AnyVector PelvisThoraxRotationVec={0,0,0,0,0}; + + AnyVector NeckTime=TimeSerie; + NeckExtension =(180/pi)*.InterpolationFunctions.NeckFunction(Main.Study.tStart)[2]; // uses NeckExtensionVec + NeckRotation =(180/pi)*.InterpolationFunctions.NeckFunction(Main.Study.tStart)[1]; // uses NeckAxialRotationVec + NeckLateralBending =(180/pi)*.InterpolationFunctions.NeckFunction(Main.Study.tStart)[0]; // uses NeckLateralBendingVec + + + AnyVector NeckExtensionVec={0,0,0,0,0}; + AnyVector NeckLateralBendingVec={0,0,0,0,0}; + AnyVector NeckAxialRotationVec={0,0,0,0,0}; + + Right ={ + //Arm + AnyVector SternoClavicularTime=.TimeSerie; + AnyVector SternoClavicularProtractionVec={-23,-23,-23,-23,-23}; //This value is not used for initial position + AnyVector SternoClavicularElevationVec={11.5,11.5,11.5,11.5,11.5}; //This value is not used for initial position + + AnyVector GlenohumeralTime=.TimeSerie; + AnyVec3 GHInitPos = ..InterpolationFunctions.GHFunctionRight(Main.Study.tStart); // uses Glenohumeral..Vec + GlenohumeralFlexion = (180/pi)*GHInitPos[0]; + GlenohumeralAbduction = (180/pi)*GHInitPos[1]; + GlenohumeralExternalRotation = (180/pi)*GHInitPos[2]; + + AnyVector GlenohumeralFlexionVec =0.5*{10,30,50,70,90} ; + AnyVector GlenohumeralAbductionVec ={ 10,30,50,70,90}; + AnyVector GlenohumeralExternalRotationVec ={10,30,50,70,90}; + + AnyVector ElbowFlexionTime=.TimeSerie; + ElbowFlexion =(180/pi)*..InterpolationFunctions.ElbowFlexionFunctionRight(Main.Study.tStart)[0]; // uses ElbowFlexionVec + AnyVector ElbowFlexionVec ={ 0,12,24,36,50}; + + AnyVector ElbowPronationTime=.TimeSerie; + ElbowPronation =(180/pi)*..InterpolationFunctions.ElbowPronationFunctionRight(Main.Study.tStart)[0]; // uses ElbowPronationVec + AnyVector ElbowPronationVec ={ 0.0,-15,-30,-45,-60.0}; + + + AnyVector WristTime=.TimeSerie; + AnyVector WristRot =(180/pi)*..InterpolationFunctions.WristFunctionLeft (Main.Study.tStart); // uses Wrist..Vec + WristFlexion =(180/pi)*WristRot[0]; + WristAbduction =(180/pi)*WristRot[1]; + + AnyVector WristFlexionVec ={0,2.5,5,7.5,10}; + AnyVector WristAbductionVec ={0,2.5,5,7.5,10}; + + Finger1 ={ + AnyVector FingerTime=..TimeSerie; + AnyVector CMCDeviationVec={0,-5,-10,-15,-20}; + AnyVector CMCFlexionVec={0,5,10,15,20}; + AnyVector MCPFlexionVec= {0,5,10,15,20}; + AnyVector MCPDeviationVec={0,0,0,0,0}; + AnyVector DIPFlexionVec={0,5,10,15,20}; + CMCFlexion=...InterpolationFunctions.Right.CMC1Flexion(Main.Study.tStart)[0]; + CMCDeviation=...InterpolationFunctions.Right.CMC1Abduction(Main.Study.tStart)[0]; + MCPFlexion=...InterpolationFunctions.Right.MCP1Flexion(Main.Study.tStart)[0]; + MCPDeviation=...InterpolationFunctions.Right.MCP1Abduction(Main.Study.tStart)[0]; + DIPFlexion=...InterpolationFunctions.Right.DIP1(Main.Study.tStart)[0]; + + }; + + Finger2 ={ + AnyVector FingerTime=..TimeSerie; + AnyVector MCPFlexionVec={50,60,70,80,90}; + AnyVector PIPFlexionVec={50,60,70,80,90}; + AnyVector DIPFlexionVec={50,60,70,80,90}; + MCPFlexion=...InterpolationFunctions.Right.MCP2(Main.Study.tStart)[0]; + PIPFlexion=...InterpolationFunctions.Right.PIP2(Main.Study.tStart)[0]; + DIPFlexion=...InterpolationFunctions.Right.DIP2(Main.Study.tStart)[0]; + }; + + Finger3 ={ + AnyVector FingerTime=..TimeSerie; + AnyVector MCPFlexionVec={0,5,10,15,20}; + AnyVector PIPFlexionVec={0,5,10,15,20}; + AnyVector DIPFlexionVec={0,5,10,15,20}; + MCPFlexion=...InterpolationFunctions.Right.MCP3(Main.Study.tStart)[0]; + PIPFlexion=...InterpolationFunctions.Right.PIP3(Main.Study.tStart)[0]; + DIPFlexion=...InterpolationFunctions.Right.DIP3(Main.Study.tStart)[0]; + + }; + + Finger4 ={ + AnyVector FingerTime=..TimeSerie; + AnyVector MCPFlexionVec={0,5,10,15,20}; + AnyVector PIPFlexionVec={0,5,10,15,20}; + AnyVector DIPFlexionVec={0,5,10,15,20}; + MCPFlexion=...InterpolationFunctions.Right.MCP4(Main.Study.tStart)[0]; + PIPFlexion=...InterpolationFunctions.Right.PIP4(Main.Study.tStart)[0]; + DIPFlexion=...InterpolationFunctions.Right.DIP4(Main.Study.tStart)[0]; + + }; + + Finger5 ={ + AnyVector FingerTime=..TimeSerie; + AnyVector MCPFlexionVec={0,5,10,15,20}; + AnyVector PIPFlexionVec={0,5,10,15,20}; + AnyVector DIPFlexionVec={0,5,10,15,20}; + MCPFlexion=...InterpolationFunctions.Right.MCP5(Main.Study.tStart)[0]; + PIPFlexion=...InterpolationFunctions.Right.PIP5(Main.Study.tStart)[0]; + DIPFlexion=...InterpolationFunctions.Right.DIP5(Main.Study.tStart)[0]; + }; + + + AnyVector HipTime=.TimeSerie; + + AnyVector HipRot =..InterpolationFunctions.HipFunctionRight(Main.Study.tStart); // uses Hip...Vec + HipFlexion =(180/pi)*HipRot[0]; + HipAbduction =(180/pi)*HipRot[1]; + HipExternalRotation =(180/pi)*HipRot[2]; + + AnyVector HipFlexionVec ={ 20,55,90,45,0}; + AnyVector HipAbductionVec ={ 0,0.0,0,0,0}; + AnyVector HipExternalRotationVec ={ 10,5,0,-5,-10}; + + AnyVector KneeTime=.TimeSerie; + KneeFlexion =(180/pi)*..InterpolationFunctions.KneeFunctionRight(Main.Study.tStart)[0]; // uses KneeFlexionVec + AnyVector KneeFlexionVec ={ 30.0,24,16,8,0}; + + AnyVector AnkleTime=.TimeSerie; + AnyVector AnkleRot = ..InterpolationFunctions.AnkleFunctionRight(Main.Study.tStart); + AnklePlantarFlexion =(180/pi)*AnkleRot[0]; + SubTalarEversion =(180/pi)*AnkleRot[1]; // uses SubTalarEversionVec + + AnyVector AnklePlantarFlexionVec ={0,5,10,15,20}; + AnyVector SubTalarEversionVec ={0,5,10,15,20}; //used by Leg + }; + + Left ={ + //all values are set to be equal to the right side values + //feel free to change this! + + //Arm + AnyVector SternoClavicularTime=.Right.SternoClavicularTime; + AnyVector SternoClavicularProtractionVec=.Right.SternoClavicularProtractionVec; + AnyVector SternoClavicularElevationVec=.Right.SternoClavicularElevationVec; + + AnyVector GlenohumeralTime=.Right.GlenohumeralTime; + AnyVec3 GHInitPos = ..InterpolationFunctions.GHFunctionLeft(Main.Study.tStart); // uses Glenohumeral..Vec + GlenohumeralFlexion = (180/pi)*GHInitPos[0]; + GlenohumeralAbduction = (180/pi)*GHInitPos[1]; + GlenohumeralExternalRotation = (180/pi)*GHInitPos[2]; + AnyVector GlenohumeralFlexionVec = .Right.GlenohumeralFlexionVec ; + AnyVector GlenohumeralAbductionVec =.Right.GlenohumeralAbductionVec; + AnyVector GlenohumeralExternalRotationVec =.Right.GlenohumeralExternalRotationVec ; + + AnyVector ElbowFlexionTime=.Right.ElbowFlexionTime; + ElbowFlexion =(180/pi)*..InterpolationFunctions.ElbowFEFunctionLeft(Main.Study.tStart)[0]; // uses ElbowFlexionVec + AnyVector ElbowFlexionVec = .Right.ElbowFlexionVec; + + AnyVector ElbowPronationTime=.Right.ElbowPronationTime; + ElbowPronation =(180/pi)*..InterpolationFunctions.ElbowPSFunctionLeft(Main.Study.tStart)[0]; // uses ElbowPronationVec + AnyVector ElbowPronationVec = .Right.ElbowPronationVec; + + AnyVector WristTime=.Right.WristTime; + AnyVector WristRot =(180/pi)*..InterpolationFunctions.WristFunctionLeft(Main.Study.tStart); // uses Wrist..Vec + WristFlexion =(180/pi)*WristRot[0]; + WristAbduction =(180/pi)*WristRot[1]; + AnyVector WristFlexionVec =.Right.WristFlexionVec; + AnyVector WristAbductionVec =.Right.WristAbductionVec; + + + + + + Finger1 ={ + AnyVector FingerTime=..TimeSerie; + AnyVector CMCDeviationVec={0,-5,-10,-15,-20}; + AnyVector CMCFlexionVec={0,5,10,15,20}; + AnyVector MCPFlexionVec= {0,5,10,15,20}; + AnyVector MCPDeviationVec={0,0,0,0,0}; + AnyVector DIPFlexionVec={0,5,10,15,20}; + CMCFlexion=...InterpolationFunctions.Left.CMC1Flexion(Main.Study.tStart)[0]; + CMCDeviation=...InterpolationFunctions.Left.CMC1Abduction(Main.Study.tStart)[0]; + MCPFlexion=...InterpolationFunctions.Left.MCP1Flexion(Main.Study.tStart)[0]; + MCPDeviation=...InterpolationFunctions.Left.MCP1Abduction(Main.Study.tStart)[0]; + DIPFlexion=...InterpolationFunctions.Left.DIP1(Main.Study.tStart)[0]; + + }; + + Finger2 ={ + AnyVector FingerTime=..TimeSerie; + AnyVector MCPFlexionVec={50,60,70,80,90}; + AnyVector PIPFlexionVec={50,60,70,80,90}; + AnyVector DIPFlexionVec={50,60,70,80,90}; + MCPFlexion=...InterpolationFunctions.Left.MCP2(Main.Study.tStart)[0]; + PIPFlexion=...InterpolationFunctions.Left.PIP2(Main.Study.tStart)[0]; + DIPFlexion=...InterpolationFunctions.Left.DIP2(Main.Study.tStart)[0]; + }; + + Finger3 ={ + AnyVector FingerTime=..TimeSerie; + AnyVector MCPFlexionVec={0,5,10,15,20}; + AnyVector PIPFlexionVec={0,5,10,15,20}; + AnyVector DIPFlexionVec={0,5,10,15,20}; + MCPFlexion=...InterpolationFunctions.Left.MCP3(Main.Study.tStart)[0]; + PIPFlexion=...InterpolationFunctions.Left.PIP3(Main.Study.tStart)[0]; + DIPFlexion=...InterpolationFunctions.Left.DIP3(Main.Study.tStart)[0]; + + }; + + Finger4 ={ + AnyVector FingerTime=..TimeSerie; + AnyVector MCPFlexionVec={0,5,10,15,20}; + AnyVector PIPFlexionVec={0,5,10,15,20}; + AnyVector DIPFlexionVec={0,5,10,15,20}; + MCPFlexion=...InterpolationFunctions.Left.MCP4(Main.Study.tStart)[0]; + PIPFlexion=...InterpolationFunctions.Left.PIP4(Main.Study.tStart)[0]; + DIPFlexion=...InterpolationFunctions.Left.DIP4(Main.Study.tStart)[0]; + + }; + + Finger5 ={ + AnyVector FingerTime=..TimeSerie; + AnyVector MCPFlexionVec={0,5,10,15,20}; + AnyVector PIPFlexionVec={0,5,10,15,20}; + AnyVector DIPFlexionVec={0,5,10,15,20}; + MCPFlexion=...InterpolationFunctions.Left.MCP5(Main.Study.tStart)[0]; + PIPFlexion=...InterpolationFunctions.Left.PIP5(Main.Study.tStart)[0]; + DIPFlexion=...InterpolationFunctions.Left.DIP5(Main.Study.tStart)[0]; + }; + + + + + + //Leg + AnyVector HipTime=.Right.HipTime; + HipFlexion =.Right.HipFlexion; + AnyVector HipFlexionVec =.Right.HipFlexionVec; + HipAbduction =.Right.HipAbduction; + AnyVector HipAbductionVec =.Right.HipAbductionVec; + HipExternalRotation = .Right.HipExternalRotation; + AnyVector HipExternalRotationVec = .Right.HipExternalRotationVec; + + AnyVector KneeTime=.Right.KneeTime; + KneeFlexion = .Right.KneeFlexion; + AnyVector KneeFlexionVec = .Right.KneeFlexionVec; + + AnyVector AnkleTime=.Right.AnkleTime; + AnklePlantarFlexion = .Right.AnklePlantarFlexion ; + AnyVector AnklePlantarFlexionVec = .Right.AnklePlantarFlexionVec ; + SubTalarEversion =.Right.SubTalarEversion; + AnyVector SubTalarEversionVec =.Right.SubTalarEversionVec; + }; + }; + PostureVel={}; +}; + + +