IKFlow: Generating Diverse Inverse Kinematics Solutions

TL;DR IKFlow trains a conditional normalizing flow per robot that samples many different inverse-kinematics solutions for a goal pose at once, instead of the single answer a numerical solver gives. It returns 500 solutions in 5 ms, with average errors of 0.36-7.72 mm across ten kinematic chains.
What they do
An arm with 7 or more joints can reach most poses in infinitely many ways. Analytical solvers such as IKFast return every solution but only work up to 6 DOF. Numerical solvers return one solution per call, so finding many takes repeated random restarts. IKFlow treats the solution set for a goal pose as a distribution and learns to sample from it with a conditional normalizing flow, trained once per robot.
How it works
- Data. Joint configurations sampled uniformly within the joint limits are passed through forward kinematics. The resulting pose is the condition and the joints are the target, with 2.5 million points per robot.
- Network. Affine coupling layers alternate with permutation layers. The goal pose is fed into every coefficient network, and training uses maximum likelihood.
- Lower-dimensional solution sets. Some poses can only be reached with a joint fixed, for example at its limit, and this made training diverge. Full-dimensional noise is added to the training data and its scale is passed as a condition, then set to zero at test time.
- Latent scaling. Base samples are scaled by 0.25 at test time to avoid the tails. This cuts position error by about 30% but raises MMD by about 150%.
Results
- On ten kinematic chains from six robots (4-10 DOF), average error is 0.36-7.72 mm and 0.15-2.81 degrees. 100 solutions take 4.3-8.6 ms.
- 500 solutions take 5 ms and 4,000 take 20 ms. TRAC-IK with random seeds needs over a second for 1,000. Seeding TRAC-IK with IKFlow makes it about 5x faster, and this pays off from 7 requested solutions upward.
- MMD against TRAC-IK samples is 0.037 or lower for nine of the ten chains. PR2 is the exception at 0.21.
- It reaches clearly lower position error than an INN and an MDN on railY_chain3 and on the Panda.
Limitations
The number of training batches needed to reach 1 cm error grows exponentially with the sum of the joint-limit ranges. Each robot needs its own model. The training data ignores self-collisions. Solutions are approximate, so precise tasks need numerical refinement, and the latent scale trades accuracy against diversity.
Videos
Figures




Abstract
Inverse kinematics - finding joint poses that reach a given Cartesian-space end-effector pose - is a common operation in robotics, since goals and waypoints are typically defined in Cartesian space, but robots must be controlled in joint space. However, existing inverse kinematics solvers return a single solution pose, where systems with more than 6 degrees of freedom support infinitely many such solutions, which can be useful in the presence of constraints, pose preferences, or obstacles. We introduce a method that uses a deep neural network to learn to generate a diverse set of samples from the solution space of such kinematic chains. The resulting samples can be generated quickly (2000 solutions in under 10ms) and accurately (to within 10 millimeters and 2 degrees of an exact solution) and can be rapidly refined by classical methods if necessary.
Summaries are written automatically from each paper's text. Figures and videos come from the paper and its project page; all credit goes to the authors.
