FDK "scope"

I am simulating a spine model including the ribcage where all ribs and sternum are individually articulate. The ribs are attached to the spine via hinge joints and are controlled by FDK. The only kinematic input to the model is the position of the vertebrae. I try to find a way to realistically locate the sternum. There are forces on measures between the sternum and each rib to simulate the elastic properties. I tried various configurations where I defined a ball joint between the first rib and the sternum and defined several constraints as FDK. In all cases I either get an immediate KKT error in muscle recruitment or weird sternum displacement, muscle overloads in ribcage muscles and looping of Newton method in FDK. Without expecting it to achieve much, just for testing, instead of what I just described, I defined an all FDK driver based on a linear combination of all measures between ribs and sternum. This gives rather promising results, no more errors and muscle overloads, still some slightly weird sternum positioning in some cases, but that should be avoidable by additional constraints.
What is bothering me, is that I did all of this by trial-and-error, but I am confused to what the FDK method actually does. I assumed FDK adds another iteration layer between the FDK kinematics and overall muscle recruitment. What I mean by overall is, that it searches for an equilibrium position for the FDK “controlled” segment taking into consideration all forces acting on it. The fact that when defining the FDK driver against only the first ribs the sternum is placed in position resulting in huge forces and thus muscle activation, while the linear combination FDK driver does not show that behaviour, suggest that the FDK algorithm is “localized” to the measures defined in the driver. But then again as all ribs are themselves controlled by FDK, all these measures are coupled. I would not have been very surprised if this situation was not computable for being too complex or creating looping.
I hope my writing is not too confusing. I would appreciate it, if anyone can explain to me how the FDK method works or point me to some resources on it.


EDIT: Another thing: The “misplacment” of the sternum is always in such a way, that the forces aid in the motion. I interpret this as a sign, that FDK actually looks at the whole system and not just locally at the measures defined in the FDK driver. You may notice that I am somewhat confused at the moment…

Hi Simon,

Sorry for the slow reply,

I have tried to read your post a couple of times, but i found it a bit difficult to understand honestly, so i am not getting all of it sorry.

It sounds as a very complex model you have, i would advice you to try to introduce the FDK dof gradually, to be able to understand what happens and why.

First of all you are right about the way the FDK works. For the FDK DOF it finds the position which makes the DOF in equilibrium so there is no need for a reaction. So initially the reaction force is above the force tolerance then gradually it drops below the tolerance. So the FDK solver alters the DOF to obtain this, while taking into account all loads and all joints in the model, when it is changing/altering the model it takes into account all DOF in the model.

The solution the FDK finds will depend on the stiffness defined in the model, how is this defined in the model?

Finally please see this post
Depending on how your model is constructed I imagine you may have similar issues, and could benefit from using the same approach.

Generally speaking FDK is used for problems/DOF which are governed by elastic forces, and the inverse-inverse optimization approach mentioned in the post is used for DOF which are voluntary.

Please ask again if you have further questions, if you had an illustration of the model you are working on it would help us understand it better.

Best regards

Hi Søren,

Thanks for your help. I absolutely understand you, I contemplated deleting most of what I wrote when I edited. It boils down to more or less a request for more information on how FDK works, which I got in the meantime.

I tried introducing FDK freedoms step by step but many configuration resulted in an immediate KKT error, which unfortunately does not give much information. Stiffness is applied as forces/torques on linear and rotational measures. Some of these measures are then also used in the drivers.

At the moment I get really good results with all DOFs FDK controlled and these DOFs defined at two instead of just one position, so I am no longer testing this issue. So thanks again for your help.