Source code for myoconverter.xml.forces.Schutte1993Muscle_Deprecated

""" Contains the `Schutte1993Muscle_Deprecated` parser.

Muscle activation and deactivation linearization by Florian Fischer and Miroslav Bachinski.

@author: Aleksi Ikkala
"""

import numpy as np

from myoconverter.xml.utils import element_txt2num
from myoconverter.xml.forces.Muscle import Muscle


[docs]class Schutte1993Muscle_Deprecated(Muscle): """ This class parses and converts the OpenSim `Schutte1993Muscle_Deprecated` XML element to MuJoCo. """
[docs] def _parse(self, xml, **kwargs): """ This function handles the actual parsing and converting. :param xml: OpenSim `Schutte1993Muscle_Deprecated` XML element :param kwargs: Optional keyword arguments :return: None """ # Parse time constants activation1 = element_txt2num(xml, "activation1") activation2 = element_txt2num(xml, "activation2") # Get time scale time_scale = element_txt2num(xml, "time_scale", default=0) # Estimate activation and deactivation time constants if time_scale == 0 or np.isnan(activation1) or np.isnan(activation2): self._params["timeconst"] = np.array([activation1, activation2]) else: # Linearize at act=0.5 ctrl=0.5 and calculate activation and deactivation time constants act_linearization = ctrl_linearization = 0.5 time_act = time_scale / ((0.5 + 1.5 * act_linearization) * (activation1 * ctrl_linearization + activation2)) time_deact = time_scale * (0.5 + 1.5 * act_linearization) / activation2 self._params["timeconst"] = np.array([time_act, time_deact])