Specifications

115
A muscle can pass through an unlimited number of via points, and the points can be attached to different
segments. This can be used to create rather complex kinematic behaviors of muscles, but it also requires
care in the definition to avoid unrealistic muscle paths when the via points move about with the different
segments.
From-the-point of view of kinematic robustness, the wrapping muscles are easier to handle than via point
muscles, but the price is a much higher computational expense. Wrapping muscles are the subject of Lesson
4.
Lesson 4: Wrapping muscles
Many muscles in the body are wrapped over bones and slide on the bony surfaces when the body moves.
This means that the contact forces between the bone and the muscle are always perpendicular to the bone
surface, and the muscle may in fact release the contact with the bone and resume the contact later
depending on the movement of the body. Via point muscles
are not capable of modeling this type of
situation, so the AnyBody Modeling System has a special muscle object for this purpose.
A wrapping muscle is presumed to have an origin and an insertion just like the via point muscle. However,
instead of interior via points is passes a set of surfaces. If the surfaces are blocking the way then the
muscles finds the shortest geodetic path around the surface. Hence the name of the class:
AnyShortestPathMuscle. The fact that the muscle always uses the shortest path means that it slides
effortlessly on the surfaces, and hence there is no friction between the muscle and the surface.
Enough talk! Let us prepare for addition of a wrapping muscle to our model. If for some reason you do not
have a working model from the previous lessons, you can download one here
.
A wrapping muscle needs one or several surfaces to wrap on, so the frst thing to do is to define a surface.
For convenience we shall attach the surface to the global reference frame, but such wrapping surfaces can
be attached to any reference frame in the system, including segments. To be able to play around with the
position of the surface, we initially define a point on GlobalRef for the purpose:
// Global Reference Frame
AnyFixedRefFrame GlobalRef = {
AnyDrawRefFrame drw = {
RGB = {1,0,0};
};
AnyRefNode M1Origin = {
sRel = {0.0, 0.1, 0};
};