The goal of this homework is to develop algorithms for animating the movement of articulated structures. An articulated structure is one that consists of joints and links. Joints can be revolute (rotating about an axis orthogonal to the connected link), rotary (rotating about the link axis), or prismatic (expanding and contracting along the link axis). Other types of joints can be created by combining 2 or more of these basic joints. Each articulated object contains one or more end effectors, which are the termination points for the chains of links and joints.
The state vector for an articulated structure is the list of angles for all the joints, and motion is specified as a start state, an end state, and the number of frames (or amount of time) to be used to go from start to end. The end state can be specified by the user (forward kinematics) or computed based on a goal state (inverse kinematics).
Forward kinematics requires the propogation of coordinate systems along the joints, using rotational and translational transformations to take the components of your object from their local coordinate system to the world coordinate system. This is the simpler approach, but it is less flexible and powerful than inverse kinematics. If you wish, you can use DH notation, which allows more flexibility in the configuration of your joints and links.
Inverse kinematics requires the computation of displacements in the joint angles to transform the end effector into a final goal state, e.g., touching a particular object. Usually this is performed a small step at a time, checking the distance from the current to the goal configuration and then computing the next step. It can be performed heuristically or analytically via the Jacobian.
Requirements:
The homework is due at 9am on Friday, February 18.
For this project you should do your implementation using OpenGL. You can extend your code from earlier projects or start from scratch.
You will submit a tar file containing all of the source code, a Makefile and a README file. The source code must compile (and run) on a CCC machine. Feel free to develop on any platform you like (OpenGL compiles and runs on Windows), just make sure things run on CCC before submitting. The program should compile when make is invoked on the command line in the directory with your code. Submissions which do not compile when make is typed, or do not run successfully, will not be graded and will be given 0 points.
The README file should contain an extensive description of what you are handing in, the layout of your code ( a discussion of the overall algorithm). This README file will count towards your grade. Submissions without a README or submissions with a worthless README will not be graded and given 0 points.
Submittal will be made using myWPI.
Each homework assignment is graded on a 10 point scale 8 points will be graded for functionality: the program does what the assignment requests. 1 point will be based on documentation in the README, and 1 point will be based on the quality of your design and coding style. Click here for details on the grading policy.
You will lose 10 percent per day for handing the assignment in late. The late penalty will increment at 9AM each day.
Since a grade of 0 will be given if the code does not compile and run, it is in your best interest not to submit anything until you have completely tested and evaluated what you have written.