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?
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.
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.
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.
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.
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
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).