Puppeteer is a motion capture mapping tool that I created for my Ph.D. research at the research group Optimization in Robotics and Biomechanics at the Heidelberg University. It is used to map motion capture data onto rigid multibody models. It can directly load binary .c3d files that can be exported by virtually any motion capture system and exports animations as .csv files of the joint angles.
Puppeteer allows to adjust the rigid multibody model to that of the recorded motion capture subject and to assign virtual markers on the model. Puppeteer then uses inverse kinematics to transfer the motion onto the model. For this it uses the method described in the paper “Solvability-Unconcerned Inverse Kinematics by the Levenberg–Marquardt Method” by T. Sugihara, which minimizes the error between the recorded markers and the virtual markers using a robust nonlinear least-squares method. With this I achieve average fitting errors of around 1cm between virtual and measured markers.
Puppeteer uses Qt for the graphical user interface and my RBDL – the Rigid Body Dynamics Library to efficiently compute the Jacobians required for the IK solver. Also the c3d parsing is done using custom code.
At the moment I am playing around with adding a scripting API using Lua that I would like to use to create a .bvh export so that motions can be used in commercial animation tools.
Code is not publicly available at the moment, but if you are interested let me know!
(warning: crappy models)