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 articulated object may be your animal or an object or actor that is separate from your animal (e.g., a person viewing the animal's movement).
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 midnight on Tuesday, April 19.
For this project you can extend your code from earlier projects or start from scratch.
You will submit a zip or 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 just make sure things run on a CCC machine before submitting. Submissions that do not compile or 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). It should also include instructions on compiling and running your program. This README file will count towards your grade.
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. This homework is worth 20% of your homework grade.
You will lose 10 percent per day for handing the assignment in late. The late penalty will increment at noon 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.