Andreas Aristidou, Joan Lasenby
Graphical Models, 73(5): 243-260, 2011
A novel heuristic method, called Forward And Backward Reaching Inverse Kinematics (FABRIK), is described that avoids the use of rotational angles or matrices, and instead finds each joint position via locating a point on a line. Thus, it converges in few iterations, has low computational cost and produces visually realistic poses. Constraints can easily be incorporated within FABRIK and multiple chains with multiple end effectors are also supported.
Inverse Kinematics is defined as the problem of determining a set of appropriate joint configurations for which the end effectors move to desired positions as smoothly, rapidly, and as accurately as possible. However, many of the currently available methods suffer from high computational cost and production of unrealistic poses. In this work, a novel heuristic method, called Forward And Backward Reaching Inverse Kinematics (FABRIK), is described and compared with some of the most popular existing methods regarding reliability, computational cost and conversion criteria. FABRIK avoids the use of rotational angles or matrices, and instead finds each joint position via locating a point on a line. Thus, it converges in fewer iterations, has low computational cost and produces visually realistic poses. Constraints can easily be incorporated within FABRIK and multiple chains with multiple end effectors are also easily supported.
FABRIK has been integrated in several game engines, including the Unreal Engine, Unity3D, and Panda. There are numerous videos available online explaining how to integrate FABRIK in different problems.
Andreas Aristidou, Yiorgos Chrysanthou, Joan Lasenby
Comp. Animation & Virtual Worlds, 27(1): 35-57, 2016.
This paper addresses the problem of manipulating articulated figures in an interactive and intuitive fashion for the design and control of their posture using the FABRIK algorithm; the algorithm has been extended to support a variation of different joints and has been evaluated on a humanoid model.
We adjust FABRIK so as to be used in problems with leaf joints, closed-loop chains, to control a fixed inter-joint distance in a kinetic chain with unsteady data, as well as providing optimisation solutions when the target is unreachable. In addition, we present various techniques for constraining anthropometric and robotic joint models using FABRIK, and we provide clarifications and solutions to many questions raised since the first publication of FABRIK. Finally, a human-like model that has been structured hierarchically and sequentially using FABRIK is presented, utilising most of the joint models suggested in this paper; it can efficiently trace targets in real-time, without oscillations or discontinuities, verifying the effectiveness of FABRIK.
This thread in ROBLOX wiki explains step by step how to implement FABRIK with constraints (code provided). The video below shows an online tutorial.
FABRIK algorithm has been implemented within the Kine application ; Kine is a 2D real-time gaming application that initially has a kinematic chain with six joints. Kine allows you to interact with the IK solver; you click on the screen and the snake (the kinematic chain is drawn as a snake) moves to solve the IK problem. There is also an option where you click and drag on the screen and the snake tracks your mouse.
Kine has been adapted from the work of Jeff Lander. More information about Kine can be founded at Jeff Lander's website. We would like to express our enormous thanks to Jeff for giving us permission to use his code and application.
You can download and interact with the Kine IK solver here (.rar file). Use the "OPTION" tab to switch from FABRIK to CCD IK solver.
The FABRIK algorithm has been also implemented as a plug-in within the Final IK collection by Pärtel Lang; the documentation for the constrained version FABRIK can be accessed here, and for the case of multiple chains here. You can access the asset store, in order to purchase the Final IK script for Unity3D, here.
FABRIK has been implemented in several languages and stored in open source libraries, such as gitlab. For instance, CALIKO is an open source library that implements FABRIK in Java, and FULLIK is a conversion from java to Caliko 3D libs. Here, you can Lunch a Demo of FULLIK.
Moreover, you can watch a FABRIK Inverse Kinematics implementation in 3D with Joint Constraints.
© 2017 Andreas Aristidou