overview
intro
data
model
optimization
simulation
hybrid_1
hybrid_2
conclusions

Optimization
Error Function
Go to
Matlab code for optimization

Go to
Function that returns error for given X vector (adapted from Sean Bailey's simulator)

We want to solve for the vector of system parameter X, that will result in simulated behavior of the model that is of the same type as that observed in the kinematic data.

In the Spacetime Constraints-derived framework of Popovic and Witkin (1999), the function to minimize would be the error between the kinematic motion and the motion resulting from a simulation of the system, given the system parameters X.

In this approach, however, I minimize a different error between two quantities:

  • Estimated forces applied to the kinematic motion. These are found by estimating the acceleration of the body (differentiating the motion data twice) and multiplying by the mass or inertia.
  • Resultant force due to the spring-damper legs, using the system parameters in X for the given body position, velocity and footholds in the kinematic data.

This error is squared and summed over each "pose" or capture-frame in the entire trajectory. The final value f that is minimized is a weighted sum of the errors in the X and Y directions and the Moment. For the results shown in this document, the weights used were [1 1 100] respectively.

Motivation for this approach lies in that we don't necessarily want to achieve the same motion as the kinematic data, but rather infer the same basic dynamic properties. Moreover, the kinematic data is not regular and may not represent a nominal locomotion cycle.

Although for each pose the solution for the vector X is under-determined, the problem becomes over-constrained when summing over all of the poses in the trajectory.

Optimization Results
The two results presented here are the results of the optimization for two different initial guesses for X. The first, termed lo_hipK contained estimated values for the stiffnesses, damping coefficients and nominal lengths loosely based on leg force data found in Kubow and Full (1999) and inferred from the kinematic data. The second, termed hi_hipK is identical to the previous except with higher hip stiffnesses.

lo_hipK
Figure 9
Optimization History for lo_hipK (click for movie, then step through it)

Figure 10
Nominal leg positions history for lo_hipK (click for movie, then step through it)

Figure 9 shows the history of the optimization after every 100 iterations.

Figure 10 shows the history of the nominal leg positions after every 100 iterations.

The initial discontinuities in the data are due to the legs lifting off and touching down.

However, as can be seen, after 100 iterations, new discontinuities are introduced. I believe this occurs when the error between the hip angles and the nominal hip angles exceeds 180degrees because this situation was not accounted for in the model.

This situation arises when the optimization procedure tries to increase the hip torques. In doing so, it increases the hip stiffness and the nominal hip angle, eventually reaching a point where the nominal hip angles are excessive.

However, as seen in the next section, even after 100 iterations, this solution results in dynamically-stable motion similar to the kinematic data.

hi_hipK
Figure 11
Optimization History for hi_hipK (click for movie, then step through it)

Figure 12
Nominal leg positions history for hi_hipK (click for movie, then step through it)

Figures 11 and 12 show the optimization history for this new initial guess after every 100 iterations. As can be seen, the resulting nominal position seem more reasonable.