This page describes the implementation of a paper of James F. O'Brien et. al. on Automatic Joint Parameter Estimation from Magnetic Motion Capture Data. It requires the sensors to be attached as rigidly as possible to the limbs, especially their orientation should not change too much.
It is based on the following idea: Two sensors i
and i+1
define two coordinate systems Ti
and Ti+1
. If they are rigidly attached to their bones, then the translation l
expressed in Ti
and the translation c
expressed in Ti+1
always result in the same point in space: The joint connecting their bones.
This gives three linear equations per joint and frame. Stacking all equations of one joint gives an overdetermined linear equation system, which can be solved using a singular value decomposition.
By trying this estimation on every possible pair of sensors and calculating the residual error, we can also estimate which sensors are likely connected by a joint. Using the residuals we can construct a tree which defines the structure of the “bones”.
We have it implemented in Matlab. For 4 sensors it takes about 25 seconds to infer the bone structure using 50000 frames.
Files:
The implementation of the calibration in Matlab/Octave
Reference:
James F. O'Brien, Robert E. Bodenheimer, Jr., Gabriel J. Brostow, Jessica K. Hodgins : Automatic Joint Parameter Estimation from Magnetic Motion Capture Data (2000)
Now there are some C++ tools to performs this calibration and save its results. There is also a tool to replay the data in an OpenGL window. It requires the Newmat matrix library which you may have to recompile from sources. You can download the mercurial repository with
hg clone http://toychest.in.tum.de/users/kresse/skeleton_calib/
A screenshot of the C++ graphical viewer: