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.
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."
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 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.)
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
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!
Back to Sam Buss's publications page.