ArtiSynth Modeling Guide

Chapter 7 Muscle Wrapping and Via Points

ArtiSynth provides support for multipoint springs and muscles, which are similar to axial springs and muscles (Sections 3.1.1 and 4.4), except that they can contain multiple via points and also wrap around obstacles. This allows the associated force directions to vary in response to obstacles and constraints in the model, which is particularly important in biomechanical models where point-to-point muscles need to wrap around anatomical structures such as bones. A schematic illustration is shown in Figure 7.1, where a single spring connects points {\bf p}_{0} and {\bf p}_{2}, while passing through a single via point {\bf p}_{1} and wrapping around obstacles W_{1} and W_{2}. Figure 7.2 shows two examples involving a rigid body with fixed via points and a spring wrapping around three rigid bodies.

Figure 7.1: Schematic illustration of a multipoint spring passing through a via point {\bf p}_{1} and wrapping around two obstacles W_{1} and W_{2}. The points A_{1}, B_{1} and A_{2}, B_{2} denote the first and last locations where W_{1} and W_{2} make contact with the spring.
Figure 7.2: Left: A multipoint spring with two via points rigidly fixed to a box-shaped rigid body. Right: A multipoint spring wrapped around three obstacles.

As with axial springs and muscles, multipoint springs and muscles must have two points to denote their beginning and end. In between, they can have any number of via points, which are fixed locations which the spring must pass through in the specified order. Any ArtiSynth Point object may be specified as a via point, including particles and markers. The purpose of the via point is generally to direct the spring along some particular path. In particular, the path directions before and after a via point will generally be different, and forces acting on the via point will be determined by the tension in the spring (or muscle) acting along these two different directions.

Figure 7.3: A multipoint spring with a single via point {\bf p}_{1}, showing the unit direction vectors {\bf u}_{A} and {\bf u}_{B} immediately before and after.

Conceptually, the spring or muscle “slides” through its via points, which act analogously to virtual three dimensional pulleys. In particular, the proportional distance between via points does not remain fixed.

The tension f within the spring or muscle is computed from its material, using the relation f(l,\dot{l},a) described in Sections 3.1.1 and 4.4.1, where l now denotes the entire length of the spring as it passes through the via points and wraps around obstacles. The total force {\bf f} acting on each via point is then given by

{\bf f}=f\cdot({\bf u}_{B}-{\bf u}_{A})

where {\bf u}_{B} and {\bf u}_{A} are unit vectors giving the spring’s direction immediately after and before the via point (Figure 7.3).

Multipoint springs can also be made to wrap around one or more wrappable objects. Unlike via points, wrappable objects can occur in any order along the spring and wrapping only occurs when the spring and the object actually collide. Any ArtiSynth object that implements Wrappable can be used as a wrapping object (currently, only RigidBody objects implement Wrappable). The forces acting on a wrappable are those generated by the forces {\bf f}_{A} and {\bf f}_{B} acting on the points A and B where the spring makes and leaves contact with the it (Figure 7.4). These forces are given by

{\bf f}_{A}=-f{\bf u}_{A},\quad{\bf f}_{B}=f{\bf u}_{B},

where {\bf u}_{B} are {\bf u}_{A} are unit vectors giving the spring’s direction immediately before A and after B. Points A and B are collectively known as the A/B points.

Figure 7.4: A multipoint spring wrapping around a single obstacle W, with initial and final contact at points A and B, and associated unit direction vectors {\bf u}_{A} and {\bf u}_{B}.