How to change the disc stiffness in the lumbar spine

Hey everybody,

I`m new in the AnyBody community, Maybe some of you will help me.

How can I change the disc stiffness in the lumbar spine to simulate a rigid body? I want to simulate the spinal loading during walking eg. but with higher stiffness in the lumbar part of the spine. Is it possible to get a fusion between the individual vertebrae?

Thanks for your answers.

Kind regards
Sonja

Hi Sonja,

AMS is an inverse dynamics system - so changing the stiffness by default will not change the motion. But yes, it is possible to model a fusion by fixing one of the joints through a kinematic constraint. The problem is that the default spine behavior is handled by a kinematic rhythm linking intervertebral angles to a thoracopelvic angle. If you want to fix one level - then you would either need to change the rhythm or add your own motion for the entire lumbar spine.

It is also possible to make the rhythm soft, meaning that the kinematic drivers can be violated depending on the given weights. You can set the weight of relevant joint to be 0, and define the joint angle that is supposed to represent the fusion configuration.

Add the following block of code before this line:

#include "<ANYBODY_PATH_BODY>\HumanModel.any"

This will make the rhythm soft and exclude L4L5 joint.

#define BM_TRUNK_LUMBAR_RHYTHM RHYTHM_SOFT

// AnyJoint &u1 = ..SacrumPelvisJnt;
// AnyJoint &u2 = ..L5SacrumJnt;
// AnyJoint &u3 = ..L4L5Jnt;
// AnyJoint &u4 = ..L3L4Jnt;
// AnyJoint &u5 = ..L2L3Jnt;
// AnyJoint &u6 = ..L1L2Jnt;
// AnyJoint &u7 = ..T12L1Jnt;

// 0 weight for L4L5
Main.HumanModel.BodyModel.Trunk.JointsLumbar.SpineRhythmDrv.Weights.Fun.Value = {0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0, 0, 0, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01, 0.01};

Then specify the angle by adding a driver to the L4L5, for example, i fix it to 0:

Main.Model.ModelEnvironmentConnection = {
AnyKinEq FixL4L5 = {
AnyJoint &jnt = Main.HumanModel.BodyModel.Trunk.JointsLumbar.L4L5Jnt;
};
};
Or use AnyKinEqSimpleDriver to define an angle.

Kind regards,
Pavel

1 Like

Hey Pavel,

thank you for your answer. I will try it and let you know if it works (;

Kind regards
Sonja

Hello Sonja and Pavel,

I am also interested in this topic because my aim is to fuse two (or more) lumbar vertebrae into one stiff segment. The model I use is a sitting human that performs a flexion in the pelvis thorax joint.

@sonja.theda : did adding the above mentioned block of code work in you model? Did you just include this part or did you change anything else?

@pgalibarov : I also tried including the code you suggested. Loading the model worked out fine, but when I tried to run the inverse dynamics, the following error occured: "Model is kinematically over-constrained". I checked the number of DOF and constraints and found out that I have 3 more constraints than DOF. How can I fix this problem? Is there anything else I have to add so that it works?

I would be very happy if you could help me.

Thanks and kind regards,
Veronika

Hi Sonja,

Sorry for the slow reply this post was overlooked.

In a standard model there is a spine rhythm between pelvis and thorax active, this leaves three rotation to be driven by drivers.

  • The easiest way to do what you want would be to do the following:
  • Add a driver on the joint you would like to lock and drive this to a constant angle (Remember to set Reaction.Type ={Off, Off,Off} ) for this added driver. If you do not set reactions to Off the driver will carry the torques acting on this joint, i am not sure if this is what you want.
  • Make the spinerhythm a soft driver that would allow the joint to be locked. see https://anyscript.org/ammr-doc/bm_config/bm_statements.html#bm-trunk-lumbar-rhythm
  • Ensure that the study you are running is using overdetermined kinematics solver, this will be the case for any mocap driven model.

Hope it makes sense, and sorry for the slow reply.

Best regards
Søren

Hi Søren,

thank you very much, it definitely makes sense and your answer helped me a lot!
Actually it was only the overdetermined kinematics solver that was missing in my model...
Now everything in my model works out fine.

Thank you again and best regards,
Veronika

Hi Sören,

thank you for your reply. I will try it on other MocapExamples in the AMMR, but some of them doesn´t work.
I would like to run the Model "ForcePlateSurfaceOffset.any" for example, but something is wrong with it, there is no output in the chart window.
Maybe you could help me with it.

Best regards
Sonja

Hi sonja,

This seems unrelated to the title of this tread, please start a new one.

When you do that please be more specific i need more info to be able to help.

Which mocap models in AMMR does not work? secondly the file "ForcePlateSurfaceOffset.any" is this file part of AMMR (i have not searched) ? or it is something you have created?

Best regards
Søren

Hi Sören.

thank you for your reply.
I´m not really sure if I added the block of code Right. Do you know how the force react or how it change in the output data when you lock one of the vertebral joints? Maybe you have an answer for me, so I can get sure the model works right.

Best regards
Sonja

Hi Sonja,

Not exactly sure what is the good answer.

One way to check the model would be verify that the joint you have locked does indeed not move, simply check the pos value in the joint in question.

If run the model with the reaction off, I think you will see only minor differences in the results since motion will be slightly changed.

If the reactions are on I would expect larger differences in the forces, especially if you zoom in on muscles spanning this joint level.

Best regards
Søren

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