/bone-solve-ik

Fitting kinematic parameters to best align with set of noisy anchor points in Python.

Primary LanguagePythonMIT LicenseMIT

bone-solve-ik

This work solves the problem of finding optimal parameters (joint angles) of a given kinematic to best align with set of noisy anchor points. This problem arises, for example, when trying to fit a human kinematic model to a set of 3D human joint positions - a common output of many 3D human pose approaches. Furthermore, these predictions are noisy, causing bone lengths to vary over time, rendering heuristic approaches to kinematic alignment sub-optimal.

This library frames the alignment problem as an optimization task, which minimizes the geometric distance between kinematic joint locations and corresponding anchor points. In this respect, the task is similar to inverse kinematics (IK) in robotics, but not quite. The main differences are

  1. In IK, the kinematic parameters are usually solved so that the end effector matches a certain target position. Hence, the solutions in IK are generally not unique - more than one configuration may place the end-effector in the target pose. In contrast, bone-solve-ik considers target poses for intermediate joints as well. These anchor points constrain the subjective function more than vanilla IK does.
  2. IK is concerned with finding a target pose that consists of location and orientation information. In contrast, bone-solve-ik only considers target location information.