Incorporating muscle fatigue

Dear AnyBody,

I would to bring up an old topic that has been addressed before, which is how to account for muscle fatigue in AnyBody. I am aware that AnyBody does not have such capability yet, but it’s possible to run separate analyses using different muscle properties as an approximation. I wonder:

  1. What are the muscle parameters to be considered? If I am interested in fatigue in a runner, shall I decrease the “Strength Scaling” parameter of the Foot/Shank/Thigh under HumanModel\Scaling\StrengthScaling; or shall I change the SpcificMuscleTensionSpine, StrengthIndixLeg, and SpecificMuscleTensionShoulderArm; or change the F0 parameter in a muscle? What will be most proper way to do it?

  2. Do I need to use a difference C3D data to simulate fatigue? My understanding is, if the C3D remains the same (kinematics and GRFs are the same), unless the the internal forces needed to generate the necessary kinematics reaches the new (decreased) capacity, I shall expect the same predicted muscle/JRFs as the running the model with normal muscle strength, and the only difference will be greater Muscle Envelop, is that correct?

Thank you very much!
-Phoebe

Just to follow up, I would like to model the changes in muscle&joint reaction forces induced by fatigue, as literature suggests that fatigue leads to increased mechanical loading to the bone. Since I do not yet have a muscle fatigue model, or MoCap data acquired from a fatigue subject, I changed a few parameters in a normal running model and found:

  1. By reducing the StrengthIndexLeg parameter by 50%, the magnitude of the Envelope profile doubled, whereas its shape remained the same. Muscle forces and JRFs did not change. This proved my previous hypothesis: with no changed in kinematics and GRFs, we will not observe changes in muscle & JRFs. The predicted muscle activities increases as the result of the reduced overall muscle strength.
  2. By changing the one or two strengthscaling parameters in the lower extremity, no marked changes in muscle forces (e.g., soleus) or JRFs were observed. The magnitude and shape of the muscle envelope changed.

Is it safe to conclude: to characterize altered JRFs and muscle forces due to fatigue, the most important thing is the MoCap data acquired after fatigue occurs? Secondly, to incorporate the decreased muscle capacity due to fatigue, shall I modify StrengthIndexLeg? or StrengthScaling parameter? or F0 of a few selected muscles?

Thank you for your help!
-Phoebe

Hi Phoebe,

Yes, the primary changes in loads will probably be due to the altered kinematics. But there will also be some change in activation pattern if primary muscles become too weak to carry out this task - some other muscles with worse moment arms will be engaged as more optimal. But this will not be seen if you change muscle strength through the StrengthIndex parameter - all muscles will be scaled at the same leaving the activation pattern the same.

In reality fatigue accumulation rate is different for different muscles and will depend on the activation history. So you would probably want to decrease strength of individual muscles. It can either be done through setting individual F0s through AnySetValueOperation (in case updating happens in the next simulation) or by implementing a history-dependent functions based on AnyFunEx classes, e.g. AnyFunExMonoPy. The latter could be used to implement F0 as a function that will be updated each time step and save history into a muscle-specific file. The former approach might be a bit easier, but it depends how you approach it.

Kind regards,
Pavel

Hi Pavel,

I am able to modify F0s for different muscles to simulate a controlled “fatigue.” By reducing F0s of gastrocnemious, the overall muscle activity increased, and Fms of gastrocmemious reduced, which makes sense.

Can you elaborate on “implementing a history-dependent function”, and show me how to decrease F0s systemically?

Much appreciated!
-Phoebe

Hi Phoebe,

It needs an AnyFunExMonoPy function that would be linked to a muscle and would be storing its activation history into a file every time it is called (which would be every step). At the same time it would update F0 of this muscle according to some mathematical model of muscle fatigue. This is the idea, but unfortunately I do not have a ready code for this and do not have much time to get my hands into this. Try looking at the ref. manual to understand how this function works and hopefully it will be clear what to do.

Another problem is that for the short physical activities this functionality may not necessary change much. But if you have a rather long simulation with higher activations - the effect may be more pronounced.

Kind regards,
Pavel