Specifications

95
lengths in AnyBody is the assumption that each muscle-tendon unit has its optimal length at some particular
position of the joints it spans. We simply define one or several studies that put the body model in these
positions and adjust the lengths of the tendons to give the attached muscles their optimal lengths in those
positions. When you subsequently run an analysis, the system uses the calibrated tendon lengths regardless
of how they are defined in the AnyScript file. (This means that you have to run the calibration(s) every time
you have reloaded the model if they are to take effect).
AnyBody has several different types of muscle models. Some are very simple and contain no strength-length
relationship, while others do. It goes almost without saying that the former type is not affected by
calibration. If you use one of the latter - more advanced - models, however, calibration may be crucial. If
the tendon is too long, the muscle will end up working in an unnaturally contracted state where it has very
little strength. If the tendon is too short, the muscle will be stretched, and its passive elasticity will affect
the force balance in the system. Since the passive elastic force in a muscle-tendon unit typically grows very
rapidly with stretching, a too short tendon can cause very large antagonistic muscle actions.
Enough talk! Let's define a muscle and calibrate it. We shall begin with the simple arm model we developed
in the "Getting Started with AnyScript
" tutorial. If you have not already saved the model in a file, get it
here: arm2d.any
.
In that simple example, all the muscles were assumed to be of a simple type with constant strength. We
shall add another and much more detailed muscle model:
// -----------------------------------------------------
// Muscles
// -----------------------------------------------------
AnyFolder Muscles = {
//---------------------------------
// We define one simple muscle model, which we will use
// for all muscles except biceps long
AnyMuscleModel MusMdl = {
F0 = 300;
};
AnyMuscleModel3E BicepsLongModel = {
AnyVar PCSA = 2.66; // Physiological cross sectional area [cm^2]
F0 = PCSA*30; // Presuming a maximum muscle stress of 30 N/cm^2
Lfbar = 0.123; //Optimum fiber length [m]
Lt0 = 0.26; //First guess of tendon slack length [m]
Gammabar = 0.3*(pi/180); //Pennation angle converted to radians
Epsilonbar = 0.053; //Tendon strain at F0
K1 = 10; //Slow twitch factor
K2 = 0; //Fast twitch factor(zero when no info available)
Fcfast = 0.4; //Percentage of fast to slow factor
Jt = 3.0; //Shape parameter for the tendon stiffness
Jpe = 3.0; //Shape parameter for the parallel stiffness
PEFactor = 5.0; //Parameter for influence of parallel stiffness
}; // End of BicepsLongModel
};
As you can see from the comments, the muscle has many parameters you have to set. The significance of
each of these is explained in detail in the muscle modeling tutorial
. For this model to take effect, we must
assign it to the biceps long muscle. It is a little further down in the file, where the red line must be changed:
//---------------------------------
AnyViaPointMuscle BicepsLong = {
AnyMuscleModel &MusMdl = .BicepsLongModel;
AnyRefNode &Org = Main.ArmModel.GlobalRef.BicepsLong;
AnyRefNode &Ins = ..Segs.LowerArm.Biceps;
AnyDrawViaPointMuscle DrwMus = {};
};