DeGrooteFregly2016Muscle & Negative Muscle Force

OpenSim Moco is a software toolkit to solve optimal control problems with musculoskeletal models defined in OpenSim using the direct collocation method.
POST REPLY
User avatar
Aaron Fox
Posts: 284
Joined: Sun Aug 06, 2017 10:54 pm

DeGrooteFregly2016Muscle & Negative Muscle Force

Post by Aaron Fox » Wed Feb 26, 2020 4:04 pm

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

User avatar
Nicholas Bianco
Posts: 1003
Joined: Thu Oct 04, 2012 8:09 pm

Re: DeGrooteFregly2016Muscle & Negative Muscle Force

Post by Nicholas Bianco » Wed Feb 26, 2020 6:50 pm

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

User avatar
Aaron Fox
Posts: 284
Joined: Sun Aug 06, 2017 10:54 pm

Re: DeGrooteFregly2016Muscle & Negative Muscle Force

Post by Aaron Fox » Wed Feb 26, 2020 10:40 pm

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

User avatar
Karthick Ganesan
Posts: 119
Joined: Thu Oct 10, 2013 12:11 am

Re: DeGrooteFregly2016Muscle & Negative Muscle Force

Post by Karthick Ganesan » Thu Feb 27, 2020 7:26 am

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.

User avatar
Nicholas Bianco
Posts: 1003
Joined: Thu Oct 04, 2012 8:09 pm

Re: DeGrooteFregly2016Muscle & Negative Muscle Force

Post by Nicholas Bianco » Thu Feb 27, 2020 1:06 pm

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

User avatar
Karthick Ganesan
Posts: 119
Joined: Thu Oct 10, 2013 12:11 am

Re: DeGrooteFregly2016Muscle & Negative Muscle Force

Post by Karthick Ganesan » Thu Feb 27, 2020 1:30 pm

Hi Nick,
Thank you for the detailed explanation.
Regards,
Karthick.

POST REPLY