This code resembles the implementation of the EAIK Python toolbox. Please visit our Website for further informations.
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.
Geometrical correspondences of the first two subproblems on the example of a simple planar manipulatorWe 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” arXiv:2211.05737, 2024
Please check out their publication and implementation.
The current implementation supports solutions for the following 6R and 3R manipulators:
While we are able to solve all 6R manipulators that contain a spherical wrist and any 3R manipulators, some kinematic variances of manipulators with 3-Parallel axes are not supported yet. Solutions for these manipulators - alongside 7R manipulators - will be part of a future revision of the EAIK software.We use Eigen for a fast implementation of the linear algebra operations within this toolbox.
We suggest using the pip-installable PyPi package, which implements an user friendly interface for URDF and .csv robot representations (see src/eaik/examples).
If you want to directly use the C++ functionality and skip the Python wrapper, feel free to use the EAIK::Robot() class of the C++ library in CPP/src. Make sure to clone the external dependencies of this library using:
$ git clone --recurse-submodules git@github.com:OstermD/EAIK.git
Then build the EAIK C++ library by using:
$ mkdir EAIK/CPP/src/build && cd EAIK/CPP/src/build
$ cmake ..
$ make
You can build and install the python package implemented by this exact revision of the EAIK repository by using:
pip install .
The EAIK::Robot() class receives two parameters: H and P.
H represents an Eigen MatrixXd with the columns corresponding to the unit vectors of each joint with respect to a global basis frame.
P represents an Eigen MatrixXd with the columns corresponding to the link-offsets. P.col(i) therefore represents the offset between joint i and i+1 with the same orientation as the global basis frame. This convention is consistent with that of Elias et al. We suggest to take a look at the usage within the C++ tests in CPP/Tests/IK_system_tests.cpp to get a better understanding on how to use the C++ library in your project.
Feel free to open up a GitHub issue or a pullrequest if you have any suggestions or questions. This project is still in development.