Hi All,
This is possibly a question for the general OpenSim forum, but I am running into this issue within a Moco context so figured posting here first might help.
The problem I am solving with Moco is to identify muscle forces during high-speed running, and I am currently doing so using a simplistic 2D model with a reduced muscle set (similar model to Carmichael's work here). The converged solution looks OK, but while visualising this solution a warning about tendon buckling is displayed (i.e. length < tendon slack length), and this is occurring in the plantarflexor muscles at push-off.
I'm wondering whether anyone has encountered this and solved the problem, or there are recommended solutions? An obvious solution to me may be that the tendon slack length needs to be shortened, but this could wreak havoc with finding an appropriate solution (i.e. shortening TSL stiffens up the muscle).
Happy to have an open discussion about this to perhaps help with others that may encounter this issue.
Aaron
HELP - my tendon is buckling!
- Pasha van Bijlert
- Posts: 226
- Joined: Sun May 10, 2020 3:15 am
Re: HELP - my tendon is buckling!
Hi Aaron,
My two cents (very interested to see other people's perspectives on this!), since you're essentially running into a model tuning issue: In situations where I don't know (within reasonable bounds) what the fibre & tendon lengths in any given muscle should be, I tune it based on the length change over a given joint range.
Let's say we know the joint that a given muscle crosses shows a range of 0 - 30 degrees flexion during a given movement. I take the difference in muscle length at those two joint angles as the fibre length, and then calculate tendon length as the L_mtc (at 15 degrees flexion) - fibre length. This is inspired by Sellers et al 2013 (https://doi.org/10.1371/journal.pone.0078733) and can more or less be related to the idea that muscles operate on very narrow ranges in vivo (Burkholder & Lieber 2001 https://doi.org/10.1242/jeb.204.9.1529). I think Bill Sellers tunes most of his animal models (both living and extinct) using this (or a similar) approach.
How you exactly implement this may of course depend on your exact goal (and perhaps on how subject-specific you need your model to be), but as a first approximation it works very well to make sure the muscles in your model are capable of producing force over the required joint ranges. You could consider dividing the tendon length by 1.04 (or whatever percentage of tendon strain you implement at F_max) as an extra tuning step.
This is obviously a fairly rough way of tuning your model, and only works if you somewhat have an idea of what joint ranges the movement crosses. I'm very interested in alternative approaches to this problem.
Cheers,
Pasha
My two cents (very interested to see other people's perspectives on this!), since you're essentially running into a model tuning issue: In situations where I don't know (within reasonable bounds) what the fibre & tendon lengths in any given muscle should be, I tune it based on the length change over a given joint range.
Let's say we know the joint that a given muscle crosses shows a range of 0 - 30 degrees flexion during a given movement. I take the difference in muscle length at those two joint angles as the fibre length, and then calculate tendon length as the L_mtc (at 15 degrees flexion) - fibre length. This is inspired by Sellers et al 2013 (https://doi.org/10.1371/journal.pone.0078733) and can more or less be related to the idea that muscles operate on very narrow ranges in vivo (Burkholder & Lieber 2001 https://doi.org/10.1242/jeb.204.9.1529). I think Bill Sellers tunes most of his animal models (both living and extinct) using this (or a similar) approach.
How you exactly implement this may of course depend on your exact goal (and perhaps on how subject-specific you need your model to be), but as a first approximation it works very well to make sure the muscles in your model are capable of producing force over the required joint ranges. You could consider dividing the tendon length by 1.04 (or whatever percentage of tendon strain you implement at F_max) as an extra tuning step.
This is obviously a fairly rough way of tuning your model, and only works if you somewhat have an idea of what joint ranges the movement crosses. I'm very interested in alternative approaches to this problem.
Cheers,
Pasha
- Nicholas Bianco
- Posts: 1041
- Joined: Thu Oct 04, 2012 8:09 pm
Re: HELP - my tendon is buckling!
Hi Aaron,
In which muscles are the tendons buckling -- the gastroc, soleus, or both? I'm wondering if the knee is flexing while the ankle is pushing off, which could cause buckling in the gastroc. Unfortunately, there isn't anything you can do besides shortening the TSL in that case since the muscles only have a single line of action.
-Nick
In which muscles are the tendons buckling -- the gastroc, soleus, or both? I'm wondering if the knee is flexing while the ankle is pushing off, which could cause buckling in the gastroc. Unfortunately, there isn't anything you can do besides shortening the TSL in that case since the muscles only have a single line of action.
-Nick
Re: HELP - my tendon is buckling!
Hi Both,
@Pasha - an interesting approach I hadn't heard of. I'll look into those papers.
@Nick - I've noticed the behaviour in both gastroc and soleus at a specific similar time point around push off, so it does seem more like an ankle issue.
I experimented with the tendon compliance dynamics mode. Originally I had this set to implicit, but when switched to explicit it appears to have fixed the problem (I don't get the buckling warning anymore with the solution). I'm not overly familiar with the differences here, but wondering if there's an obvious explanation for the change?
Aaron
@Pasha - an interesting approach I hadn't heard of. I'll look into those papers.
@Nick - I've noticed the behaviour in both gastroc and soleus at a specific similar time point around push off, so it does seem more like an ankle issue.
I experimented with the tendon compliance dynamics mode. Originally I had this set to implicit, but when switched to explicit it appears to have fixed the problem (I don't get the buckling warning anymore with the solution). I'm not overly familiar with the differences here, but wondering if there's an obvious explanation for the change?
Aaron
- Nicholas Bianco
- Posts: 1041
- Joined: Thu Oct 04, 2012 8:09 pm
Re: HELP - my tendon is buckling!
In implicit mode, tendon compliance dynamics is enforced using an extra continuous variable representing the derivative of normalized tendon force. It's possible that the behavior of this variable in the optimization could lead to tendon kinematics that cause the tendon to buckle.
It could be helpful to plot the muscle-tendon kinematics of these muscles from the explicit and implicit solutions. Ideally, they should end up with the same result, but small differences can occur. In implicit mode, are you regularizing the derivative of normalized tendon force? This can be done using the MocoCasADiSolver option 'set_minimize_implicit_auxiliary_derivatives' and 'set_implicit_auxiliary_derivatives_weight'. The choice of weight could help with the buckling issue, but could also produce different results compared to explicit mode.
It could be helpful to plot the muscle-tendon kinematics of these muscles from the explicit and implicit solutions. Ideally, they should end up with the same result, but small differences can occur. In implicit mode, are you regularizing the derivative of normalized tendon force? This can be done using the MocoCasADiSolver option 'set_minimize_implicit_auxiliary_derivatives' and 'set_implicit_auxiliary_derivatives_weight'. The choice of weight could help with the buckling issue, but could also produce different results compared to explicit mode.
Re: HELP - my tendon is buckling!
Hi Nick,
Yes I was minimising the implicit auxiliary derivatives with a weight of 0.00001.
Fair point to plot the tendon kinematics to get an idea of where the differences are.
Thanks,
Aaron
Yes I was minimising the implicit auxiliary derivatives with a weight of 0.00001.
Fair point to plot the tendon kinematics to get an idea of where the differences are.
Thanks,
Aaron
- Nicholas Bianco
- Posts: 1041
- Joined: Thu Oct 04, 2012 8:09 pm
Re: HELP - my tendon is buckling!
You might also try putting a non-zero lower bound on tendon force. Even a small minimum tensile force along the tendon could help prevent buckling.
Re: HELP - my tendon is buckling!
Good point Nick - I do currently have the lower bounds for tendon forces set to zero.
Aaron
Aaron
- Carlos Gonçalves
- Posts: 135
- Joined: Wed Jun 08, 2016 4:56 am
Re: HELP - my tendon is buckling!
Hi Aaron,
I've searched for something like that before and found something along the way what Pasha mentioned:
https://github.com/modenaxe/MuscleParamOptimizer
It was cited here: viewtopicPhpbb.php?f=1815&t=12159&p=0&s ... 0d14dcee61
I could not give it a try, but I will look for something like that for in my jump tests. Hope I can share here good results.
Best regards.
I've searched for something like that before and found something along the way what Pasha mentioned:
https://github.com/modenaxe/MuscleParamOptimizer
It was cited here: viewtopicPhpbb.php?f=1815&t=12159&p=0&s ... 0d14dcee61
I could not give it a try, but I will look for something like that for in my jump tests. Hope I can share here good results.
Best regards.