The topics covered in this section include:
JointReaction is an OpenSim Analysis for calculating resultant forces and moments at joint. Specifically, it calculates the joint forces and moments transferred between consecutive bodies as a result of all loads acting on the model. These forces and moments correspond to the internal loads carried by the joint structure. These loads represent the contributions of all un-modeled joint structures that would produce the desired joint kinematics, such as cartilage contact and any omitted ligaments. The reaction load acts at the joint center (mobilizer frame) of both the parent and child bodies. The loads can be reported and expressed in either the child, parent, or ground frames. The default behavior is to express the force on the child in the ground frame. For more detailed description of the method implementation see Tibiofemoral Contact Force during Crouch Gait (Steele et al, in review).
In this section, we provide a conceptual review of the inputs and outputs for a JointReaction Analysis along with a set of troubleshooting tips and best practices. Running an Analysis like JointReaction is covered in detail in the How to Use the Analysis Tool section.
Inputs Specific to JointReaction:
- joint_names: List of the names of the joints of interest. JointReaction reports loads for only listed joints that exist in the model. Joint names may be repeated any number of times to allow reporting on different bodies or with respect to different reference frames. Using the keyword 'all' reports the loads for all joints in the model. Default is 'all'.
- apply_on_bodies: List of the body (parent or child) on which the corresponding reaction occurred. If the array has only one entry, that selection is applied to all joints specified in joint_names. The default is 'child'.
- express_in_frame: List of the frames (ground, parent, or child) in which the corresponding reaction is expressed. If the array has only one entry, that selection is applied to all joints specified in joint_names.
- forces_file: The name of a file containing forces storage. If a file name is provided, the applied forces for all actuators will be constructed from the forces_file instead of from the states. This option should be used to calculate joint loads from static optimization results.
JointReaction prints results to one storage file with the suffix "_ReactionLoads.sto". This file contains rows of time-stamped data containing the 3 force and 3 moment vector components of the reaction load at each joint specified. Each data column label includes all information about how the load is applied and expressed. Specifically, the form is
< joint name >on<body>in<frame>_<component>.
For example, the column containing the z-component of hip force occurring on the femur and expressed in the femur frame would be labeled "hip_on_femur_in_femur_FZ" while the y-component of the knee moment occurring on the tibia and expressed in the ground frame would have the label "knee_on_tibia_in_ground_MY".
Best Practices and Troubleshooting Tips
Joint Reactions vs Inverse Dynamics
Users should be aware of the differences between Inverse Dynamics calculations and Joint Reaction calculations:
- Inverse Dynamics calculates the net generalized forces at all degrees of freedom in the model. These generalized forces only account for the model motion and applied external forces. Inverse Dynamics ignores the contribution of muscles, motors, and all other actuators when calculating new generalized forces at each joint.
- The JointReaction analysis calculates the resultant forces and moments the joint structure caries in response to all motions and forces in the model, including muscles, motors, and all other actuators.
To illustrate the difference, let's consider the hip joint, which is modeled as a ball and socket and actuated by muscles. This joint allows three rotations, but prohibits translations.
- Inverse Dynamics will report the net torques (generalized forces for the hip) that the muscles must overcome.
- JointReaction will report the vector of compressive forces that the hip caries to prevent translation of the ball through the socket. JointReaction will report zero for all hip torques because the ball and socket can not produce torques or resist rotation. The only exception would occur if Coordinate Limit Forces or Coordinate Actuators were applied at the hip. These are interpreted as part of the joint structure that act along the generalized coordinate direction, and JointReaction will include their contribution as part of the resultant joint load.