CMSC 491/691: Computer Animation

Assignment 3
Inverse Kinematics
Due May 11, 2016 at 1:00 AM

Required for 691 students, 50 points exrta credit for 491 students

Before you start

You will be doing your work this semester in a class git repository. Before you get started on any of the assignments, you should fetch yourself a copy of your personal repository following these directions. Your personal class respoitory on the UMBC GL/Linux systems is /afs/umbc.edu/users/a/d/adamb/pub/491/your-user-name.git

The Assignment

For this assignment, you must write a C or C++ program that will read a modified bvh file that contains a skeleton composed of a single kinematic chain (every joint has a single child). After the definition of the skeleton, instead of frames, there will be six floating point numbers. The first three give the position of the root of the hierarchy. The second three give the goal position of the end effector. Your program should output the degrees of freedom for the kinematic chain that places the end effector at the goal position. Your program should output a line for each iteration of the optimization. You can then hand edit the output file to include the skeleton and run your forward kinematics program to create an animation of the optimization.

You can run my program here:

~adamb/public/ForwardKinematics/inverseKinematics ik.in ik.out

More details

I started from my forward kinematics program (which I will post next week). I enhanced my recursive routine to return the current position and, after the recursive call, fill in the entries in the Jacobian. My main function does a little bit of setup (e.g. setting the root position) and then has a do/while loop that continually calls the recursive function that performs forward kinematics to compute the current position of the end effector and fills in the entries of the Jacobian. I then use the jacobian and the (goal - end_effector) vector to update the joint angles. I used the gradient descent solution method (Jacobian transpose) to avoid having to set up an SVD solver on the gl cluster.

Extra Credit

none.

What to turn in

Turn in this assignment electronically by pushing your source code to your class git repository by 1:00 AM on the day of the deadline. Do your development in the proj1 directory so we can find it. Be sure the Makefile will build your project when we run 'make' (or edit it so it will). Also include a README.txt file telling us about your assignment. Do not forget to tell us what (if any) help did you receive from books, web sites or people other than the instructor and TA.

Check in along the way with useful checkin messages. We will be looking at your development process, so a complete and perfectly working ray tracer submitted in a single checkin one minute before the deadline will NOT get full credit. Do be sure to check in all of your source code, Makefile, README, and updated .gitignore file, but no build files, log files, generated images, zip files, libraries, or other non-code content.

To make sure you have the submission process working, you must do at least one commit and push by the friday before the deadline.