Muscle Recruitment 
LifeMOD has a muscle recruitment capability for situations where
multiple muscle activation patterns are capable of meeting the forward
dynamics kinematic profile. This example demonstrates the muscle
recruitment process using a simple arm flexion at the elbow.
Key skills exercised in this tutorial include:
- Development of trainable muscle forces
- Inverse-dynamics, forward-dynamics simulations.
- Setup, evaluating, and running muscle recruitment
optimization
Sections
Generating the Body Segments
In this phase, the arm model is created for simulation. The model will
consist of a right arm and the upper body.
Step 1: Bring up segments panel and set fields
Launch the LifeMOD™ software and select CREATE NEW MODEL to
begin a new modeling session. Select SEGMENTS from the main-menu and
CREATE BASE SEGMENT SET from the sub-menu.
Step 2: Create the body Generate a full body model
using the GeBod database. Select a 170 lbs, 70 inch tall male. Name model
Eric, set units to Inch Lbm Lbf, and hands to grip. Select "Create Body
Parameter Table" to create the body measurement table, then select "Create
Human Segments" to create the body.
Reducing the Model
In this phase, the segments of the model are deleted to focus only on
the right arm. All segments are deleted except for the head, neck,
upper_torso, central_torso, lower_torso, right_scapula, right_upper_arm,
right_lower_arm, right_hand.
Step 3: Bring up segment delete panel Select
SEGMENTS on the main-menu and DELETE on the sub-menu.
Step 4: Delete the various body segments
All segments are deleted except for the head, neck,
upper_torso, central_torso, lower_torso, right_scapula, right_upper_arm,
right_lower_arm, right_hand.
Generating the Joints
In this phase, the human segments created in the first phase are
connected together with kinematic joints. At the same time passive torque
functions are created at each joint degree of freedom. The passive joints
are created on the arm and trunk to stabilize the model during the
inverse-dynamics simulation and includes a spring-damper torque and angle
limiting torque for each rotation degree of freedom for the individual
joint (scapular, shoulder, elbow, wrist, upper neck, lower neck, thoracic
and lumbar). For information on selecting specific model parameters for
this section see Choosing
Model Parameters.
Step 5: Bring up joint create panel Select JOINTS
in the main-menu and CREATE BASE JOINT SET in the sub-menu. Select
"Prepare Model with Recording Joints".
Step 6: Create passive spring damper joints with angle limits
for the model
Check the Right Arm and the Spinal joint sets,
and set to 1 and the damping to .1. Select MODIFY to bring up the joint
matrix panels.
Step 7: Set all the spinal joints to fixed and create the first
set Select "Fixed" as the joint option for each
degree-of-freedom for each spinal joint and select apply to create fixed
joints in the spine.
Step 8: Set the right scapular joint and shoulder joint to
fixed and create the set Select "Fixed" as the joint option
for each degree-of-freedom for each right arm joint, except for the right
elbow sagittal freedom which should remain as passive. Select APPLY to
create fixed joints in the arm.
Creating the Muscle Forces
The next step in the process is to create soft tissues (muscles) on the
model. LifeMOD™ automatically creates a set of basic muscle groups for the
body. Muscles consist of recording elements or trained
elements. The recording elements are simple data collectors which record
the contraction history of the muscle during an activity when the model is
moved using external drivers such as motion agents. Trained elements can
be either PID closed-loop force actuators or actuation curve open-loop
force actuators acting to drive the skeleton's motion. Muscle parameters
such as physiological cross sectional area (pCSA) and maximum tissue
stress are used to calculate the maximum force potential of the particular
muscle. LifeMOD™ contains a database of pCSA values for each muscle and is
scaled accordingly based on the input body parameters (ht, wt, gender and
age). Further, the force output of the muscle may be scaled from 0% to
200% to change the contributions of each particular muscle. For
information on selecting specific model parameters for this section see Choosing
Model Parameters.
Step 9:Bring up the tissue set create panel Select
SOFT TISSUES on the main-menu and CREATE BASE TISSUE SET on the
sub-menu.
Step 10: Set the fields for the muscle generation
Select "Prepare Model with Recording Muscle Elements (To be
trained in an inverse-dynamics simulation)" to bring up the panel
displayed in figure 5. Set the passive stiffness and damping to 0.1,
muscle resting load to 0, and set the muscle tone multiplier to 200%.
Step 11: Create the muscles Check right arm and
select APPLY to create the muscles.
Posing the Human Model
After the joints are created on the model the posture of the model may
be adjusted, and the model moved into place. The posture may be adjusted
by recalling one of several postures in the posture library then further
modify the joint angles if necessary. The body is moved into place by
selecting the Lower_Torso segment and changing the location.
Step 12: Bring up posture panel Select POSTURE on
the main-menu and CONFIGURE BASE MODEL on the sub-menu.
Step 13: Update the right shoulder joint Enter -40
for the sagittal angle of the shoulder joint. Select the Shoulder button
to update the joint with the angle.
Step 14: Update the right elbow joint Enter -10
for the sagittal angle of the elbow joint. Select the Elbow button to
update the joint with the angle.
Adding Motion Agents to the Human Model
The model, as it exists, is passive and must be driven or manipulated
with an external force. To drive the model to capture the simple flexion
and extension motion of the neck, Motion Agents will be added to the
model. The motion will have the effect of simply rotating the lower arm
through its motion, all the while the contraction of the muscles will be
recorded for the subsequent forward-dynamics simulation.
Step 15:Bring up the create motion agent panel
Select MOTION on the main-menu and CREATE INDIVIDUAL MOTION AGENT on
the sub-menu.
Step 16: Create a spline using data from Figure 9
Select Build, Data_Elements, Spline, New in the task bar.
Enter data from figure 9. Select OK.
OR
Create the data spline using the ADAMS/View commands:
data_element create spline spline=.World.Eric_SPLINE_1 x =
0.0, 1.0, 2.0, 3.0, 4.0 y = 0.0, -10.0, -20.0, -40.0, -60.0
linear_extrapolate=no units=no_units
Step 17: Create motion agent on the lower arm
Select Eric_Right_Lower_Arm for the body segment. Use the
Manually Select Location agent positioning method with a location of
(-1.8, 10.7, 13.4) Set the parameters as in Figure 10. Set all dof's to
free except Rx_dof which is set to driven referring to the Spline_2
created in the prior step. Select APPLY to create the motion agent
Running the Inverse-Dynamics Simulation
With the model developed, complete with passive training muscle groups
and motion agents an inverse-dynamics simulation may be performed to
capture the contraction of the muscles for the elbow flexion activity.
Step 18: Create a fixed joint between the upper_torso and
ground Select the fixed joint icon from the main toolbox.
Select .World.Eric_Upper_Torso as the first body, and .World.ground as the
second body. Right-click and set the location to (5, 9, 3) in the location
panel. Select APPLY.
OR
Use the following ADAMS/View commands to create a fixed joint between
the upper_torso and ground:
marker create marker=.World.Eric_Upper_Torso.ground
location=5, 9, 3 rel=.world marker create marker=.World.ground.Chest
location=5, 9, 3 rel=.world
constraint create joint Fixed
joint_name=.World.Chest_Ground
i_marker_name=.World.Eric_Upper_Torso.ground
j_marker_name=.World.ground.Chest
Step 19: Bring up the analyze panel Select ANALYZE
from the main-menu and DYNAMICS from the sub-menu
Step 20: Run the dynamics simulation Set gravity
at -386.0885826772 in the y direction and run the simulation for 4 seconds
and 100 time steps using the default integrator settings.
Step 21: Display simulation results Use the
ADAMS/View main toolbox to animate the model.
Running the Forward Dynamics Simulation
With the muscle contraction history recorded from the inverse-dynamics
simulation, it is now used in linear PID-Servo formulation to produce a
force to recreate the motion history. The process entails deactivating the
Motion Agents and updating the muscles. For information on selecting
specific model parameters for this section see Choosing
Model Parameters.
Step 22: Bring up soft tissue Training panel
Select SOFT TISSUES on the main-menu and TRAINING on the
sub-menu. Select "Install Trained Closed-loop Contractile Elements on
Muscles".
Step 23: Update the muscles using inverse dynamics data
Specify 1e6 as the proportional gain, 1e6 as the integral
gain, and 1e4 as the derivative gain. These values control how well the
PID-servo actuators will track the desired contraction at each time step
in the analysis. Note that the individual muscle will not produce a force
greater than the physiological cross section area (pCSA) times the maximum
tissue stress. Select APPLY to update the muscles.
Step 24: Bring up the analyze panel Select ANALYZE
from the main-menu and DYNAMICS from the sub-menu
Step 25: Disable the motion agent and run the dynamics
simulation Set gravity at -386.0885826772 in the y direction
and run the simulation for 4 seconds and 100 time steps using the default
integrator settings. Select "Disable motion agents".
Select ANALYZE.
Step 26: View the simulation results Use the
ADAMS/View main toolbox to animate the model.
Step 27: Save the analysis Select SAVE ANALYSIS
and enter the name Baseline. Select OK.
Adding Muscle Recruitment Data Elements
We are done with a standard forward dynamics analysis. We will
introduce the topic of muscle recruitment by first adding the data
structures for muscle recruitment to the model. These include adding a
goal and associated response measures to be used to evaluate and optimize
recruitment response, dynamic gains to the muscles to represent the
recruitment function, and adding a design variable for each muscle to be
used for recruitment optimization.
Step 28: Bring up the muscle recruitment setup panel
Select SOFT TISSUES on the main-menu and RECRUITMENT on the sub-menu
and SETUP on the tertiary menu.
Step 29: Fill in the Recruitment Setup Fill in all
selection values as shown in Figure 14.
Make sure that the Goal option is checked, and select Min Activation
for the goal, Power for the Measure, and 2.0 for the Exponent. These will
be used to define measures and objectives for the muscle recruitment. The
Suffix is a label associated with this goal that is used in the name of the
created variable, measure, and objective.
Set the Dynamic Gain value to 10.0, the start to 0.0, end to 4.0, and
Spline inc to 0.02. These will define a dynamic gain spline representing a
default recruitment level that will be the same for all muscles, and span
the entire time for the simulation. It is also good practice to set the
spline increment to at least five times smaller than the optimization
increment size to be used later.
Set the Design Variables min to 1.0 and max to 1000.0. These represent
the minimum and maximum level that the recruitment level can be changed to
during a recruitment optimization.
In the Muscles field, select all muscles by right clicking and
selecting "*". Alternatively type "*" and hit enter in the field, and then
highlight all muscles in the Which? panel and select OK (see Figure 15).
By selecting all muscles, the objectives and measures will be created
based on the full set.
Select APPLY.
Step 30: Bring up the analyze panel Select ANALYZE
from the main-menu and DYNAMICS from the sub-menu
Step 31: Disable the motion agent and run the dynamics
simulation Set gravity at -386.0885826772 in the y direction
and run the simulation for 4 seconds and 100 time steps using the default
integrator settings. Select "Disable motion agents".
Select ANALYZE.
Step 32: Save the analysis Select SAVE ANALYSIS
and enter the name PreOptimization. Select OK.
Step 33: Bring up results plotting Select RESULTS
on the main-menu and DATA DISPLAY on the sub-menu. Select "Results Window"
button to bring up the results processor.
Step 34: Review Recruitment Measures Right click on
the plot window in the Adams/PostProcessor window and select Load Plot. Select
the simulation PreOptimization, source Measures. There are now two measures
for each muscle: _MEA_At measuring the activation of the muscle, and
_MEA_DynGain showing the Dynamic Gain representing the recruitment
level.
There is one additional measure called MEA_MinAct2. This
represents the goal, which was set to Power of Exponent 2.0. The measure
is the sum squared activation levels for all muscles, divided by the
number of muscles, and then raised to the 1/2.0 power. In other words, for
the Power of Exponent equal to 2.0, the MEA_MinAct2 measure is for the rms
Activation level.
Select Surf and review the measures. Note that there are only five
muscles with significant activation levels: _Bic1_Rtiss_1, _Bic2_Rtiss_1,
_Brac1_Rtiss_1, _Ecarp1_Rtiss_1, and _Pron1_Rtiss_1.
Calculating Muscle Recruitment Sensitivities
Now that we have muscle recruitment data structure in place, and have
an initial assessment of the muscle activations using default muscle
recruitment levels, we would like to optimize the recruitment levels.
Before proceeding with optimization, however, it would be nice to filter
the muscle set down to the minimum number of muscles needed to optimize.
This way the optimization will proceed as efficiently as possible.
Based on the initial evaluation of the muscle activations, the five
muscles with significant activation levels would be good candidates for
optimization. To determine if changes in the recruitment levels for these
muscles have any effect on their and any other muscles activation levels,
a sensitivity case will be run.
Step 35: Set Solution settings Deselect the
"Results Window" button to exit the post processor and return to the main
simulation tool. Select ANALYZE on the main-menu and DYNAMICS on the
sub-menu.
Set gravity at -386.0885826772 in the y direction. Select "Disable
motion agents".
Step 36: Bring up the recruitment sensitivity panel
Select SOFT TISSUES on the main-menu and RECRUITMENT on the
sub-menu and SENSITIVITY on the tertiary menu.
Step 37: Fill in the Sensitivity options Fill in
the values as shown in Figure 17.
Set the start to 0.0, end to 4.0, and Solver step to 0.1.
In the Muscles field, select just the five muscles with significant
activation levels (_Bic1_Rtiss_1, _Bic2_Rtiss_1, _Brac1_Rtiss_1,
_Ecarp1_Rtiss_1, and _Pron1_Rtiss_1). The names can be typed in, selected
by right clicking adding the names sequentially, or type "*" and hit enter
in the field, and then highlight the five muscles in the Which? panel and
select OK (see Figure 18). By selecting these five muscles, a separate
sensitivity analysis will be performed on each of these muscles.
Select "Modify" under Advance Settings. Set the Perturbation to 10.0,
the Baseline Prefix to Sens_Baseline, and the Analysis Prefix to
Sensitivity.
In the response muscles field select all muscles. This means that the
change in activation for all muscles will be calculated for each
sensitivity analysis. (if this field is left blank, only the five muscles
in the Muscles field would be calculated).
Step 38: Run & Review Muscle Recruitment Sensitivity
Select APPLY.
Six analysis will be performed: a baseline analysis followed by five
sensitivity analysis, one for each muscle in the Muscles field. Each
sensitivity analysis will have the recruitment level for that muscle
increased by the perturbation value. Results will be presented in an
external CSV file with name based on the Analysis Prefix field value. When
the analysis are done, a message will indicate where to find the results
(see Figure 19).
Open file Sensitivity.csv in Excel, or alternately a text editor.
Values in the file represent rms (average over time) activation changes,
relative to the baseline run, for the muscles. So, for example, the first
row indicates that by changing the recruitment curve from 10.0 (baseline
set in step 29) to 20.0 (by adding the perturbation value of 10.0) for
muscle _Bic1_Rtiss_1, the activation for _Bic1_Rtiss_1 has an rms change
of 0.17, with significant changes to _Bic2_Rtiss_1, _Brac1_Rtiss_1,
_Pron1_Rtiss_1, and _Ecarp1_Rtiss_1 - i.e. the same five muscles with
significant activation levels. More important, none of the rest of the
muscles have a significant change in activation (from near zero levels)
for a change in recruitment for these five muscles. The conclusion is that
we should perform a recruitment optimization on these five muscles, but we
can leave out the other muscles as not affected.
Running Recruitment Optimization
Now let's perform the Recruitment optimization. Optimization will use
the recruitment levels of the five muscles as design variables, and
minimize the goal of summed activation squared. For this example we will
run a single optimization across the entire 4.0 second simulation, as
opposed to running a separate optimization at each time step.
Step 39: Bring up the recruitment optimize panel
Select SOFT TISSUES on the main-menu and RECRUITMENT on the
sub-menu and OPTIMIZE on the tertiary menu.
Step 40: Fill in the Recruitment Optimize
panel Fill in all selection values as shown in Figure 21.
Set the Start to 0, end to 4, and Solver step to 0.1. Select Single Stage
to indicate that a single optimization across the entire simulation time will
be performed. (Note: With Multi Stage you set an Optimize Increment to
indicate that optimization will be done in sequential smaller time steps.
For example, if we had wanted to run a separate simulation at each 0.1 second
time steps - centered at 0.0, 0.1, 0.2, ... and spanning ranges 0.0-0.05,
0.05-0.15, 0.15-0.25, ... - we would select Multi Stage and put the
optimization inc to 0.1)
Select Modify under Advanced Settings. Set the algorithm to SQP, Max
Iterations to 3, Perturbation to 0.01, and Tolerance to 1.0e-4. Set the
Analysis Prefix to Optimize_Run. Set Time Measure to Power, and Time Exponent
to 2.0. (Note: Time Measure indicates how the Goal will be evaluated as a
function of time to convert the goal from a curve to a scalar value. This
evaluation is done over the appropriate time increment based on the time
varying values of the Goal Variable.)
In the Muscles field, enter the five muscles we wish to optimize:
_Bic1_Rtiss_1, _Bic2_Rtiss_1, _Brac1_Rtiss_1, _Ecarp1_Rtiss_1, and
_Pron1_Rtiss_1.
In the Goal Variable field enter VAR_MinAct2. This is the name of the
ADAMS_Variable associated with the measure previously created.
The objective of the optimization will be based on the objective
settings in the optimization setup panel.
Select APPLY.
Interrogating Results
Results for the optimization objective vs. iteration should be plotted
in a measure plot, as shown in Figure 22. Results for the optimization are
stored in analysis Optimize_Run.
Step 41: Bring up results plotting Select RESULTS
on the main-menu and DATA DISPLAY on the sub-menu. Select "Results Window"
button to bring up the results processor.
Step 42: Create Measure plots of Muscle Activation Level
Split the post-processing page into a 2x3 grid of plots.
Select simulations PreOptimization and Optimize_Run. Select source
Measures. In the top left plot window, plot measure MEA_minAct2 for
the two simulations. In the remaining windows, plot the _MEA_At measure
for the five muscles of interest: _Bic1_Rtiss_1, _Bic2_Rtiss_1,
_Brac1_Rtiss_1, _Ecarp1_Rtiss_1, and _Pron1_Rtiss_1. For each muscle plot,
set the Y axis to range from 0 to 1.0 with 4 tics.
Notice that the minAct2 curve that the optimization objective is
calculated from (in this case the optimization objective is the sum square
of the values of the minAct2 measure, summed over time) was
reduced during the optimization. All of the muscle
activations were reduced except for muscle _Bic2_Rtiss_1, which was
increased.
Step 43: Create Measure plots of Recruitment Level
Add a second post-processing page in a 2x3 grid of plots.
Select simulations PreOptimization and Optimize_Run. Select Measures. In
five of the plot windows, plot _DynGain measures for the five muscles of
interest. For each muscle plot, set the Y axis to range from 0 to 100.0
with 5 tics.
Notice that the dynamic gain, as represented in the _DynGain measures,
have been adjusted during the optimization. The relative recruitment level
between the muscles is represented by the ratio between these curves. Also
note that the curves are flat, with a single value for the entire 4
seconds of simulation. That is because only a single stage optimization
was performed. It is possible to optimize further in successive stages,
with commensurate simulation time required.
Step 44: DEMO COMPLETE
Further
This model was put forth to demonstrate the muscle recruitment process.
The intention with this model was to show the process with a relatively
small model that solved the recruitment sensitivity and optimization
multi-runs in relatively short time frame. The same process can be used on
any model that has multiple trained muscles.
This model may be refined in many areas including:
- Including more movements
- Including more muscles in the model
- Converting the muscles from simple trained to Hill trained
- Change the optimization objectives
- Optimizing the recruitment levels in smaller stages
|