Table of Contents

Recovering the skeleton from magnetic motion tracking data

Sensor placement on the arm

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.

Algorithm

The mathematical idea behind this calibration

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”.

Implementation

 Calibration result: the small coordinate systems are the sensors, the black lines are the inferred bones and the space between them is the residual error

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

Our first test data

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)

C++ tools

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:

FLTK-based viewer for the motion data