STL files of the spine (Thorax)

Hello,

I have a question about the original STL files of the spine, especially the thorax.

At first my background / what I already did:
For my masterthesis I am working on the “SpineFixationWFDKinematics” Model at the moment. I would like to simulate different static postures with the input of every single vertebrae. For that I set the rhythm of the lumbar and the cervical spine off. I implemented new code lines to have the opportunity to change the orientation of every single vertebra (like in other comments written).

Now I would like to work on the thorax. I read all the comments and know that it is not that easy to change the rigid segment.

My question:
Is it possible to work with the STL files of the spine and where can I find them?
We can see the individual vertebrae (T1-T12) and togehter with the ribs they build one rigid segment. But how can I work on the individual vertebrae as individual segments?

Please let me know, if I should explain it on a different way, I am a newbie.
Thanks in advance.

Best greetings
Juliana

Hi Juliana,

Unfortunately, the thoracic spine model is not public yet. We plan to release it later, but at this point you can probably contact research groups, who worked on this topic and request an access to their version.

Are you planning to do the analysis of loads in the thoracic spine or at this point you only want to define a posture? It is possible to do a morphing of the ribcage and define necessary posture this way, but this does not allow calculation of individual intervertebral forces.

Kind regards,
Pavel

Hi Pavel,
Thanks for your fast answer and the mentioned possibilities. I am going to try both of them.

You are right. I only need to define/implement different postures. I would like to compare the load on the individual lumbar vertebrae. But I am not planning to analyse the load of the thoracic spine.

Please, can you explain me in more detail what you mean with “morphing”. How can I implement this?

Best greetings
Juliana

Hi @Juliana

Here is some information about morphing

best regards,
Bjørn
AnyBody Technology

Hello, I am sorry to interrupt you again. I realized again in the SpineFixationWFDK model that the L5Sacrum Driver is commented out.

In the SpineFiaxtionWFDK model l used this information some time ago and didn't implement a L5Sacrum Driver.
When I do exactly the same in eth-model it works as well here.


#if BM_TRUNK_LUMBAR_RHYTHM == OFF

AnyKinEqSimpleDriver SacrumPelvis =
{
AnySphericalJoint &jntsacrumpelvis = Main.HumanModel.BodyModel.Trunk.JointsLumbar.SacrumPelvisJnt;
DriverPos = pi/180*{0, 0.0, 0.0};
DriverVel = pi/180*{0.0, 0.0, 0.0};
Reaction.Type = {Off, Off, Off};
};

// AnyKinEqSimpleDriver L5Sacrum =
// {
// AnySphericalJoint &jntsacrumpelvis = Main.HumanModel.BodyModel.Trunk.JointsLumbar.L5SacrumJnt;
// DriverPos = pi/180*{0, 0.0, 0};
// DriverVel = pi/180*{0.0, 0.0, 0.0};
// Reaction.Type = {Off, Off, Off};
// };

AnyKinEqSimpleDriver LumbarL4L5 =
{
AnySphericalJoint &jnt45 = Main.HumanModel.BodyModel.Trunk.JointsLumbar.L4L5Jnt;
DriverPos = pi/180*{0, 0.0, 0};
DriverVel = pi/180*{0.0, 0.0, 0.0};
Reaction.Type = {Off, Off, Off};
};

AnyKinEqSimpleDriver LumbarL3L4 =
{
AnySphericalJoint &jnt34 = Main.HumanModel.BodyModel.Trunk.JointsLumbar.L3L4Jnt;
DriverPos = pi/180*{0, 0, 0};
DriverVel = pi/180*{0.0, 0.0, 0.0};
Reaction.Type = {Off, Off, Off};
};

AnyKinEqSimpleDriver LumbarL2L3 =
{
AnySphericalJoint &jnt23 = Main.HumanModel.BodyModel.Trunk.JointsLumbar.L2L3Jnt;
DriverPos = pi/180*{0, 0.0, 0};
DriverVel = pi/180*{0.0, 0.0, 0.0};
Reaction.Type = {Off, Off, Off};
};

AnyKinEqSimpleDriver LumbarL1L2 = 

{
AnySphericalJoint &jnt12 = Main.HumanModel.BodyModel.Trunk.JointsLumbar.L1L2Jnt;
DriverPos = pi/180*{0, 0.0, 0};
DriverVel = pi/180*{0.0, 0.0, 0.0};
Reaction.Type = {Off, Off, Off};
};


So my question is, why do we have to comment it out? I know there are posts about it. I searched under "L5Sacrum" and I found this post (L5Sacrum joint in FDK ) where you referred to another post -> but the link in this post doesn't work (like all the old links I click in the forum). Overall the posts I found didn't help my understanding.
I am sorry if I overlooked something more. Maybe you could give me a hint for explanation. Thanks in advance.

Kind regards,
Juliana

Hi @Juliana

I am a little unsure which eth-model you are referring to so I don't fully understand your models structure.
But when you need to disable existing drivers and replace them with your own. There are some good guidelines.

  • Make small changes - dont switch many drivers at once, but do it in chunks so you can better evaluate the changes.
  • use the study information about each DoF. Double click your study to openthe study information. Here you can see what constraints are working on each DoF. That makes it a lot easier to find objects that affect certain DoF.
  • make sure that whatever new constraints cover the same DoF as the ones you disable.

