Assignment 2: Inverse Kinematics
Due Date: Feb 15

Overview:

Your assignment is to implement two ways of doing inverse kinematics for an articulated character and create a demonstration that clearly shows the differences between the two techniques.

Requirements:

• Implement these two IK methods:

• Cyclic-Coordinate Descent. See these articles "Oh My God, I Inverted Kine!" and "Making Kine More Flexible" for an explanation of this method.
• Compute the pseudoinverse of the Jacobian, and use this to compute the joint angles needed to pose the character's arm. See Rick Parent's "Computer Animation" book, Section 4.2.4, for details about this method.
• Prepare a project report describing what you did and showing results that demonstrate differences between the two techniques (e.g. plots of the hand position over time as it moves to the same IK target using each of the two techniques).
• Create an animation using your IK techniques.
• Prepare a 5min presentation to discuss your project and show your results in class.

Hand in :

• Your code and documentation of how to run it.

Source Code:
Once again, you may use any implementation you like. If you choose to work with the ASF/AMC file format and the data in the motion capture database, the following figure shows the skeleton hierarchy. For example, you could choose to use IK to move the hand from one place to another, moving only the wrist, elbow, and shoulder joints.

For this project, you will need to find some way of inverting a matrix. There are various sources of code online, both for matrix inversion and SVD, which can be used for safe matrix inversion as discussed in class. If you are using C++, you may make use of the safe matrix inversion code in this directory: /afs/cs.cmu.edu/academic/class/15464-s07/asst2/
Note that you will need all of the files in this directory in order to compile and use the matrix class.

Extra Credit:

Here are some ideas for extra credit.
• Different weights for different joints: You can weigh the joints differently so certain ones can be preferred over others. Discuss how to achieve desired poses this way.
• Multiple targets at once: For example, you can match both the end of the rfingers bone to a target point, and the end of the rhand bone to another target point.
• Interactive interface: Create a click-and-drag environment so the user can drag the target points. The character's pose updates continuously to match the targets.
• Optimization: Compute an optimal pose. For example, you can minimize the sum of the squared change in joint angle (compared to starting pose).
• Anything else that makes posing the character more intuitive!