Blazing fast, analytical inverse kinematics for Franka Panda and FR3 robots. Lightweight Python bindings, no ROS required.
frankik is a standalone Python package that implements the analytical geometric IK solver proposed by He & Liu (2021).
It is designed for researchers and developers who need high-performance kinematics without the overhead of ROS, MoveIt, or hardware drivers.
Existing libraries often rely on slow, generic numerical solvers, demand complex ecosystem installations, or are limited to the older Panda robot.
frankik is specialized for the Franka robot (supports both Panda and FR3) and easy to install via pip.
Its IK solver is almost twice as fast as the fastest alternative Python library; see Benchmarks.
import numpy as np
from frankik import FrankaKinematics, RobotType
kinematics = FrankaKinematics(robot_type=RobotType.FR3) # RobotType.PANDA also supported
q_home = np.array([0.0, -np.pi / 4, 0.0, -3 * np.pi / 4, 0.0, np.pi / 2, np.pi / 4])
pose_home = kinematics.forward(q_home, tcp_offset=kinematics.FrankaHandTCPOffset)
q = kinematics.inverse(pose_home, tcp_offset=kinematics.FrankaHandTCPOffset, q0=q_home)
assert np.allclose(q, q_home)
print(q)pip install frankikgit clone https://github.com/juelg/frankik.git
cd frankik
pip install -v .pip install -ve '.[dev]'# python code formatting
make pyformat
# python code linting
make pylint
# cpp code linting
make cpplint
# automatic stubfile generation (for changes in bindings)
make stubgenSee the benchmarks folder. The outcome is based on 1000 seeded random trials (except IKPy, which uses 100 trials).
===============================================================================================
Library | Init (s) | FK-Small(s) | IK-Small(s) | FK-Large(s) | IK-Large(s)
-----------------------------------------------------------------------------------------------
FrankIK | 0.00000 | 0.0000026 | 0.0000065 | 0.0000027 | 0.0000065
RoboticstoolboxPython | 0.81719 | 0.0000145 | 0.0000089 | 0.0000131 | 0.0000107
FastIK | 0.00000 | 0.0000097 | 0.0000114 | 0.0000092 | 0.0000114
PinocchioCPP | 0.00205 | 0.0000040 | 0.0001352 | 0.0000039 | 0.0001597
RoboticsLibrary | 0.00127 | 0.0000050 | 0.0001733 | 0.0000048 | 0.0001957
ManipulaPy | 0.02817 | 0.0002529 | 0.0024451 | 0.0002555 | 0.0025822
GenesisWorld | 5.12017 | 0.0017409 | 0.0043826 | 0.0017325 | 0.0019170
IKPy | 0.07299 | 0.0000734 | 0.0671459 | 0.0000723 | 0.0620768
===============================================================================================The analytical geometric IK solver used in frankik is based on the work of He & Liu (2021).
The C++ implementation is inspired by Elsner (2023).
Consider citing both works if you use frankik in your scientific projects.