--- a +++ b/Body/AAUHuman/Trunk/JointsLumbar.any @@ -0,0 +1,208 @@ +/** +Definitions of the Joints in the lumbar spine. From PelvisL5 to T12L1 +*/ +AnyFolder JointsLumbar = { + + + AnySphericalJoint SacrumPelvisJnt = { + AnyRefNode &PelvisNode = ..SegmentsLumbar.PelvisSeg.PelvisSacrumJntNode; + AnyRefNode &SacrumNode = ..SegmentsLumbar.SacrumSeg.SacrumPelvisJntNode; + + }; + //There are no muscles attached to sacrum + AnyReacForce SacrumPelvisReaction = { + AnySphericalJoint &ref=.SacrumPelvisJnt ; + }; + + AnySphericalJoint L5SacrumJnt = { + AnyRefNode &SacrumNode = ..SegmentsLumbar.SacrumSeg.SacrumL5JntNode; + AnyRefNode &L5Node = ..SegmentsLumbar.L5Seg.L5SacrumJntNode; + //Joint reaction force transformed to the rotated reference node aligned with the vertebral body. + AnyForceMomentMeasure2 ReactionForceRotated = { + RefPoint = &.SacrumNode.RotNode; + IncludeForces = {&.Constraints.Reaction}; + IncludeSegments = {&...SegmentsLumbar.SacrumSeg}; + AnyFloat Flocal = -F * .SacrumNode.RotNode.Axes; + }; + }; + + AnySphericalJoint L4L5Jnt = { + AnyRefNode &L5Node = ..SegmentsLumbar.L5Seg.L4L5JntNode; + AnyRefNode &L4Node = ..SegmentsLumbar.L4Seg.L4L5JntNode; + //Joint reaction force transformed to the rotated reference node aligned with the vertebral body. + AnyForceMomentMeasure2 ReactionForceRotated = { + RefPoint = &.L5Node.RotNode; + IncludeForces = {&.Constraints.Reaction}; + IncludeSegments = {&...SegmentsLumbar.L5Seg}; + AnyFloat Flocal = -F * .L5Node.RotNode.Axes; + }; + }; + + AnySphericalJoint L3L4Jnt = { + AnyRefNode &L4Node = ..SegmentsLumbar.L4Seg.L3L4JntNode; + AnyRefNode &L3Node = ..SegmentsLumbar.L3Seg.L3L4JntNode; + //Joint reaction force transformed to the rotated reference node aligned with the vertebral body. + AnyForceMomentMeasure2 ReactionForceRotated = { + RefPoint = &.L4Node.RotNode; + IncludeForces = {&.Constraints.Reaction}; + IncludeSegments = {&...SegmentsLumbar.L4Seg}; + AnyFloat Flocal = -F * .L4Node.RotNode.Axes; + }; + }; + + AnySphericalJoint L2L3Jnt = { + AnyRefNode &L3Node = ..SegmentsLumbar.L3Seg.L2L3JntNode; + AnyRefNode &L2Node = ..SegmentsLumbar.L2Seg.L2L3JntNode; + //Joint reaction force transformed to the rotated reference node aligned with the vertebral body. + AnyForceMomentMeasure2 ReactionForceRotated = { + RefPoint = &.L3Node.RotNode; + IncludeForces = {&.Constraints.Reaction}; + IncludeSegments = {&...SegmentsLumbar.L3Seg}; + AnyFloat Flocal = -F * .L3Node.RotNode.Axes; + }; + }; + + AnySphericalJoint L1L2Jnt = { + AnyRefNode &L2Node = ..SegmentsLumbar.L2Seg.L1L2JntNode; + AnyRefNode &L1Node = ..SegmentsLumbar.L1Seg.L1L2JntNode; + //Joint reaction force transformed to the rotated reference node aligned with the vertebral body. + AnyForceMomentMeasure2 ReactionForceRotated = { + RefPoint = &.L2Node.RotNode; + IncludeForces = {&.Constraints.Reaction}; + IncludeSegments = {&...SegmentsLumbar.L2Seg}; + AnyFloat Flocal = -F * .L2Node.RotNode.Axes; + }; + }; + + AnySphericalJoint T12L1Jnt = { + AnyRefNode &L1Node = ..SegmentsLumbar.L1Seg.T12L1JntNode; + AnyRefNode &T12Node = ..SegmentsThorax.T12Seg.T12L1JntNode; + //Joint reaction force transformed to the rotated reference node aligned with the vertebral body. + AnyForceMomentMeasure2 ReactionForceRotated = { + RefPoint = &.L1Node.RotNode; + IncludeForces = {&.Constraints.Reaction}; + IncludeSegments = {&...SegmentsLumbar.L1Seg}; + AnyFloat Flocal = -F * .L1Node.RotNode.Axes; + }; + }; + + #if BM_TRUNK_LUMBAR_RHYTHM != OFF + + //Spine rhythm leaves three rotational dof between pelvis and thorax free + + RhythmDriverLinear SpineRhythmDrvFlexion(RELATIVE_TO_DOF=6, _REDEFINE_VARIABLES=On) = { + + AnyVector RhythmCoefficients ??= + { + 7.105616e-002, + 2.276759e-001, + 4.020500e-001, + 5.784718e-001, + 7.462112e-001, + 9.131695e-001, + 1 + }; + + Measures.Input = + { + AnyJoint &u1 = ...SacrumPelvisJnt; + AnyJoint &u2 = ...L5SacrumJnt; + AnyJoint &u3 = ...L4L5Jnt; + AnyJoint &u4 = ...L3L4Jnt; + AnyJoint &u5 = ...L2L3Jnt; + AnyJoint &u6 = ...L1L2Jnt; + AnyJoint &u7 = ...T12L1Jnt; + MeasureOrganizer = {2, 5, 8, 11, 14, 17, 20}; + }; + + #if BM_TRUNK_LUMBAR_RHYTHM == _RHYTHM_SOFT_ + CType = repmat(nDim, Soft); + #endif + + }; + + RhythmDriverLinear SpineRhythmDrvRotation(RELATIVE_TO_DOF=6, _REDEFINE_VARIABLES=On) = { + + AnyVector RhythmCoefficients ??= + { + 0, + 1.421123e-001, + 3.132395e-001, + 4.908604e-001, + 6.660833e-001, + 8.263391e-001, + 1 + }; + + Measures.Input = + { + AnyJoint &u1 = ...SacrumPelvisJnt; + AnyJoint &u2 = ...L5SacrumJnt; + AnyJoint &u3 = ...L4L5Jnt; + AnyJoint &u4 = ...L3L4Jnt; + AnyJoint &u5 = ...L2L3Jnt; + AnyJoint &u6 = ...L1L2Jnt; + AnyJoint &u7 = ...T12L1Jnt; + MeasureOrganizer = {1, 4, 7, 10, 13, 16, 19}; + + }; + + #if BM_TRUNK_LUMBAR_RHYTHM == _RHYTHM_SOFT_ + CType = repmat(nDim, Soft); + #endif + + }; + + RhythmDriverLinear SpineRhythmDrvLatBending(RELATIVE_TO_DOF=6, _REDEFINE_VARIABLES=On) = { + + AnyVector RhythmCoefficients ??= + { + 7.105616e-002, + 2.276759e-001, + 4.020500e-001, + 5.784718e-001, + 7.462112e-001, + 9.131695e-001, + 1 + }; + + Measures.Input = + { + AnyJoint &u1 = ...SacrumPelvisJnt; + AnyJoint &u2 = ...L5SacrumJnt; + AnyJoint &u3 = ...L4L5Jnt; + AnyJoint &u4 = ...L3L4Jnt; + AnyJoint &u5 = ...L2L3Jnt; + AnyJoint &u6 = ...L1L2Jnt; + AnyJoint &u7 = ...T12L1Jnt; + MeasureOrganizer = {0, 3, 6, 9, 12, 15, 18}; + }; + + #if BM_TRUNK_LUMBAR_RHYTHM == _RHYTHM_SOFT_ + CType = repmat(nDim, Soft); + #endif + + }; + + #endif + + //Rotational measure between throax and pelvis + AnyKinRotational PelvisThoraxRotMeasure = { + AnyRefFrame &Pelvis = ..SegmentsLumbar.PelvisSeg.AnatomicalFrameTrunk; + AnyRefFrame &Thorax = ..SegmentsThorax.T12Seg.AnatomicalFrameTrunk; + Type = RotVector; + }; + + + //Rotational measure between throax and pelvis + AnyKinRotational PelvisT12RotMeasure = { + AnyRefFrame &Pelvis = ..SegmentsLumbar.PelvisSeg.AnatomicalFrameTrunk; + AnyRefFrame &Thorax = ..SegmentsThorax.T12Seg.AnatomicalFrameTrunk; + Type = RotVector; + Axis1 = x; + Axis2 = y; + Axis3 = z; + }; +};// End of JointsLumbar + +