CSE 557  Spring 2000 Final Project Report

Inverse Kinematics

Karim Filali and Dmitriy Portnov
 

1.  General Description of the Problem.

 In this project we implemented inverse kinematics for character modeling. Given constraints for a few end-effectors on the character's body the algorithm constructs the character's joint angles which would try to satisfy the end-effector constraints while ensuring that the character looks "natural".

2.  Relevant Paper References.

[1] CSE 557 Lecture Notes 02/29 (Inverse Kinematics)
[2] Chris Welman, Inverse Kinematics and Geometric Constraints for Articulated Figure Animation, MS Thesis
[3] L.C.T. Wang and C.C. Chen.  A combined optimization method for solving the inverse kinematics problem of mechanical manipulators.  IEEE Transactions on Robotics and Automation, August 1991

3.  How is this approach different from existing work.

We implemented the Cyclic-Coordinate Descent (CCD) method described in [2] and [3].  CCD method is an iterative heuristic search technique which attempts to minimize position and orientation errors by varying one joint variable at a time.  One of the shortcomings of CCD described in [2] and [3] is that it only supports geometric constraints.
In this project we extended the CCD method to also support a non geometric constraint, namely the center of mass (or balance) constraint.  Our algorithm first satisfies the end-effector constraints.  Then it adjusts the positions of unconstrained end-effectors (by changing the appropriate joint angles) to restore the character's balance.

4.  Detailed Description.

We have used a human like hierarchical model that is fixed at the pelvis but with all other joints having normal degrees of freedom. End-effectors can be selected and moved to their desired positions by using the left mouse button for moving inside the XY plane and the right mouse button to move inside the XZ plane. The end-effectors can also be constrained to stay in place, something that's achieved by double-clicking on them.
First our method tries to satisfy all constrained end-effectors.  This is done by recursively traversing the model hierarchy from the leaves towards the root and attempting the constraints.  As explained in [2], each joint first instructs its children to satisfy its constraints.  After all the children have found their optimal positions/rotation angles, the parent joint tries to find a rotation angle that minimizes the sum of positional errors for all its children.
After all the constrained end-effectors have been positioned, our algorithm tries to restore the object's balance by moving the remaining joints.  This algorithm is similar to CCD in that it also recursively traverses the hierarchy from (unconstrained) leaves towards the root trying to meet the target Center of Mass. For each joint, we're computing where the center of mass of the sub tree rooted at that joint should be such that the overall center of mass of the skeleton is equal to the target center of mass. This is the desired position for the center of mass of the tree rooted at the current joint, PdThe current CM position of the current sub tree, Pc, can also be easily calculated given the positions for all the joints and weights for all the links.  Once we know the values for current and desired positions, we use CCD method to find the rotation angle.
Determining the "desired" position for the overall center of mass is one of the issues that still needs further work.  Since CCD doesn't allow for translational movement of the root of the tree, our current implementation uses that point (which is currently set to torso) as the desired location of the center of mass.

  1. Results.

Using our Inverse Kinematics system we can relatively easily produce animation frames by specifying the goal positions of some end-effectors and constraining others to their current position. This works well with the conservation of equilibrium constraint because we can predict for example that the model, if made to bend forward while its left leg is constrained to stay on the floor, will pull his right leg to keep his balance. The stiffness of the joints of each joint is proportional to the weight of the body part connecting to it, ensuring that smaller body parts move earlier and farther than the larger ones. In general this behavior is realistic enough because it excludes exaggerated movement especially that of the torso.

There are still problems with some positions of the model, positions which although consistent with the range of movement of the limbs, do not look very natural. Another problem is the tendency of the model to bring its limbs towards its center of mass. That is due to the approximate calculation of the center of mass because CCD does not allow for arbitrary constraints.

 

 

 

Linux executable: animator and a required library libmodeler.so that should be in the same directory.

The model's library: libskeleton1.so and an alternative library which is faster but does not support the equilibrium conservation: libskeleton2.so

(the environment variable LD_LIBRARY_PATH must be set to . )