Skip to main content

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ur-analytic-ik-0.0.5.tar.gz (419.6 kB view details)

Uploaded Source

Built Distributions

ur_analytic_ik-0.0.5-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (25.8 MB view details)

Uploaded PyPy manylinux: glibc 2.17+ x86-64

ur_analytic_ik-0.0.5-cp311-cp311-musllinux_1_1_x86_64.whl (26.2 MB view details)

Uploaded CPython 3.11 musllinux: musl 1.1+ x86-64

ur_analytic_ik-0.0.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (25.8 MB view details)

Uploaded CPython 3.11 manylinux: glibc 2.17+ x86-64

ur_analytic_ik-0.0.5-cp310-cp310-musllinux_1_1_x86_64.whl (26.2 MB view details)

Uploaded CPython 3.10 musllinux: musl 1.1+ x86-64

ur_analytic_ik-0.0.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (25.8 MB view details)

Uploaded CPython 3.10 manylinux: glibc 2.17+ x86-64

ur_analytic_ik-0.0.5-cp39-cp39-musllinux_1_1_x86_64.whl (26.2 MB view details)

Uploaded CPython 3.9 musllinux: musl 1.1+ x86-64

ur_analytic_ik-0.0.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (25.8 MB view details)

Uploaded CPython 3.9 manylinux: glibc 2.17+ x86-64

ur_analytic_ik-0.0.5-cp38-cp38-musllinux_1_1_x86_64.whl (26.2 MB view details)

Uploaded CPython 3.8 musllinux: musl 1.1+ x86-64

ur_analytic_ik-0.0.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (25.8 MB view details)

Uploaded CPython 3.8 manylinux: glibc 2.17+ x86-64

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

Hashes for ur-analytic-ik-0.0.5.tar.gz
Algorithm Hash digest
SHA256 ffac82a4e08614cea54b4ac4a4cc30088b09ece772f82832f24a769ece2e69af
MD5 04f6d052cd9b5f098abefecad381f1e6
BLAKE2b-256 925e02d7c84eca384ffe95a3522509f936070ecb62fe9880843ae24daffc0b15

See more details on using hashes here.

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

File hashes

Hashes for ur_analytic_ik-0.0.5-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 989b2ec578c122c8fc8f278ad8e31d12e3708ec88999378e79cf4b1ff538afab
MD5 993fbb79bd64b7d87b65ee498e03a66b
BLAKE2b-256 da91a77ed490bdb05788183ea52a05e7872daa4404a5b438d102e71814be44e0

See more details on using hashes here.

File details

Details for the file ur_analytic_ik-0.0.5-cp311-cp311-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for ur_analytic_ik-0.0.5-cp311-cp311-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 4455e4766d281b0f06c578a6cf71086a3f0190b96a689db9105da37db58835f1
MD5 e8950cbabe991efcc877f6a4be8b2357
BLAKE2b-256 b97bea12f1206c6854aed81bbac43088241ce43be161d41b1d458743e116b53a

See more details on using hashes here.

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

File hashes

Hashes for ur_analytic_ik-0.0.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 c302b20125c81762710b2c062db0ab9faef1255aeba4f9e7f54607cbc29913d2
MD5 47c74c95c8dc1eb9a21cd80e8838e017
BLAKE2b-256 2ff063a65695bdf9d5ff99b1cac18c804360407aaa88a5ea1ed56603b7c1accc

See more details on using hashes here.

File details

Details for the file ur_analytic_ik-0.0.5-cp310-cp310-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for ur_analytic_ik-0.0.5-cp310-cp310-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 0a42cb5196684d7df0065481917ffd06dded613b5dace85ccca196bc3b98e850
MD5 3fc189658411c21d13b8536c61039596
BLAKE2b-256 5463c23f3a27b8d26d23ba0429ce55c4bcc0829cffb882d003de4e569d2bb6fe

See more details on using hashes here.

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

File hashes

Hashes for ur_analytic_ik-0.0.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 4e0bc218a5dcdba24fe68fb4303c4d570d65fac7d8e5b1cedaac22a6ae59a34f
MD5 5fcfd4cfc603efbdebdcd128841f8e77
BLAKE2b-256 140cd9031b2ee3335b105d8d77439e9e51bfbad6fe3640bff8a1686f70955d32

See more details on using hashes here.

File details

Details for the file ur_analytic_ik-0.0.5-cp39-cp39-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for ur_analytic_ik-0.0.5-cp39-cp39-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 7c9cf4d82e41ab39245288197af4dcf0bea16a9ca44243e66197f63036fe3a19
MD5 06309c1989ab54aeefb1e3c6bda7d44d
BLAKE2b-256 57b89da870b82d2829fd4e7a91af24e32e8b02a01ec830de86dc54c8887cb900

See more details on using hashes here.

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

File hashes

Hashes for ur_analytic_ik-0.0.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 78be42b7f8d538b0c74f1e46c5bd56e2428c80462c8646a2515aa534035c6e31
MD5 d5d4c26aad5c681e99f8b43d21727db9
BLAKE2b-256 4ed13dc7a596bc863556895b93e2b9146dde7fa3660b22d52c4a9a459a705393

See more details on using hashes here.

File details

Details for the file ur_analytic_ik-0.0.5-cp38-cp38-musllinux_1_1_x86_64.whl.

File metadata

File hashes

Hashes for ur_analytic_ik-0.0.5-cp38-cp38-musllinux_1_1_x86_64.whl
Algorithm Hash digest
SHA256 876ddc443652b043fadf9e4a3bcd91411f5d4a276c99d23b3b5117972156c5c6
MD5 618e5518b5de0caaf2d247333451ae87
BLAKE2b-256 20a1f1f170d1b366fcac51e705cf097eea4689e06688777d7be6649ac239c310

See more details on using hashes here.

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

File hashes

Hashes for ur_analytic_ik-0.0.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 e0dd745fc8db451c61c660ab05ecc1bac21986275e09fcb0407c4277caf7f8ba
MD5 ccb8aea7dad5e281e494ba059d117cfc
BLAKE2b-256 69c1639f70c5f3ed84094c5135bce4f06cf97babef84de1ee6de99e01de283d8

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page