Team Members



The idea for this project stemmed from the laboratory exercise on confluence, Sky High: Coordinating Muscles for Optimal Jump Performance, in which muscle excitations are manually specified to maximize jump height. Code from the confluence example for Creating an Optimization, which maximizes the forward velocity of a forearm-hand segment in a simple model, was used as a starting point for our optimization code.

We would also like to thank Dr. Delp and the ME 485 teaching team including Daniel Jacobs, Tom Uchida, and Matt DeMers, and OpenSim Developers Ajay Seth and Michael Sherman for their support.

Research Questions

By creating a dynamic optimization to maximize jump height, we hoped to answer the following questions:

  1. What is the highest predicted jump?
  2. How important are arms in a maximum height jump?
  3. Is jump height more sensitive to muscle strength or speed?

Choosing a Model


In order to decrease computation time, we wanted to choose the simplest possible model with the fewest parameters necessary for optimization, while still maintaining a realistic set of muscle actuators for modeling the lower body during jumping. We settled on a 10 degree of freedom, 24 muscle model with a lumped head, arms, and trunk (HAT) segment. The model is based on a 1.8 m tall, 75 kg male subject. More information on the model can be found here.

Arms were later added by replacing the HAT segment with an equivalent mass head-torso segment with free swinging arms. This added 1 degree of freedom at each shoulder controlled by a torque actuator. The maximally activated shoulder torque was taken from Otis et al. (1990). The images to the left are pictures of the model with and without arms in its initial pose.

Contact between the feet and the ground were modeled using 5 ContactSpheres on each foot and treating the platform as a ContactHalfSpace. This was based on the model given in the Confluence example, Sky High: Coordinating Muscles for Optimal Jump Performance.

System Parameters and Controls

In order to simplify the optimization and reduce computation time, we needed to choose a controls strategy with the fewest possible parameters while still accurately simulating muscle activity during jumping. For this reason, we chose to use the bang-bang control strategy on the model actuators. Bang-bang control assumes that a muscle will either be maximally excited or completely off, a strategy that is acceptable in this situation because of jumping’s explosive nature. To parameterize this method, we used two variables to send to the optimizer: initial time, ti, (when the muscle excitation would step up from a value of 0 to 1) and duration, di, (the amount of time it would remain at 1 before dropping back to 0). Using this simple model for muscle control reduces the number of parameters sent to the optimizer, and therefore greatly reduces the computation time. Shown below is a graph of the muscle excitation parameters under bang bang control:

Another way we reduced the computation time of the optimizer was by using symmetric control for actuators. By making the assumption that the left and right sides of the body would match and produce a symmetric jump with symmetric muscle excitations, we cut the number of unknowns sent to the optimizer in half.

Finally, we added event handler to terminate the simulation upon leaving the ground. Because the muscles have no effect on the maximum height of the body’s center of mass after losing contact with the ground (detected by the ground reaction force going to zero), the optimization can be ended at this point. From there, the maximum height of the body’s center of mass can be calculated using the upward velocity and position of the body’s center of mass at the instant the simulation ends. Forward dynamic simulations can be performed in OpenSim to visualize the remainder of the jump.

Defining an Objective Function and Choosing an Optimizer

We used the same objective function used by Anderson and Pandy (1999) which calculates the maximum value of the y-coordinate center of mass using its velocity and position at the instant the model loses contact with the ground:

f = h_{com} + \frac{v_{com}^{2}}{2g}

To choose an optimizer, we looked into those that were already implemented in the SimTK class. After experimenting with several, we found that the LBFGSB optimizer worked best with this optimization problem.

Answering the Research Questions

In order to answer our posed research questions, we had to take the following measures:

 Research question #1: What is the highest jump predicted?

  • Write an optimization routine to maximize the objective function described above.

 Research question #2: How important are arms in a maximum height jump?

  • Add arms and shoulder torque actuators to the model file and optimization parameters.
  • Re-run the optimization with the new setup.  

Research question #3: Is jump height more sensitive to muscle strength or speed?

  • Double the maximum isometric force of the model muscle and re-run the optimization.
  • Double the maximum shortening velocity of the model muscles and re-run the optimization.
  • Compare the results

Source Code

The source code and models can be found in their entirety at our project page on SimTK. Basics on optimization in OpenSim can be found on the example that is distributed with OpenSim, the Arm26 Optimization Example. Discussion on the specific code to this project is explained on the child page called Source Code Explanation.

Results and Conclusions

Using the model with no arms, our optimization predicted a maximum jump height of 52.4 cm. This video shows the progression (from left to right) of the optimizer from the initial guess of excitations to its final result:

In this video, we notice a substantial countermovement where the model goes deeper into a squat, dropping its center of mass, before exploding upwards into a jump, a behavior common to experimental results of actual human jumpers. Given that the only requirement for the optimization was maximizing the final height of the body’s center of mass, this result confirms that a countermovement is vital in making an optimal jump.


It should be noted that the initial guess sent to the optimizer can have a major effect on the final optimized jump height. Below are videos showing two initial guesses that produced less than optimal jumps:

 In the first video, the optimizer only finds a jump of 40.2 cm. In the second, it finds a jump of only 7.5 cm. From these results, it is easy to conclude that the initial guess is extremely important for dynamic optimization.


Adding arms to the model increased the jump height from 52.4 cm in the no arms test to 71.5 cm.  Below is a video showing a side by side comparison of the maximum jump without arms and the maximum jump with arms:

From this video we notice the model’s use of arm swing to increase its upward momentum. Based on these results, it is clear that proper arm kinematics play a major role in maximizing jump height. Just adding this one degree of freedom at the shoulder to the model (both arms acting symmetrically) lead to an increase of 19 cm in jump height.


Doubling maximum shortening velocity in the model’s muscles produced a maximum jump height of 69.6 cm. Doubling maximum isometric strength lead to a huge jump of 107.5 cm. Below is a video comparing the original model’s jump of 52.4 cm to the double speed and double strength models:

In this video, we see that the double speed model allowed the model to perform a deeper countermovement, increasing the jump by about 17 cm. On the other hand, the double strength model produced a jump of more than double the original. These results show that muscle strength is more important than muscle speed in maximizing jump height, assuming the muscle masses are the same in both instances.

Future Work

Beyond the scope of this four week class project, there is still plenty to be discovered about the dynamics of jumping. We believe the following are the next steps in continuing on this research:

  • This optimization can be applied to more complex models with more muscles and degrees of freedom. More complex control strategies can be employed to allow for more accuracy in the optimal excitations (this could validate bang-bang control in jumping).
  • Joint and muscle analysis can be performed on the results of these optimizations and can possibly lead to insights in performance enhancement and injury prevention strategies.
  • The results can be compared to experimental data such as:
    • Ground reaction forces from force plate analysis
    • Kinematics from motion capture
    • EMG data for muscle activations
  • The use of parallel computing in performing the optimizations (optimizations took between 15 and 36 hours)


Anderson, F.C. and Pandy, M.G. A dynamic optimization solution for vertical jumping in three dimensions. Computer Methods in Biomechanics and Biomedical Engineering 2:201–231, 1998.

Otis, J.C., Warren, R.F., Backus, S.I., Santer, T.J., and Mabrey, J.D. Torque production in the shoulder of the normal young adult male: The interaction of function, dominance, joint angle, and angular velocity. The American Journal of Sports Medicine 18(2):119–123, 1990.