I hope this can help you find what other L5Sacrum driver there is.

Best regards,
Bjørn

Hi @Bjorn,
thanks for your reply and trying to help me.
Actually, I have already used the options you mentioned to control what I did with the drivers and the DOFs.

There is still one question I would like to understand.

Model: SpineFixationModelWithForceDK
Drivers.any
Can you please explain to me the comment that is highlighted in bold. Why have you commented out L5Sacrum?

Code:
...
#if BM_TRUNK_LUMBAR_RHYTHM == OFF

// the following section is used to control the order of the rotation axes
refJoints.T12L1Jnt.Orientation.Type = RotAxesAngles;
refJoints.L1L2Jnt.Orientation.Type = RotAxesAngles;
refJoints.L2L3Jnt.Orientation.Type = RotAxesAngles;
refJoints.L3L4Jnt.Orientation.Type = RotAxesAngles;
refJoints.L4L5Jnt.Orientation.Type = RotAxesAngles;
refJoints.L5SacrumJnt.Orientation.Type = RotAxesAngles;

// FORCE-DEPENDENT KINEMATIC DRIVER
// Force-dependent constraints allow the solver to find optimal positions for the degrees of freedom
// based on the current mechanical force configuration of the system (external and muscular forces).
// The following driver shows how the curvature of the lumbar spine is calculated:
// All degrees of freedom associated with the ball joints and CType = ForceDep can move freely and.
// find a local equilibrium of forces, but an initial estimate for all angles is given in the DriverPos variable

AnyKinEqSimpleDriver FDK_Measure =
{
// Initial estimate for all joint angles except the free angles to be used by the solver for force-dependent kinematics.
// The thorax-pelvis angles are distributed to all joint angles using the following weight vectors:
AnyVector FE = {0.2538951, 0.2318493, 0.1894594, 0.1468712, 0.1020785}.JntPos.PelvisThoraxExtension/180pi;
AnyVector LB = {0.2538951, 0.2318493, 0.1894594, 0.1468712, 0.1020785}.JntPos.PelvisThoraxLateralBending/180pi;
AnyVector AT = {0.2908131, 0.2403102, 0.1937058, 0.1427486, 0.0910942}.JntPos.PelvisThoraxRotation/180pi;
DriverPos = arrcat({ FE, AT, LB }');

DriverVel = {
  0.0,0.0,0.0,
  0.0,0.0,0.0,      
  0.0,0.0,0.0,
  0.0,0.0,0.0,
  0.0,0.0,0.0};

// Define joints that have a force-dependent behaviour
AnySphericalJoint &jntt12l1 = .refJoints.T12L1Jnt;
AnySphericalJoint &jnt12 = .refJoints.L1L2Jnt;
AnySphericalJoint &jnt23 = .refJoints.L2L3Jnt; 
AnySphericalJoint &jnt34 = .refJoints.L3L4Jnt;
AnySphericalJoint &jnt45 = .refJoints.L4L5Jnt;

//AnySphericalJoint &jnt5sacrum = .refJoints.L5SacrumJnt; // this joint is annotated to avoid excessive restriction

// for the force-dependent degrees of freedom of the joint, the constraint type ForceDep must be set 
// degrees of freedom of the joint
CType = {
  ForceDep, ForceDep,ForceDep,
  ForceDep, ForceDep,ForceDep,
  ForceDep, ForceDep,ForceDep,
  ForceDep, ForceDep,ForceDep,
  ForceDep, ForceDep,ForceDep      
  //ForceDep, ForceDep,ForceDep // annotated connection
};

Reaction.Type = {
  Off,Off,Off,
  Off,Off,Off,
  Off,Off,Off,
  Off,Off,Off,
  Off,Off,Off
  //Off,Off,Off // commented connection
  };

};
// negligible movement between sacrum and pelvis
AnyKinEqSimpleDriver SacrumPelvisDriver = {
AnySphericalJoint &Jnt = Main.HumanModel.BodyModel.Trunk.JointsLumbar.SacrumPelvisJnt;
DriverPos = pi/180*{0.0, 0.0, 0.0};
DriverVel = pi/180*{0.0, 0.0, 0.0};
Reaction.Type = {Off, Off, Off};
};
#endif

...

(As I said, in this post L5Sacrum joint in FDK the same question seems to be L5Sacrum joint in FDK, but I can't read the link in the reply).
Thank you very much in advance.

Kind regards,
Juliana

Hi @Juliana

Nice to hear things are progressing.
The joint you mentioned to be commented out just means it is not being solved using FDK.
The model only uses FDK on the L1 through L5 joints. There is other constraints in the model to carry the L5Sacrum DoF

Best regards,
Bjørn

In the SpineFiaxtionWFDK model l used this information some time ago and didn't implement a L5Sacrum Driver.

When I do exactly the same in eth-model it works as well here.. .

This topic was automatically closed 125 days after the last reply. New replies are no longer allowed.