Journal article:
Samuel R. Buss and Jin-Su Kim.
"Selectively Damped Least Squares for
Inverse Kinematics."
In Journal of Graphics Tools, vol. 10, no. 3 (2005) 37-49.
Download article: postscript or PDF.
Abstract:
We introduce two methods for the
inverse kinematics of
multibodies with multiple end effectors.
The first method clamps the distance of the target positions.
Experiments show this is effective in
reducing oscillation when target positions are unreachable.
The second method is an extension of damped least squares called
selectively damped least squares (SDLS) which adjusts the damping factor
separately for each singular vector of the Jacobian
singular value decomposition
based on the difficulty of reaching the target positions.
SDLS has advantages in converging in fewer iterations and in not
requiring ad hoc damping constants.
See below for downloadable software.
Survey article (unpublished):
Samuel R. Buss.
"Introduction to Inverse Kinematics with
Jacobian Transpose, Pseudoinverse and Damped Least Squares methods."
Unpublished survey.
Download unpublished article: postscript or PDF.
Abstract: This is a introduction to the Jacobian transpose method, the pseudoinverse method, and the damped least squares methods for inverse kinematics (IK). The mathematical foundations of these methods are presented, with an analysis based on the singular value decomposition.
My thanks to Giovanni Saponaro for pointing out some typos in an earlier posted version.
Movies
Movies showing the double-Y shape are available in two formats. Only one update is performed in each time step, so the end effectors do not exactly track the target positions. (File sizes are 1.7MB to 3.0MB.)
Software
The
source code is available in two formats: PC format
in .zip file
and Unix format in a gzipped tar file. You will
need to have OpenGL, GLUT and GLUI header files and libraries to compile and run
these. The programs run very fast on my home machine in Visual C++.NET and
very slow on my office computer with Visual C++.6.0 (don't ask me why!), so your
mileage may vary. Bug reports appreciated, but the software is not being
supported.
Update as of 12/2014: As recently
reported by Vikram Saran who implemented the code in
Visual Studio 2013, the code
works only with GLUI version 2.35, not 2.36, and it is necessary
to add GLUT_BUILDING_LIB to the preprocessor definitions. My thanks
for Vikram for reporting this!