Hi Moco Team,
I have a query around implementation of the DeGrooteFregly2016 muscle when computing forces (using a Force Reporter tool). I noticed at times I get a message stating that certain muscle forces are < 0 at specific times (e.g. DeGrooteFregly2016Muscle::computeForce, muscle TMIN force < 0 at time = 0.00350375). Further inspection reveals this is generated by passive muscle forces having negative values around these same times across the simulation, sometimes small but at other times relatively large (i.e. > 10 negative force). Changing the solve for equilibrium setting within the Analyze Tool doesn't seem to affect this.
I'm wondering what might be the cause of this within the calculations, as I thought there would have been a floor on what passive forces could be (i.e. zero)? I think I'm using all of the main default settings for the muscle model, with the exception of ignoring tendon dynamics.
Aaron
DeGrooteFregly2016Muscle & Negative Muscle Force
- Nicholas Bianco
- Posts: 1003
- Joined: Thu Oct 04, 2012 8:09 pm
Re: DeGrooteFregly2016Muscle & Negative Muscle Force
Hi Aaron,
We've also encountered this problem. This could be caused by either the fiber passive force-length curve or fiber damping. The fiber passive force curve goes slightly negative when the normalized fiber length is less than 0.2, but is usually not a problem. (Similarly, the tendon force length curve can go slightly negative if the tendon is buckling, or when the normalized tendon length is less than 1. This only applies when tendon compliance is enabled for a muscle.) The curves can go negative because they are designed to be continuous and differentiable everywhere, which is crucial for direct collocation.
Fiber damping is just the muscle's 'fiber_damping' property multiplied by the max isometric force and normalized fiber velocity. So fiber damping can cause negative passive forces when the fiber is shortening quickly, and if active force happens to be low you'll get a negative total fiber force. We borrowed the fiber damping model from the Millard2012EquilibriumMuscle, but removed an if-statement that prevents negative forces (again, to ensure our muscle curves are differentiable). This is most likely the cause of your negative force issue; at least that's what we've noticed in our simulations.
This is currently high on our TODO list. The fiber damping was added to Millard2012EquilibriumMuscle mainly for numerical conditioning, and we got a noticeable improvement in convergence when we added it to the DGF muscle. Since it's a numerical thing, we could try a different damping model that limits negative forces (e.g., by using a tanh function). For now, you could try modifying the fiber damping parameter values in the model to reduce negative muscle forces. Also potentially helpful to you are the 'active_force_width_scale' property (to widen the active force length curve) and 'passive_fiber_strain_at_one_norm_force' property.
-Nick
We've also encountered this problem. This could be caused by either the fiber passive force-length curve or fiber damping. The fiber passive force curve goes slightly negative when the normalized fiber length is less than 0.2, but is usually not a problem. (Similarly, the tendon force length curve can go slightly negative if the tendon is buckling, or when the normalized tendon length is less than 1. This only applies when tendon compliance is enabled for a muscle.) The curves can go negative because they are designed to be continuous and differentiable everywhere, which is crucial for direct collocation.
Fiber damping is just the muscle's 'fiber_damping' property multiplied by the max isometric force and normalized fiber velocity. So fiber damping can cause negative passive forces when the fiber is shortening quickly, and if active force happens to be low you'll get a negative total fiber force. We borrowed the fiber damping model from the Millard2012EquilibriumMuscle, but removed an if-statement that prevents negative forces (again, to ensure our muscle curves are differentiable). This is most likely the cause of your negative force issue; at least that's what we've noticed in our simulations.
This is currently high on our TODO list. The fiber damping was added to Millard2012EquilibriumMuscle mainly for numerical conditioning, and we got a noticeable improvement in convergence when we added it to the DGF muscle. Since it's a numerical thing, we could try a different damping model that limits negative forces (e.g., by using a tanh function). For now, you could try modifying the fiber damping parameter values in the model to reduce negative muscle forces. Also potentially helpful to you are the 'active_force_width_scale' property (to widen the active force length curve) and 'passive_fiber_strain_at_one_norm_force' property.
-Nick
Re: DeGrooteFregly2016Muscle & Negative Muscle Force
Hi Nick,
I'd agree with you that it looks like the fiber velocity is the culprit - at the instances where this is occurring in a couple of muscles there are peaks in shortening velocity of the fibers. It sounds like altering the damping parameter is the solution here? This is currently set at 0.1 in all muscles - would you suggest lowering this, and presumably at zero it generates no damping but would potentially introduce reduced convergence performance?
Aaron
I'd agree with you that it looks like the fiber velocity is the culprit - at the instances where this is occurring in a couple of muscles there are peaks in shortening velocity of the fibers. It sounds like altering the damping parameter is the solution here? This is currently set at 0.1 in all muscles - would you suggest lowering this, and presumably at zero it generates no damping but would potentially introduce reduced convergence performance?
Aaron
- Karthick Ganesan
- Posts: 119
- Joined: Thu Oct 10, 2013 12:11 am
Re: DeGrooteFregly2016Muscle & Negative Muscle Force
Hi Nick,
Is this the reason in most example codes, passive fiber force is ignored and active force length scale factor is set as 1.5?
Thanks,
Karthick.
Is this the reason in most example codes, passive fiber force is ignored and active force length scale factor is set as 1.5?
Thanks,
Karthick.
- Nicholas Bianco
- Posts: 1003
- Joined: Thu Oct 04, 2012 8:09 pm
Re: DeGrooteFregly2016Muscle & Negative Muscle Force
Aaron -- yes, I think that's the way to go. Start by setting the muscles producing negative forces to have zero damping and evaluate if performance drops significantly. Then, add it back in with low (possibly very low) values as needed.
Karthick -- yes, partly. Passive forces can also cause issues if not properly calibrated. For example, the hamstrings can undergo large excursions as biarticular muscles, often creating high passive forces if the default muscle parameters aren't adjusted. This will result in increased co-contraction activity from vasti or other knee extensor muscles to make up for the increased knee flexion moment.
Widening the active force-length curve is an alternative to increasing muscle optimal force values when muscles are too weak. We try to avoid increasing optimal forces since that also increases passive forces (which can further exacerbate the co-contraction issue above). There is also evidence that we overestimate fiber length changes with changes in joint angles (see Xuefeng Chen's sarcomere imaging work using in vivo microendoscopy).
A few more things. If you look into the DeGrooteFregly2016Muscle, you'll see two components of passive force: conservative and non-conservative force. The conservative force is the typical force-length derived passive force, and the non-conservative force is the fiber damping term. Enabling the 'ignore_passive_fiber_force' property ignores the conservative force, but currently does NOT ignore the fiber damping, or non-conservative force. This may change in the future, but right now the only way to ignore damping is set the damping parameter to zero. Also, the Thelen2003Muscle does not have a fiber damping parameter, so if converting from that muscle to DeGrooteFregly2016Muscle via a ModelProcessor and ModOpReplaceMusclesWithDeGrooteFregly2016, you'll need to set the fiber damping yourself (perhaps using ModOpFiberDampingDGF).
Best,
-Nick
Karthick -- yes, partly. Passive forces can also cause issues if not properly calibrated. For example, the hamstrings can undergo large excursions as biarticular muscles, often creating high passive forces if the default muscle parameters aren't adjusted. This will result in increased co-contraction activity from vasti or other knee extensor muscles to make up for the increased knee flexion moment.
Widening the active force-length curve is an alternative to increasing muscle optimal force values when muscles are too weak. We try to avoid increasing optimal forces since that also increases passive forces (which can further exacerbate the co-contraction issue above). There is also evidence that we overestimate fiber length changes with changes in joint angles (see Xuefeng Chen's sarcomere imaging work using in vivo microendoscopy).
A few more things. If you look into the DeGrooteFregly2016Muscle, you'll see two components of passive force: conservative and non-conservative force. The conservative force is the typical force-length derived passive force, and the non-conservative force is the fiber damping term. Enabling the 'ignore_passive_fiber_force' property ignores the conservative force, but currently does NOT ignore the fiber damping, or non-conservative force. This may change in the future, but right now the only way to ignore damping is set the damping parameter to zero. Also, the Thelen2003Muscle does not have a fiber damping parameter, so if converting from that muscle to DeGrooteFregly2016Muscle via a ModelProcessor and ModOpReplaceMusclesWithDeGrooteFregly2016, you'll need to set the fiber damping yourself (perhaps using ModOpFiberDampingDGF).
Best,
-Nick
- Karthick Ganesan
- Posts: 119
- Joined: Thu Oct 10, 2013 12:11 am
Re: DeGrooteFregly2016Muscle & Negative Muscle Force
Hi Nick,
Thank you for the detailed explanation.
Regards,
Karthick.
Thank you for the detailed explanation.
Regards,
Karthick.