University of Utah School of Computing
CS 5967/6967:
Character Animation
INSTRUCTOR:    Adam Bargteil (Office hours: By appointment, MEB 3458)
TIME: M/W 1:25-2:45
PLACE:     WEB 122

Assignment 1

For this assignment you will implement a simple inverse kinematics system. Your program should display a graphical representation of the arm and allow the user to select a point in space using the mouse. A set of joint positions that cause the end point of the arm to be placed as close as possible to the selevted point should then be computed and used to update the displayed configuration of the arm. This process should continue interactively, allowing the user to drag the selected point around on the screen as the arm tracks it. You will not be graded on the quality of your interface, however your program should not be inordinately confusing or difficult to use.

Your system should handle (single axis) rotational, (single axis) translational, and ball joints. Your video should demonstrate at least three different arms and all three joint types. At least one non-axis aligned rotation should be demonstrated as well as at least one joint with joint limits. You should implement at least one of the optional items below. You may work in pairs, in which case you should implement 2 of the options below.

Required: Coherence
By default, solutions should be computed using the current configuration as the starting point.

Required: Joint Limits
Each joint may have a limited range of motion. Your system should not compute configurations that violate joint limits.

Optional: Center of Mass If you assume that all segments have the same thickness and density, it is possible to determine the projection of the arm's center of mass onto the XY plane. If you implement this option, your program should allow the user to toggle a mode that tries to keep the arm centered over the world origin while still reaching the specified point.

Optional: Joint Weights Many systems may have multiple ways of reaching a goal, however it may be desireable to avoid using certain degrees of freedom unless absolutely needed. If you implement this option your program should allow the user to toggle a mode that attempts to minimize
\sum |axsPos - axsRest| x axsWeight
while still reaching the goal (and still staying centered if you implemented the center of mass option).

Optional: Iterpolation Add three buttons to your system's interface. The first two allow the user to select the current arm configuration as a begin or end key-configuration. The third will animate the arm as it moves from the begin to end configuration. Make sure the animation is not so fast that it cannot be viewed, and not so slow that nobody wants to view it. Interpolation for ball joints should use a "slerping" routine.

Optional: Global Searching The standard methods for solving IK problems can get stuck in local minima. This option requires augmenting your solution method so that when the system is trapped in a local minima it attempts to use a global search to find a better solution. Your global search method should terminate in a reasonable amount of time.

This assignment is based on one given by James O'Brien and Brian Barsky.