Go to start of banner

# How RRA Works

The topics covered in this section include:

# Overview

Residual reduction is a form of forward dynamics simulation that uses a tracking controller to follow model kinematics determined from the inverse kinematics. Computed muscle control (CMC) serves as the controller, but without muscles the skeleton of the model can be used to determine a mass distribution and joint kinematics that are more consistent with ground reaction forces.

Residual reduction is primarily intended for gait, i.e., movements like walking and running where the model is displaced relative to the ground while subject to ground reaction forces and torques. In this chapter, we describe an example gait model (gait2354_simbody.osim) consisting of ten rigid segments (bones) where 17 of the 23 generalized coordinates (degrees of freedom) of the model represent angles for the joints connecting the rigid segments together. Each of these 17 degrees of freedom is actuated by a single torque actuator.

The remaining 6 generalized coordinates represent the 6 degrees of freedom (3 translational, 3 rotational) between the model's pelvis and the ground. To simulate walking, we need some way of representing how the model propels itself forward relative to the ground. One way would be to use a foot-ground contact mechanism.

Instead, we present a simpler solution: represent the 6 degrees of freedom between the pelvis and the ground as a 6-degree-of-freedom joint between the pelvis and the ground, and actuate each degree of freedom with its own torque actuator. Each of these 6 actuators is called a residual actuator. Now our model has 23 degrees of freedom and 23 actuators, i.e., exactly one actuator per degree of freedom. The three residuals that actuate the 3 translational degrees of freedom between the pelvis and the ground are the residual forces, whose values we denote by $//$, $//$, and $//$. The 3 rotational degrees of freedom are actuated by the residual torques (or moments), whose values we denote by $//$, $//$, and $//$. $//$ is the force applied along the X (forward) axis, $//$ is the force applied along the Y (vertical) axis, $//$ is the torque applied about the X (forward axis), and so on.

Typically, modeling assumptions (e.g., having a model with no arms), noise, and other errors from motion capture data lead to dynamic inconsistency; essentially, the ground reaction forces and acceleration estimated from measured marker kinematics for a subject do not satisfy Newton's Second Law,

Roughly speaking, the 6 residuals amount to adding a new force to the equation that accounts for inconsistency:

# Residual Reduction Algorithm (RRA)

## Tracking Simulation

RRA begins by placing the model in the starting configuration, i.e., by setting the values of the model's generalized coordinates to the values computed by the inverse kinematics (IK) tool for the user-specified initial time (specified in the setup file as the <initial_time> property). Repeatedly, RRA takes small steps forward in time (with each time step of .001) until the user-specified final time (specified under the <final_time> property of the setup file) is reached. In each step, force values are computed for all of the model's actuators to make the model move from its current configuration to the configuration (generalized coordinates) desired at the end of the step, which is computed from the IK output. The actuator forces are computed by choosing force and torque values that minimize an objective function (see Settings Files and XML Tag Definitions on Optimization Parameters).

At the end of the simulation, the average value for each residual actuator is computed. The average values for $//$ (the left-right residual torque) and $//$ (the fore-aft residual torque) are used to adjust the torso mass center to correct excessive "leaning" of the model due to inaccuracies in the mass distribution and geometry of the torso in the model. A new model file containing the adjusted torso mass center (specified in the setup file under the <output_model_file> property) is created.

The average value of $//$ is used to compute the recommended mass changes for all of the body segments. The desired mass change is:

where g = -9.80665 m/s2. This mass change is then divided up proportionally among the body segments. The computed mass changes are recommended to the user, who can make these changes in the OpenSim model file by hand. The recommended mass changes are NOT applied to the model automatically.