Specifications

153
work with strain here rather than absolute length change? The reason is that ligaments are rather stiff
structures, so small length changes can cause large forces, and it is therefore necessary that the slack
length fits the model precisely. This length will usually have to be tuned to size changes of the body model.
When we work with strain, the stiffness becomes a more generic property of the ligament and is
independent of the length it gets calibrated to.
The three parameters we have defined leave room for no more than a linearly elastic behavior with a slack
length. Ligament elasticity is generally not linear, so we need something extra to be able to specify
nonlinear behavior. The mathematical background for the AnyLigamentModelPol is that it takes the form:
As you can see, it is a fourth order polynomial with the third order term missing. The 0'th order coefficient
accounts for the slack length, and the first order coefficient accounts for the slope when the model is linear
and the second and fourth order terms are missing. But in the presence of the nonlinear terms it becomes
very difficult to interpret the significance of each term. For this reason, the nonlinearity in the model is
defined by two parameters with an easier interpretation than the above-mentioned C2 and C4.
The two parameters are called a0 and a1 respectively. The first parameter, a0, defines the slope of the
curve at slack length. If you study the curve above, you can see that it has a sharp kink at the slack length.
It changes abruptly from zero slope to the nominal slope given by (eps1,F1). The default value of a0 is 1,
and this corresponds to the slope right after the kink being defined entirely by (eps1,F1). In other words,
the curve is pointing directly at the point (eps1,F1). In fact, the significance of the a0 is that it interpolates
the slope between zero (for a0 = 0) and the linear slope you see in the curve above for a0 = 1. Try inserting
the following:
AnyLigamentModelPol LigModel = {
L0 = 1.30; // Slack length
eps1 = 0.2; // Strain where F1 is valid
F1 = 1000; // Force in the ligament at strain eps1
a0 = 0.0;
};
Subsequently reload the model, run the InverseDynamicAnalysis, and plot the ligament force again. You will
see the following: