Stiffness to be adjusted when spine FDK is ON?

Hello,

I am running simulations in AnyBody to analyze the spine and I came across something that I don’t quite understand: I implemented the FDK on the lumbar spine in the StandingModel by simply copying and pasting the code from the SpineFixationWithForceDepKinematics model. Everything seems to be working fine, but I realized that vertebrae rotations are graphed differently depending on whether I set the BM_SPINE_RHYTHM ON or OFF.
Running the same simulation - a 30 degrees flexion - with the same model, when I turn ON the spine rhythm, I see the vertebrae rotating around the third axis, which seems correct given the global coordinate system. When I turn OFF the spine rhythm, they rotate around the first axis (I am attaching the two graphs).

Does the code for spine FDK modify the order of the rotation axis, by any chance? As I see these lines in the code:

// the following section is used to control the order of rotational 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;  

The actual movement is correct in both cases, but I was only wondering if the stiffness’s in the file DiscStiffnessNormal.any should be adjusted.
In fact, I tried to check what stiffness is used in the two cases, calculating it based on simulation results, dividing the force listed in the chart under HumanModel -> Trunk -> DiscStiffness by the correspondent rotation in degrees for each level.
For the same 30 degrees flexion motion, when spine rhythm was set ON I would get a stiffness of 0.54, that is exaclty what expected by the definition in DiscStiffnessNormal.any when ligaments are ON (AnyFloat Flex = coef*1.8;).
When spine rhythm was set OFF, instead, I would calculated a used stiffness of 2.3, that is actually the one defined for lateral bending (AnyFloat Latbend = 2.3;).

Could you please confirm if when spine rhythm is set to OFF, and FDK is used, the stiffness’s have to be adjusted?

Thank you,

Michele

Hello Michele,

I think there is a mismatch in your file. From the picture you uploaded, when the rhythm is turned on, your value the blue line which shows Pos[2]. However, when you turn off the rhythm, your output is Pos[0]. So it is different values. I guess there is a mismatch in your script. The reason Anybody give you different stiffness may be the same reason. Because the default direction for Pos[0] is axial rotation whose stiffness is 2.3.

Hope this help.

Cheers,

Amin

Hi Amin,

thank you for your answer, but I think I wasn’t clear enough to express my question. I am aware that the output shows rotations around two different axis, Pos[2] and Pos[0]. The reason why I uploaded the pictures was indeed to show that.
I didn’t thought turning the spine rhythm off should produce that change, but that is not my script, it’s a default repository model script.
I was suggesting that there might be something to be adjusted in the repository model, but I wanted to make sure the code has indeed to be corrected.
If that’s the case, I can swap the values of stiffness, but I also thought maybe the AnyBody team would want to check and make the necessary changes for the next releases.

Best regards,

Michele

Hi Michele,

I agree with you, I thought the default script has the mismatch problem. I read your post regarding mismatch about ligaments which I also notice two weeks ago. For disc stiffness part, I notice the same problem.

Cheers,

Amin

Hi Michele,

Thank you for spotting the problem. We have already improved the code for the disc stiffness to use locally define kinematic measures (to avoid reusing joint measures as they change from time to time), but it has not been yet released. Please see attached.

You would need to define some of these #defines: BM_TRUNK_DISC_STIFNESS as (CONST_DISC_STIFFNESS_NONE=0, CONST_DISC_STIFFNESS_LINEAR=1, CONST_DISC_STIFFNESS_NONLINEAR=2). Or you can update your code to contain locally defined measures only.

Hope this helps.

Kind regards,
Pavel

Thank you Pavel,

I will paste the DiscStiffness.any file you attached into the Trunk folder.
Excuse me for asking a clarification: after I paste the new file, in the Main file I no longer need this line:
#define BM_TRUNK_DISC_STIFFNESS_NORMAL ON

But instead I shall add either

#define BM_TRUNK_DISC_STIFNESS CONST_DISC_STIFFNESS_NONE

or

#define BM_TRUNK_DISC_STIFNESS CONST_DISC_STIFFNESS_LINEAR

or

#define BM_TRUNK_DISC_STIFNESS CONST_DISC_STIFFNESS_NONLINEAR

depending on what stiffness behavior I want to implement, is that correct?

Because I looked at the file you attached and I couldn’t understand what the numbers 0, 1, 2 meant in: CONST_DISC_STIFFNESS_NONE=0, CONST_DISC_STIFFNESS_LINEAR=1, CONST_DISC_STIFFNESS_NONLINEAR=2).

Many thanks,

Michele

Hi Michele,

Yes, I am sorry, I was not explicit.

We introduced 3 options in the newer version of the Trunk model. But these constants are not yet defined. So i proposed to define them as 0-1-2.

And yes, the new logic will be that we will be switching between different disc stiffness models.

Regards,
Pavel