|
With the kinematic analysis in place we are ready to compute forces and investigate ergonomic properties of the pedal arrangement. We shall presume that the pedal is loaded by a spring, the force of which the leg must overcome when stepping on the pedal. AnyScript has a ligament class, which can be used to create springs of various types. Please refer to the ligament tutorial for further information. However, here we shall take a simpler approach and simply define the spring force directly.
A force can be added to any kinematic measure by means of the AnyForce class. Because the concept of kinematic measures is general, the AnyForce class attains the type given by the kinematic measure. If the measure is a length, then an AnyForce is a force, and if it is an angle, the AnyForce automatically becomes a moment. In the present case we shall add the AnyForce to the kinematic measure of the pedal's hinge. Let us initially study the measure. Run the KinematicAnalysis again, open a ChartFX 2D View, and browse your way through the tree to Main.MyStudy.Output.Model.EnvironmentModel.HingeJoint.Pos. You should see the following graph:

The analysis runs in time from zero to one second, and the pedal angle develops in this time from 100 degrees (1.74 rad) to 145 degrees (2.53 rad). Let us presume that the pedal is loaded by a linear spring that is slack at 0 degrees and increases its moment linearly with the rotation of the hinge. We might be wondering: What would be a comfortable spring stiffness for a pedal like that? Not having much experience with pedal design it might be difficult to imagine just how stiff the spring should be, and we could find ourselves developing a series of hardware prototypes with different springs and perhaps conducting subjective investigations with test subjects. A simple task like this could potentially be very time consuming and expensive.
Let us do it with AnyBody instead. We shall start out by declaring an AnyForce to play the role of the spring. Since this is not a part of the body it is logical to place it in the Environment.any file. Here's what to add:
AnyRevoluteJoint HingeJoint = {
Axis = z;
AnyFixedRefFrame &Ground = .GlobalRef;
AnyRefNode &Pedal = .Pedal.Hinge;
};
AnyForce Spring = {
AnyRevoluteJoint &Hinge = .HingeJoint;
F = -0.0*.HingeJoint.Pos;
};
This looks easy, does it not? The AnyForce contains a reference to the HingeJoint. Since the degree of freedom in HingeJoint is rotational, the force is automatically turned into a moment and applied it to the hinge. The specification of F is the actual size of the force. We have made it proportional to the HingeJoint.Pos, which is the hinge angle, and we have initially set the spring stiffness to 0.0, to investigate the effect of having no spring before we start adding a spring force. Notice, by the way, the minus sign in front of spring constant. It has no importance now, but when we start adding non-zero stiffnesses it will signify that the spring force goes against the angle, i.e. pushes back onto the foot.
There are just a couple of things we need to do before we can do the InverseDynamicAnalysis operation and compute the forces: All the drivers we added in the previous lesson have motors built into them. This means that whatever force or moment is necessary to perform the movement will be provided by the drivers, and there will be nothing for the muscles to do. Motors in drivers are technically reaction forces, and they can be turned off inside the driver:
AnyFolder Drivers = {
AnyKinEqSimpleDriver AnkleDriver = {
AnyUniversalJoint &Ankle = Main.MyPedal.HumanModel.Right.Leg.Jnt.Ankle;
DriverPos = {1.570796, 0};
DriverVel = {0, 0};
Reaction.Type = {Off, Off};
};
AnyKinEqSimpleDriver KneeDriver = {
AnyKinLinear GlobKnee = {
AnyRefFrame &Glob = Main.MyPedal.EnvironmentModel.GlobalRef;
AnyRefFrame &Knee = Main.MyPedal.HumanModel.Right.Leg.Seg.Thigh.KneeJoint;
};
MeasureOrganizer = {2};
DriverPos = {0};
DriverVel = {0};
Reaction.Type = {Off};
};
AnyKinEqSimpleDriver Pedal = {
AnyRevoluteJoint &Hinge = Main.MyPedal.EnvironmentModel.HingeJoint;
DriverPos = {100*pi/180};
DriverVel = {45*pi/180};
Reaction.Type = {Off};
};
There is one more thing we have to do: The model has no muscles. This can be rectified by a simple change in the included body model in the main file:
AnyFolder HumanModel={
#include "../../../BRep/Aalborg/BodyModels/RightLeg/BodyModel.any"
#include "../../../BRepAalborg/Scaling/ScalingStandard.any"
AnyFolder StrengthParameters={
AnyVar SpecificMuscleTensionSpine= 90; //N/cm^2
AnyVar StrengthIndexLeg= 1;
AnyVar SpecificMuscleTensionShoulderArm= 90; //N/cm^2
};
};
Now, reload the model and run the InverseDynamicAnalysis. The model should look like this:

Notice that the muscle forces are illustrated by the bulging of the muscles. In the ChartFx view near the top of the tree you can find the MaxMuscleActivity. It expresses the load on the body in percent of its strength. Plotting this property in the ChartFx View gives you the following result:

Obviously holding the leg out in the air like that without the support of a pedal spring and holding up the weight of the pedal as well is rather strenuous and in fact requires about 44% of the body's strength.
Now, let us study the effect of spring stifness. We initially try:
F = -10*.HingeJoint.Pos;
This produces the activity curve:

Obviously the level is much lower now starting at just 12%, so the spring really seems to help. Let us try to double the stiffness:
F = -20*.HingeJoint.Pos;

This appears to be equally good in terms of activity level and has the added quality of increasing muscle activity or effort for increasing angle. This can make it easier for the operator to control the pedal and thereby enhance the operability.
The completed model is available here: PedalDemo.zip.
The AnyBody Modeling System is all about making this type of investigation easy. The mechanical model we have put together in four simple lessons has a complexity worthy of a Ph.D. project if you develop it bottom up. In AnyBody, this is a matter of a few hours of work when using the predefined models of the repository.
Let's continue to Lesson 9: Model Structure.
|