4 Mechanical Models II

4.4 Point-to-point muscles

Point-to-point muscles are a simple type of component in biomechanical models that provide muscle-activated forces acting along a line between two points. ArtiSynth provides this through Muscle, which is a subclass of AxialSpring that generates an active muscle force in response to its excitation property. The excitation property can be set and queried using the methods

   setExcitation (double a);
   double getExcitation();

4.4.1 Muscle materials

As with AxialSprings, Muscle components use an AxialMaterial to compute the applied force f(l,\dot{l},a) in response to the muscle’s length l, length velocity \dot{l}, and excitation signal a. Usually the force is the sum of a passive component plus an active component that arises in response to the excitation signal.

The default AxialMaterial for a Muscle is SimpleAxialMuscle, which is essentially an activated version of LinearAxialMaterial and which computes a simple force according to

f(l,\dot{l})=k(l-l_{0})+d\dot{l}+m_{f}a (4.1)

where k and d are stiffness and damping terms, a is the excitation value, and m_{f} is the maximum excitation force. k, d and m_{f} are exposed through the properties stiffness, damping, and maxForce.

More complex muscle materials are typically used for biomechanical modeling applications, generally with nonlinear passive terms and active terms that depend on the muscle length l. Some of those available in ArtiSynth include ConstantAxialMuscle, BlemkerAxialMuscle, MasoudMillardLAM, and PeckAxialMuscle.

ConstantAxialMuscle

This is a simple muscle material that has a contractile force proportional to its activation, a constant passive tension, and linear damping, as follows:

f(\dot{l})=af_{max}+f_{passive}f_{max}+d\dot{l} (4.2)

The parameters for this material include:
Property Description f_{max} maxForce the maximum contractile force f_{passive} passiveFraction the proportion of f_{max} to apply as passive tension d damping damping a Muscle:excitation the Muscle’s activation

LinearAxialMuscle

This is a simple muscle material that has a linear relationship between length and tension, as well as linear damping, as follows:

l^{\prime}=\frac{l-l_{opt}}{l_{max}-l_{opt}},\mathrm{with}~{}0\leq l^{\prime}%
\leq 1~{}\mathrm{enforced} (4.3)
f(l,\dot{l})=af_{max}l^{\prime}+f_{passive}f_{max}l^{\prime}+d\dot{l} (4.4)

The parameters for this material include:
Property Description l_{max} maxLength the length at which maximum force is generated l_{opt} optLength the length at which zero active force is generate f_{max} maxForce the maximum contractile force f_{passive} passiveFraction the proportion of f_{max} to apply as passive tension d damping damping a Muscle:excitation the Muscle’s activation

BlemkerAxialMuscle

This muscle material generates a force as described in [2]. It is the axial muscle equivalent to the constitutive equation along the muscle fiber direction specified in the BlemkerMuscle FEM material.

PeckAxialMuscle

This muscle material generates a force as described in [14]. It has a typical Hill-type active force-length relationship (modeled as a cosine), but the passive force-length properties are linear. This muscle model was empirically verified for jaw muscles during wide jaw opening [14].

MasoudMillardLAM

This muscle material generates a force as described in [11] for the rigid tendon case.

4.4.2 Example: Muscle attached to a rigid body

Figure 4.3: SimpleMuscle model loaded into ArtiSynth.

A simple model showing a single muscle connected to a rigid body is defined in

  artisynth.demos.tutorial.SimpleMuscle

This model is identical to RigidBodySpring described in Section 3.2.2, except that the code to create the spring is replaced with code to create a muscle with a SimpleAxialMuscle material:

      // create the muscle:
      muscle = new Muscle ("mus", /*restLength=*/0);
      muscle.setPoints (p1, mkr);
      muscle.setMaterial (
         new SimpleAxialMuscle (/*stiffness=*/20, /*damping=*/10, /*maxf=*/10));

Also, so that the muscle renders differently, the rendering style for lines is set to SPINDLE using the convenience method

      RenderProps.setSpindleLines (muscle, 0.02, Color.RED);

To run this example in ArtiSynth, select All demos > tutorial > SimpleMuscle from the Models menu. The model should load and initially appear as in Figure 4.3. Running the model (Section 1.5.3) will cause the box to fall and sway under gravity. To see the effect of the excitation property, select the muscle in the viewer and then choose Edit properties ... from the right-click context menu. This will open an editing panel that allows the muscle’s properties to be adjusted interactively. Adjusting the excitation property using the adjacent slider will cause the muscle force to vary.