Specifications

147
We are going to make a couple of changes to the simple arm model to investigate contact in more detail. We
shall imagine that the hand of the model has a vertical wall to support against. We have to change the
kinematics to make the arm slide along the wall. It would be really difficult to figure out which joint angle
variations are needed to make the hand move vertically, so we drive the hand directly instead.
AnyFolder Jnts = {
//---------------------------------
AnyRevoluteJoint Shoulder = {
Axis = z;
AnyRefNode &GroundNode = ..GlobalRef.Shoulder;
AnyRefNode &UpperArmNode = ..Segs.UpperArm.ShoulderNode;
}; // Shoulder joint
AnyRevoluteJoint Elbow = {
Axis = z;
AnyRefNode &UpperArmNode = ..Segs.UpperArm.ElbowNode;
AnyRefNode &LowerArmNode = ..Segs.LowerArm.ElbowNode;
}; // Elbow joint
}; // Jnts folder
AnyKinLinear HandPos = {
AnyRefFrame &ref1 = .GlobalRef.Shoulder;
AnyRefFrame &ref2 = .Segs.LowerArm.PalmNode;
};
AnyFolder Drivers = {
AnyKinEqSimpleDriver HandDriver = {
AnyKinLinear &Measure = ..HandPos;
MeasureOrganizer = {0,1};
DriverPos = {0.45, -0.6};
DriverVel = {0, 0.5};
Reaction.Type = {0, 0};
};
/* //---------------------------------
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};
Reaction.Type = {0};
}; // Elbow driver
*/}; // Driver folder
Notice that the previous two joint angle drivers have been disabled. Otherwise the system would become
kinematically over-determinate. Notice also that the new driver drives two degrees of freedom
corresponding exactly to the two drivers we have disabled. Finally, please notice the line
Reaction.Type = {0, 0};
This means that the wall presently provides no reaction forces to the arm. Plotting the MaxMuscleActivity
provides the following result: