C++ implementation with Python bindings of analytic forward and inverse kinematics for the Universal Robots.
Project description
UR Analytic IK
C++ implementation with Python bindings of analytic forward and inverse kinematics for the Universal Robots based on Alternative Inverse Kinematic Solution of the UR5 Robotic Arm.
This project is still very experimental, the API will likely still change.
Installation
Don't forget to activate your venv or conda environment.
Clone this repository, then
cd ur-analytic-ik
pip install .
Usage
Afterwards, you should be able to issue the FK and IK functions like this:
import numpy as np
from ur_analytic_ik import ur5e
eef_pose = np.identity(4)
X = np.array([-1.0, 0.0, 0.0])
Y = np.array([0.0, 1.0, 0.0])
Z = np.array([0.0, 0.0, -1.0])
top_down_orientation = np.column_stack([X, Y, Z])
translation = np.array([-0.2, -0.2, 0.2])
eef_pose[:3, :3] = top_down_orientation
eef_pose[:3, 3] = translation
solutions = ur5e.inverse_kinematics(eef_pose)
More examples:
import numpy as np
from ur_analytic_ik import ur3e
joints = np.zeros(6)
eef_pose = np.identity(4)
eef_pose[2, 3] = 0.4
tcp_transform = np.identity(4)
tcp_transform[2, 3] = 0.1
ur3e.forward_kinematics(0, 0, 0, 0, 0, 0)
ur3e.forward_kinematics(*joints)
tcp_pose = ur3e.forward_kinematics_with_tcp(*joints, tcp_transform)
joint_solutions = ur3e.inverse_kinematics(eef_pose)
joint_solutions = ur3e.inverse_kinematics_closest(eef_pose, *joints)
joint_solutions = ur3e.inverse_kinematics_with_tcp(eef_pose, tcp_transform)
Testing
In the root directory of this repo, to run the tests:
pytest -v
Development
Some linux users have eigen installed at /usr/include/eigen3 instead of /usr/include/Eigen. Symlink it:
sudo ln -sf /usr/include/eigen3/Eigen /usr/include/Eigen
sudo ln -sf /usr/include/eigen3/unsupported /usr/include/unsupported
Releasing:
Similar to how I release my pure Python projects e.g. airo-models
.
One additional step is needed: manually create a release on Github.
Welcome Improvements
Python API
Adding an IK function that returns the closest solution and accepts a TCP transform.
Reducing the amount of separate IK functions, e.g. replacing:
ur3e.inverse_kinematics_with_tcp(eef_pose)
# with
ur3e.inverse_kinematics(eef_pose, tcp=tcp_transform)
The same holds for functions ending with _closest()
.
Performance
Currently IK runs at about 10 μs / EEF pose on my laptop.
However, before I implemented the filtering of the solutions, it was closer to 3 μs.
Part of this is because I adapted the bindings in ur_analytic_ik_ext.cpp
to return vectors with the solutions.
Code Quality
- Adding more technical documentation.
ur_analytic_ik_ext.cpp
should be made much more readable.- Reducing some duplication e.g. when defining the IK/FK functions and bindings for the different robots.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
File details
Details for the file ur-analytic-ik-0.0.5.tar.gz
.
File metadata
- Download URL: ur-analytic-ik-0.0.5.tar.gz
- Upload date:
- Size: 419.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/5.0.0 CPython/3.12.2
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | ffac82a4e08614cea54b4ac4a4cc30088b09ece772f82832f24a769ece2e69af |
|
MD5 | 04f6d052cd9b5f098abefecad381f1e6 |
|
BLAKE2b-256 | 925e02d7c84eca384ffe95a3522509f936070ecb62fe9880843ae24daffc0b15 |
File details
Details for the file ur_analytic_ik-0.0.5-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
.
File metadata
- Download URL: ur_analytic_ik-0.0.5-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 25.8 MB
- Tags: PyPy, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/5.0.0 CPython/3.12.2
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 989b2ec578c122c8fc8f278ad8e31d12e3708ec88999378e79cf4b1ff538afab |
|
MD5 | 993fbb79bd64b7d87b65ee498e03a66b |
|
BLAKE2b-256 | da91a77ed490bdb05788183ea52a05e7872daa4404a5b438d102e71814be44e0 |
File details
Details for the file ur_analytic_ik-0.0.5-cp311-cp311-musllinux_1_1_x86_64.whl
.
File metadata
- Download URL: ur_analytic_ik-0.0.5-cp311-cp311-musllinux_1_1_x86_64.whl
- Upload date:
- Size: 26.2 MB
- Tags: CPython 3.11, musllinux: musl 1.1+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/5.0.0 CPython/3.12.2
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4455e4766d281b0f06c578a6cf71086a3f0190b96a689db9105da37db58835f1 |
|
MD5 | e8950cbabe991efcc877f6a4be8b2357 |
|
BLAKE2b-256 | b97bea12f1206c6854aed81bbac43088241ce43be161d41b1d458743e116b53a |
File details
Details for the file ur_analytic_ik-0.0.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
.
File metadata
- Download URL: ur_analytic_ik-0.0.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 25.8 MB
- Tags: CPython 3.11, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/5.0.0 CPython/3.12.2
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | c302b20125c81762710b2c062db0ab9faef1255aeba4f9e7f54607cbc29913d2 |
|
MD5 | 47c74c95c8dc1eb9a21cd80e8838e017 |
|
BLAKE2b-256 | 2ff063a65695bdf9d5ff99b1cac18c804360407aaa88a5ea1ed56603b7c1accc |
File details
Details for the file ur_analytic_ik-0.0.5-cp310-cp310-musllinux_1_1_x86_64.whl
.
File metadata
- Download URL: ur_analytic_ik-0.0.5-cp310-cp310-musllinux_1_1_x86_64.whl
- Upload date:
- Size: 26.2 MB
- Tags: CPython 3.10, musllinux: musl 1.1+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/5.0.0 CPython/3.12.2
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0a42cb5196684d7df0065481917ffd06dded613b5dace85ccca196bc3b98e850 |
|
MD5 | 3fc189658411c21d13b8536c61039596 |
|
BLAKE2b-256 | 5463c23f3a27b8d26d23ba0429ce55c4bcc0829cffb882d003de4e569d2bb6fe |
File details
Details for the file ur_analytic_ik-0.0.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
.
File metadata
- Download URL: ur_analytic_ik-0.0.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 25.8 MB
- Tags: CPython 3.10, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/5.0.0 CPython/3.12.2
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 4e0bc218a5dcdba24fe68fb4303c4d570d65fac7d8e5b1cedaac22a6ae59a34f |
|
MD5 | 5fcfd4cfc603efbdebdcd128841f8e77 |
|
BLAKE2b-256 | 140cd9031b2ee3335b105d8d77439e9e51bfbad6fe3640bff8a1686f70955d32 |
File details
Details for the file ur_analytic_ik-0.0.5-cp39-cp39-musllinux_1_1_x86_64.whl
.
File metadata
- Download URL: ur_analytic_ik-0.0.5-cp39-cp39-musllinux_1_1_x86_64.whl
- Upload date:
- Size: 26.2 MB
- Tags: CPython 3.9, musllinux: musl 1.1+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/5.0.0 CPython/3.12.2
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 7c9cf4d82e41ab39245288197af4dcf0bea16a9ca44243e66197f63036fe3a19 |
|
MD5 | 06309c1989ab54aeefb1e3c6bda7d44d |
|
BLAKE2b-256 | 57b89da870b82d2829fd4e7a91af24e32e8b02a01ec830de86dc54c8887cb900 |
File details
Details for the file ur_analytic_ik-0.0.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
.
File metadata
- Download URL: ur_analytic_ik-0.0.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 25.8 MB
- Tags: CPython 3.9, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/5.0.0 CPython/3.12.2
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 78be42b7f8d538b0c74f1e46c5bd56e2428c80462c8646a2515aa534035c6e31 |
|
MD5 | d5d4c26aad5c681e99f8b43d21727db9 |
|
BLAKE2b-256 | 4ed13dc7a596bc863556895b93e2b9146dde7fa3660b22d52c4a9a459a705393 |
File details
Details for the file ur_analytic_ik-0.0.5-cp38-cp38-musllinux_1_1_x86_64.whl
.
File metadata
- Download URL: ur_analytic_ik-0.0.5-cp38-cp38-musllinux_1_1_x86_64.whl
- Upload date:
- Size: 26.2 MB
- Tags: CPython 3.8, musllinux: musl 1.1+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/5.0.0 CPython/3.12.2
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 876ddc443652b043fadf9e4a3bcd91411f5d4a276c99d23b3b5117972156c5c6 |
|
MD5 | 618e5518b5de0caaf2d247333451ae87 |
|
BLAKE2b-256 | 20a1f1f170d1b366fcac51e705cf097eea4689e06688777d7be6649ac239c310 |
File details
Details for the file ur_analytic_ik-0.0.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
.
File metadata
- Download URL: ur_analytic_ik-0.0.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 25.8 MB
- Tags: CPython 3.8, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/5.0.0 CPython/3.12.2
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | e0dd745fc8db451c61c660ab05ecc1bac21986275e09fcb0407c4277caf7f8ba |
|
MD5 | ccb8aea7dad5e281e494ba059d117cfc |
|
BLAKE2b-256 | 69c1639f70c5f3ed84094c5135bce4f06cf97babef84de1ee6de99e01de283d8 |