When posing a figure for animation, positioning a skeleton from motion-capture marker points, or planning a robot's motions, we often wish to infer a skeleton's angles given constraints on its overall position. For example, an animator might like to click and drag a figure's hand to a new position while keeping its feet fixed. This is known as the inverse kinematics problem, since it involves finding angle values that satisfy pose constraints.
One of the challenges of inverse kinematics is that the problem is typically underconstrained: there may be many different solutions for a given set of constraints. To choose among these, we use a heuristic preference that assigns lower scores to ``better'' poses. A better pose may be one that is less awkward, requires less energy to assume, or exhibit other useful qualities.
We represent a figure's angles as the vector
. Our constraint function
is zero when all
constraints are satisfied. Our heuristic preference function
scores
each state, with lower values being better. Therefore, the inverse kinematics
problem consists of finding
that minimizes
, given
.
In this project, we used soft constraints, in which the constraint function
is folded into the heuristic preference function. This allows constraints to
be violated in order to solve overspecified scenarios, and also makes our
problem statement simpler. An alternative we did not examine is to use hard constraints, but this approach requires optimization using Lagrange
multipliers and may work poorly near singularities. Our inverse kinematics
problem can thus be restated as simply finding that minimizes
.
In the following sections, we explain how we defined our constraints and
preference, how we optimized , our results, and future work.