Specifications

104
AnyRevoluteJoint Jnt = {
AnyRefFrame &ref1 = .GlobalRef;
AnyRefFrame &ref2 = .Arm.Jnt;
Axis = z;
};
// Drive the revolute joint at constant velocity
AnyKinEqSimpleDriver Drv = {
DriverPos = {-10*pi/180};
DriverVel = {40*pi/180};
AnyRevoluteJoint &Jnt = .Jnt;
Reaction.Type = {0};
};
}; // MyModel
// The study: Operations to be performed on the model
AnyBodyStudy MyStudy = {
AnyFolder &Model = .MyModel;
RecruitmentSolver = MinMaxNRSimplex;
Gravity = {0.0, -9.81, 0.0};
};
}; // Main
When you load the model, open a model view window, and run the SetInitialConditions operation, you
should get the following picture:
The model has a driver, so you can run the kinematic analysis and see the movement. The arm flexes about
the origin of the red reference frame. If you try to run the InverseDynamicAnalysis, you will get an error:
Muscle recruitment analysis failed, simplex solver reports that solution does not
satisfy all constraints.
This is because the model does not have any muscles to balance the arm against the downward pull of
gravity. Let us define the simplest possible muscle to carry the load. As mentioned above, a muscle has two
basic components: a kinematic model, and a strength model. We shall begin with the latter, and for the time
being define the simplest possible version.
If you pick the Classes tab in the tree view on the left hand side of the Editor Window, then you will get
access to the class tree. Expand the tree as shown in the picture until you get to the AnyMuscleModel.