Skip to content

QuickIK

QuickIK is a fast forward and inverse kinematics library. It provides high-level APIs for processing consecutive frames with warm starts and multi-threaded batch processing, as well as a low-level API for more specific use cases (e.g., real-time applications). QuickIK is written in Rust but comes with Python and C++ bindings.

Feature highlights

  • Whole-body kinematics: Traditionally, inverse kinematics solves for joint angles to match the position of only the end effector (e.g., foot). QuickIK finds the joint angles and base state that best match all tracked keypoints, possibly spread across multiple kinematic chains (e.g., limbs), in a single solve.
  • Favoring "natural" poses: QuickIK can be configured with a bias to favor more neutral joint angles when the problem is underconstrained.
  • Incomplete observation: QuickIK allows some keypoints to be missing on some of the frames and does its best using only the available ones.
  • From 2D keypoint positions: QuickIK can accept keypoint positions that are only in 2D projections. The problem is intrinsically underconstrained, but it can still work if the camera angle is reasonable and the pull toward "natural" states is properly tuned.
  • Differential weights: When not all keypoint positions are equally reliable in the upstream MoCap data, QuickIK can consider them with different weights.
  • Very fast: QuickIK can be >5 times faster than comparable alternatives.

Example

The following video shows QuickIK's solution to two inverse kinematics tasks used in the benchmarks:

  • Biomechanics: Behavior recording of a fruit fly retargeted to the NeuroMechFly model
  • Robotics: LAFAN1 walking kinematics retargeted to a Unitree G1 humanoid robot (greater mismatch expected due to larger difference between robotic and human bodies)

What QuickIK does not do

  • In some specific cases (typically robotic arms with fixed bases), inverse kinematics can be solved analytically. There are libraries that can solve these problems in constant time (given fixed body configuration), including Pinocchio and IKFast.
  • QuickIK does not solve inverse dynamics, the process of solving for forces and torques that need to be applied to achieve observed kinematics. For inverse dynamics, see libraries like Pinocchio and RBDL. In the author's own pipeline, imitation learning is used downstream of inverse kinematics instead of inverse dynamics.