[bfdf16]: / Body / AAUHuman / LegTLEM1 / TLEM1.2 / ModelSegmentParameters.any

Download this file

227 lines (186 with data), 9.8 kB

/* 
This dataset is based on the PhD thesis by Martijn D. Klein Horsman titled
"The Twente Lower Extremity Model (TLEM): Consistent Dynamic Simulation of the
Human Locomotor Apparatus" 

Some model parameters from the orginal dataset have later been modified.
The model is therefore denoted as TLEM 1.1. 

Use the following paper when citing: 
Klein Horsman, M.D., Koopman, H.F.J.M., van der Helm, F.C.T., Prosé, L.P.,
Veeger, H.E.J., 2007. Morphological muscle and joint parameters for 
musculoskeletal modelling of the lower extremity. Clin. Biomech. 22,
239-247. doi:10.1016/j.clinbiomech.2006.10.003
*/ 


Pelvis = {
  AnyMat33 RotNeutral = .TF*{{1,0,0},{0,1,0},{0,0,1}}*.TF';
  AnyVec3 PosNeutral = {0,0,0}*.TF';
  
  AnyVar MassStandard = 10.65; 
  AnyVec3 Jii = {0.0221,0.01,0.0221}; //Taken from SimpleSpineModel 
  AnyVec3 Jij = {0,0,0};
  //2015.04.01: Discuss whether we want the idential defnitions of standard parameters betwen TLEM 1.1 and TLEL 2.2 or just keep toe original value of TLEM 1.1?
  AnyVar Density = 1000;
  AnyVec3 sCoM = {-0.06261986, -0.02108551, -7.232836e-011};//{0.038, -0.050, 0.000000};
  
  //AnyVar PelvisWidth = 0.16;
  
  //--> Folowing lines can be used for the definition of width and depth standards
  //AnyVar WidthStandard = 2*..Seg.Pelvis.Muscles.StdPar.HipJointTD[2];
  //AnyVar DepthStandard = vnorm({..Seg.Pelvis.Muscles.StdPar.AsisIpsilateral[0],..Seg.Pelvis.Muscles.StdPar.AsisIpsilateral[1],0.0}-{..Seg.Pelvis.Muscles.StdPar.PsisIpsilateral[0],..Seg.Pelvis.Muscles.StdPar.PsisIpsilateral[1],0.0});
  //<--
  
  //-->Following lines can be used for checking values after scaling
  //AnyVar WidthAfetScaling = 2*..Seg.Pelvis.HipJoint.sRel[2];
  //AnyVar DepthAfetScaling = vnorm({..Seg.Pelvis.Muscles.ASIS.sRel[0],..Seg.Pelvis.Muscles.ASIS.sRel[1],0.0}-{..Seg.Pelvis.Muscles.PSIS.sRel[0],..Seg.Pelvis.Muscles.PSIS.sRel[1],0.0});
  //<--
  
  AnyVar Width = 0.1791738;
  AnyVar Depth = 0.1509133;
  AnyVar Height = 0.1188;
  
  
  AnyMat33 MirrorTF = { {1, 0, 0}, {0, 1, 0}, {0, 0, -1}};
  
  AnyMatrix SacralInterfaceMorphingPointsPickedMidline = {
    {-0.07369288, 0.004025828, 0},//0
    {-0.1100097, 0.01317812, 0}, //1
    {-0.1485323, -0.002101483, 0},//2
    {-0.1430745, -0.03345914, 0},//3
    {-0.1432201, -0.07356633, 0},//4
    {-0.1085752, -0.134054, 0},//5
    {-0.1164095, -0.1242992, 0},//20
    {-0.133289, -0.08419479, 0}//21
  };
  
  AnyMatrix SacralInterfaceMorphingPointsPickedRight = {
    {-0.1265083, -0.1144332, 0.0242102},//6
    {-0.07790584, -0.0261221, 0.0481419},//8
    {-0.1065565, 0.02910004, 0.0448075},//9
    {-0.1126668, -0.006295611, 0.0471374},//10
    {-0.1164182, -0.1275822, 0.00921956},//17
    {-0.1302942, -0.1186217, 0.00555406},//18
    {-0.1438101, -0.09824958, 0.00761028}
  };
  
  AnyMat33 LeftMirror = { {1, 0, 0}, {0, 1, 0}, {0, 0, -1}};
  
  //Trick to ensure symmetry on Z   
  AnyFloat SacralInterfaceMorphingPoints = arrcat(
    SacralInterfaceMorphingPointsPickedMidline,
    SacralInterfaceMorphingPointsPickedRight,
    SacralInterfaceMorphingPointsPickedRight * LeftMirror
  );
  
  AnyFloat PelvicIntefaceMorphingRightPoints ={
    {0.02240851, -0.0888793, 0.00308862},
    {0.02268664, -0.0869409, 0.0222285},
    {0.003750947, -0.1247058, 0.00130153},
    {-0.004876249, -0.1369921, 0.0147677}, 
    {-0.03228415, -0.1490351, 0.0277551},
    {-0.03009617, -0.1062675, 0.052601},
    {-0.0002474069, -0.09352183, 0.0413888},
    {-0.04803731, -0.1065678, 0.0647686},
    {-0.07682194, -0.144646, 0.0707131},
    {-0.09063459, -0.1244552, 0.0583294},
    {-0.08823146, -0.1125244, 0.0676488},
    {-0.04973688, -0.07744436, 0.058101},
    {-0.02876999, -0.05977447, 0.104659},
    {-0.0159832, -0.07207968, 0.0769104},
    {-0.09527254, -0.08097612, 0.0394258},
    {-0.09166462, -0.04775184, 0.0633524},
    {-0.1255201, -0.05731683, 0.0398098},
    {-0.1389841, -0.04597406, 0.0408372},
    {-0.144759, -0.01413459, 0.0531922},
    {-0.143318, 0.002153856, 0.0380651},
    {-0.08972527, 0.03075606, 0.0460838},
    {-0.07332624, -0.01475011, 0.0537752},
    {-0.09735199, -0.03822627, 0.0444374},
    {-0.09614008, 0.05333562, 0.0708822},
    {-0.1206242, 0.04952467, 0.0760382},
    {-0.05438311, 0.02650913, 0.142879},
    {-0.04527436, -0.02429768, 0.111206}, 
    {-0.0174332, -0.02211884, 0.115286},
    {-0.002538481, 0.005762745, 0.133105},
    {-0.0214557, 0.0116454, 0.150671},
    {-0.04849145, -0.01136248, 0.103029},
    AsisIpsilateral*.TF', 
    PsisIpsilateral*.TF',
    PubicTubercleIpsilateral*.TF'
  };  
    
  AnyMatrix points_RBF_unscaled = arrcat(
    SacralInterfaceMorphingPoints,
    PelvicIntefaceMorphingRightPoints,
    PelvicIntefaceMorphingRightPoints*LeftMirror
  );
  
};
  
  
  
  
  Thigh = {
    AnyMat33 RotNeutral = .TF*{{0.8599106, -0.282679, 0.4250251}, {0.2370946, 0.9585771, 0.1578482}, {-0.4520397, -0.03496416, 0.8913123}}*.TF';
    AnyVec3 PosNeutral= {0,0,0}*.TF';
    
    AnyVec3 sCoM = { 0.0370, -0.1562, -0.0044 }*.TF'; // center of mass with respect to the global frame, Klein Horsman
    AnyVar MassStandard = 7; //11.54; // kg, Klein Horsman dataset
    AnyVar LengthStandard = vnorm(..Seg.Thigh.StdPar.HipJoint-..Seg.Thigh.StdPar.KneeJoint);
    AnyVar KneeWidth =  0.0975;
    AnyVar Density = 1000;
    
    AnyVar Length = vnorm(..Seg.Thigh.StdPar.KneeJoint-..Seg.Thigh.StdPar.HipJoint);
    AnyVar Radius = (..Seg.Thigh.Mass/(pi*Length*Density))^0.5;
    AnyVar Ixx = 0.25*..Seg.Thigh.Mass*Radius*Radius + 1/12*..Seg.Thigh.Mass*Length*Length;
    AnyVar Iyy = 0.5*..Seg.Thigh.Mass*Radius*Radius;
    AnyVar Izz = Ixx;
    AnyMat33 JM=..Seg.Thigh.ScalingNode.ARel*{{Ixx,0,0},{0,Iyy,0},{0,0,Izz}}*..Seg.Thigh.ScalingNode.ARel';
    AnyVec3 Jii = {JM[0][0], JM[1][1], JM[2][2]};
    AnyVec3 Jij = {JM[1][0], JM[2][1], JM[2][0]};
  };
  
  Patella = {
    AnyMat33 RotNeutral=  .TF*{{0.8413937, -0.3438114, 0.4169537}, {0.2909235, 0.9383572, 0.1866795}, {-0.4554341, -0.03576931, 0.8895507}}*.TF';
    AnyVec3 PosNeutral= {-0.02273882, -0.01022388, -0.0001574515}*.TF';
    
    AnyVar MassStandard = 0;  
    AnyVar LengthStandard = 0;
    AnyVar Density = 1000;
    
    AnyVar Ixx = 0.00;
    AnyVar Iyy = 0.00;
    AnyVar Izz = Ixx;
    AnyVec3 Jii = {Ixx, Iyy, Izz};
    AnyVec3 Jij = {0,0,0};
  };
  
  Shank = {
    AnyMat33 RotNeutral=  .TF*{{0.8300924, -0.3723314, 0.4151095}, {0.3156664, 0.9274211, 0.2006112}, {-0.4596751, -0.03548973, 0.8873777}}*.TF';
    AnyVec3 PosNeutral=  {-0.03433748, -0.01727983, 0.0002472468}*.TF';
    
    AnyVec3 sCoM = { 0.0757, -0.5700, 0.0175}*.TF';
    AnyVar MassStandard = 4.00;
    AnyVar LengthStandard = vnorm(..Seg.Shank.StdPar.KneeJoint-..Seg.Shank.StdPar.AnkleJoint);
    AnyVar AnkleWidth =  0.0753;  
    AnyVar Density = 1000;
    
    AnyVar Length = vnorm(..Seg.Shank.KneeJoint.sRel-..Seg.Shank.AnkleJoint.sRel);
    AnyVar Radius = (..Seg.Shank.Mass/(pi*Length*..StandardParameters.Shank.Density))^0.5;
    AnyVar Ixx = 0.25*..Seg.Shank.Mass*Radius*Radius + 1/12*..Seg.Shank.Mass*Length*Length;
    AnyVar Iyy = 0.5*..Seg.Shank.Mass*Radius*Radius;
    AnyVar Izz = Ixx; 
    AnyMat33 JM=..Seg.Shank.ScalingNode.ARel*{{Ixx,0,0},{0,Iyy,0},{0,0,Izz}}*..Seg.Shank.ScalingNode.ARel';
    AnyVec3 Jii = {JM[0][0], JM[1][1], JM[2][2]};
    AnyVec3 Jij = {JM[1][0], JM[2][1], JM[2][0]};
  };
  
  Talus = {
    // Orientation of the segment coordinate system with respect to the neutral configuration 
    AnyMat33 RotNeutral= .TF*{{0.6172795, -0.7692081, 0.1651814}, {0.656022, 0.619138, 0.4316287}, {-0.4342824, -0.1580729, 0.8867986}}*.TF';
    AnyVec3 PosNeutral=  {-0.3408125, -0.2974407, -0.1020002}*.TF';

    AnyVar LengthStandard = 0.133*vnorm(.Foot.BigToeNode-.Foot.HeelNode);

    AnyVec3 sCoM = (SubTalarJoint + AnkleJoint)/2;
    AnyVar MassStandard = 0.2*.GlobalParameters.FootMass;
    AnyVar Density = 1000;
    
    #if BM_FOOT_MODEL == _FOOT_MODEL_DEFAULT_
    AnyVar Ixx = 2/5 * ..Seg.Talus.Mass * (vnorm(0.5*(..Seg.Talus.AnkleJoint.sRel - ..Seg.Talus.MedialMalleolus.sRel)))^2;
    AnyVar Iyy = Ixx;
    AnyVar Izz = Ixx;
    AnyVec3 Jii = {Ixx, Iyy, Izz};
    AnyVec3 Jij = {0,0,0};
    #endif
  };
  
  Foot = {
    // Orientation of the segment coordinate system with respect to the neutral configuration 
    AnyMat33 RotNeutral = .TF*{{0.6099325, -0.7687855, 0.1922271}, {0.6579831, 0.6264938, 0.4178082}, {-0.4416339, -0.1283527, 0.8879668}}*.TF';
    AnyVec3 PosNeutral=   {-0.3403442, -0.2911108, -0.07621118}*.TF';
    
    AnyVec3 sCoM = {0.1048, -0.8814, 0.0114}*.TF';
    AnyVar MassStandard = 0.8*.GlobalParameters.FootMass; 
    AnyVar LengthStandard = vnorm(BigToeNode-HeelNode); 
    AnyVar HeightStandard = vnorm(.Foot.SubTalarJoint-.Foot.HeelContactNodeLow);
    AnyVar WidthStandard = vnorm(.Foot.ToeLateralContactNode-.Foot.ToeMedialContactNode);
  
    
    AnyVar Density = 1000;
    
    AnyVar HeelHeight = 0.05;  // This was used previously, need to figure out how to compute this value 
    
    #if BM_FOOT_MODEL == _FOOT_MODEL_DEFAULT_
    AnyVar Length = vnorm(..Seg.Foot.BigToeNode.sRel-..Seg.Foot.HeelNode.sRel); 
    AnyVar Radius = (..Seg.Foot.Mass/(pi*Length*Density))^0.5;
    AnyVar Ixx = 0.25*..Seg.Foot.Mass*Radius*Radius + 1/12*..Seg.Foot.Mass*Length*Length;
    AnyVar Iyy = 0.5*..Seg.Foot.Mass*Radius*Radius;
    AnyVar Izz = Ixx;
    AnyMat33 JM=..Seg.Foot.ScalingNode.ARel*{{Iyy,0,0},{0,Ixx,0},{0,0,Izz}}*..Seg.Foot.ScalingNode.ARel';
    AnyVec3 Jii = {JM[0][0], JM[1][1], JM[2][2]};
    AnyVec3 Jij = {JM[1][0], JM[2][1], JM[2][0]};
    #endif
  };