Skip to main content

How It Works

Each joint in an OpenSim model has twelve parameters that describe the interaction between the parent and child bodies. Each parent and child is defined by three (X,Y,Z) translational and three (X,Y,Z) rotational terms. These parameters are modified using a nonlinear least-squares approach with the only cost term being the sum of the marker distance errors between modeled and experimental markers throughout the provided motion.

As an example, a subject may have a significant knee adduction angle such that their lower leg sits closer to the midline from the frontal view. A generic scaled Rajagopal-type model will likely produce significant marker errors for the lower leg markers.

JMP simply iterates through each frame of a motion, runs inverse kinematics on that frame, and adds the marker distance for that frame to an overall cost value. It then modifies the joint parameter that dictates the knee adduction angle and calculates the cost again until a minimal cost is found.

Process Summary

The Joint Model Personalization Tool does the following:

  • Parses JMP XML settings file
  • Locates all joint parameters, body scaling, and marker motion to be optimized during the run
  • Finds the markers attached to each body adjacent to the joints/bodies of interest and removes all other markers
  • Uses MATLAB's lsqnonlin() to find the set of design variables that minimizes the total distance error between experimental and virtual markers.
  • Upon convergence, the final model is produced and printed to the output file name provided in the XML settings file.