Specifications
143
muscles are disregarded and the body is balanced entirely by joint torques. This type of analysis can provide
important information about the function of limbs and joints, and it is extremely numerically efficient.
Joint torque inverse dynamics can be accomplished by adding general muscles to the joints to replace the
physiological muscles of the body. This way, the "muscle forces" computed in the general muscles will
simply be the joint torques.
The example from the preceding lessons is not well suited to play with joint torques, so please download a
new example to start on by clicking here (right-click and save to disk).
This is in fact a simplified version of
the simple arm example from the Getting Started with AnyScript
tutorial, where the muscles have been
removed. The model has two segments, an upper arm and a forearm, and is attached to the global
reference frame at the shoulder. It has a 100 N vertical load acting downwards at the hand.
The lack of muscles means that the model cannot currently do an inverse dynamics analysis. If you try to
run the InverseDynamicAnalysis operation, you will get the following error message:
<address>ERROR : C:\Documents and Settings\jr\My
Documents\AnyScripts\demo\MuscleDemo\MuscleDemo.6.any(103) : ArmStudy : Muscle recruitment
analysis failed, simplex solver found that problem was unbounded.</address>
which is a mathematical way of stating that the model cannot be balanced in the absence of muscles. In this
case we are not going to add real muscles. Instead we shall add general muscles to the revolute joints. The
best way to introduce a general muscle is to insert it from the class tree. Place the cursor after the Drivers
folder, locate the AnyGeneralMuscle in the class tree, and insert a template:
AnyFolder Drivers = {
//---------------------------------
AnyKinEqSimpleDriver ShoulderMotion = {
AnyRevoluteJoint &Jnt = ..Jnts.Shoulder;
DriverPos = {-1.7};
DriverVel = {0.4};
Reaction.Type = {0};
}; // Shoulder driver
//---------------------------------
AnyKinEqSimpleDriver ElbowMotion = {
AnyRevoluteJoint &Jnt = ..Jnts.Elbow;
DriverPos = {1.5};
DriverVel = {0.7};










