Toolbox for Efficient Analytical Inverse Kinematics by Subproblem Decomposition.
Project description
EAIK: A Toolbox for Efficient Analytical Inverse Kinematics by Subproblem Decomposition
Authors: Daniel Ostermeier,
Jonathan Külz and Matthias Althoff
This toolbox is based on the following scientific publication:
D. Ostermeier, J. Külz and M. Althoff, "Automatic Geometric Decomposition for Analytical Inverse Kinematics," in IEEE Robotics and Automation Letters, vol. 10, no. 10, pp. 9964-9971, Oct. 2025
@ARTICLE{EAIK,
author={Ostermeier, Daniel and K{\"u}lz, Jonathan and Althoff, Matthias},
journal={IEEE Robotics and Automation Letters},
title={Automatic Geometric Decomposition for Analytical Inverse Kinematics},
year={2025},
volume={10},
number={10},
pages={9964-9971},
doi={10.1109/LRA.2025.3597897}
}
You may find our open-access publication here:
Please cite the above work when using this code within your own projects.
Also, please visit our website for additional informations.
Additional derivations that were used within this toolbox are contained in this PDF. Feel free to contact us if you have any questions or suggestions: Open up a GitHub issue.
Overview
With this toolbox, we propose a method for automatic inverse kinematic derivation. We exploit intersecting and parallel axes to remodel a manipulator's kinematic chain.
This allows for a hard-coded decomposition algorithm to solve its inverse kinematics by employing pre-solved subproblems. Our approach surpasses current analytical methods in terms of usability and derivation speed without compromising computation time or the completeness of the overall solution set.
The following figure illustrates a robot with a spherical wrist and the geometric representation of a subproblem we use to solve parts of its IK:
We adopt the solutions and overall canonical subproblem set from Elias et al.:
A. J. Elias and J. T. Wen, “IK-Geo: Unified robot inverse kinematics
using subproblem decomposition,” Mechanism and Machine Theory,
vol. 209, no. 105971, 2025.
Check out their publication and implementation.
Capabilities of this Toolbox
The current implementation supports automatic derivation of solutions for the following 6R and 5R manipulators, as well as their mirrored version (switched base and endeffector), and all non-redundant 1-4R manipulators. In addition, we allow the user to solve arbitrary nR manipulators that, by locking individual joints, corrspond to one of the below kinematic families.
We implement an user friendly interface for parametrizing a robot by a URDF file, DH parameters, or simply the homogeneous transformations that correspond to the joint axes placements.
The following figure shows an overview of our interface and a superficial showcase of our method:
If you require a vast amount of IK problems to be computed at once, we also implement a multithreaded batched version that allows you to make full use of your processor.
Installation
Dependencies and Installation
We use Eigen 3.4 for a fast implementation of the linear algebra operations within this toolbox. Make sure you have your Eigen headers placed in their standard directory ('/usr/include/eigen3', '/usr/local/include/eigen3') - otherwise the following step will not work for you.
We suggest using our pip-installable PyPI package. Simply use the following command on your Linux machine:
pip install EAIK
Usage Example
We currently provide support parametrizing a robot via DH parameters, homogeneous transformations of each joint in zero-pose with respect to the basis, as well as ROS URDF files. Some quick examples that demonstrate the usability of our implementation are shown in the following code-snippets:
DH Parameters
import numpy as np
from eaik.IK_DH import DhRobot
"""
Example DH parametrization + forward kinematics for a random robot kinematic
"""
d = np.array([0.67183, 0.13970, 0, 0.43180, 0, 0.0565])
alpha = np.array([-np.pi/2, 0, np.pi/2, -np.pi/2, np.pi/2, 0])
a = np.array([0,0.43180, -0.02032, 0,0,0])
bot = Robot(alpha, a, d)
print(bot.hasKnownDecomposition())
print(bot.fwdKin(np.array([1,1,1,1,1,1])))
Robot from a URDF file and IK on random poses
import numpy as np
import random
from eaik.IK_URDF import UrdfRobot
import evaluate_ik as eval
def urdf_example(path, batch_size):
"""
Loads spherical-wrist robot from urdf, calculates IK using subproblems and checks the solution for a certian batch size
"""
bot = UrdfRobot(path)
# Example desired pose
test_angles = []
for i in range(batch_size):
rand_angles = np.array([random.random(), random.random(), random.random(), random.random(), random.random(),random.random()])
rand_angles *= 2*np.pi
test_angles.append(rand_angles)
poses = []
for angles in test_angles:
poses.append(bot.fwdKin(angles))
for pose in poses:
ik_solutions = bot.IK(pose)
# Print forward kinematics for all solutions
for Q in ik_solutions.Q:
pose_fwd = bot.fwdKin(Q)
print(pose_fwd)
Even more examples for the python interface are available here.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
File details
Details for the file eaik-1.2.1.tar.gz.
File metadata
- Download URL: eaik-1.2.1.tar.gz
- Upload date:
- Size: 33.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.10.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a4d6146aa16fc51751458ae3eec46ddbd8e58bc7795e647a3aa4691ee3bcc7f8
|
|
| MD5 |
126e2fef513903d65825982fc3afdfa7
|
|
| BLAKE2b-256 |
abe0f13cc6f55e1db3cd9f02232a36ead5d785da1c43b6d9a5e7289cdf897d17
|