Skip to main content

Inverse kinematics for general 6R serial robots (Husty-Pfurner algebraic method)

Project description

IKDH

IKDH is an Inverse Kinematics solver based on the Denavit and Hartenberg convention. It finds all solutions for general six revolute joint robots based on the Husty and Pfurner algorithm [1] and [2].


Web Interface

Web Interface can be accessed here.

joints frames manipulability

Robots can be browsed and downloaded from the RoboDK Robot Library. Once found, add your .robot file with load and the DH parameters will be directly extracted from it.

Terminal Commands

  • cartesian motion : MoveL x_mm, y_mm, z_mm, roll_deg, pitch_deg, yaw_deg

    • set cartesian speed : SetSpeedL mm_per_s (default: 100 mm/s)
  • joint motion : MoveJ J1_deg, J2_deg, J3_deg, J4_deg, J5_deg, J6_deg

    • set joint speed : SetSpeedJ deg_per_s (default: 60 °/s)

Library

build the project

cmake -B build -S .
cmake --build build

Python example

import sys; sys.path.insert(0, 'build')
import ikdh

robot  = ikdh.load_robot("robots/your_robot.yaml")
solver = ikdh.Solver(robot.dh, robot.limits)

#                            x      y    z      roll pitch yaw
ee   = ikdh.pose_from_xyzrpw(500.0, 0.0, 500.0, 0.0, 90.0, 0.0)
sols = solver.solve(ee)   # list of (6,) numpy arrays, in degrees

for q in sols:
    print(q)

C++ example

#include <ikdh.h>
#include <robots.h>
#include <cstdio>

int main()
{
    auto robot = Robots::loadRobot("robots/gofa5.yaml");
    IKDH::Solver solver(robot.dh, robot.limits);

    auto ee = IKDH::poseFromXYZRPW(500.0, 0.0, 500.0, 0.0, 90.0, 0.0);
    auto sols = solver.solve(ee);

    for (size_t i = 0; i < sols.size(); ++i) {
        for (double q : sols[i]) printf("%.3f ", q);
        printf("\n");
    }
}

How to cite

@misc{axel_ikdh_2026,
  author       = {Axel Refalo},
  title        = {IKDH: An Inverse Kinematics Solver based Denavit and Hartenberg Convention},
  year         = {2026},
  publisher    = {GitHub},
  journal      = {GitHub Repository},
  howpublished = {\url{https://github.com/Lab-CORO/IKDH}},
}

References

[1] M. Husty, M. Pfurner and H.-P. Schröcker. A new and efficient algorithm for the inverse kinematics of a general serial 6R manipulator, Mech. Mach. Theory 42: 66–81, 2007.

[2] J. Capco, M. J. C. Loquias, S. M. M. Manongsong and F. R. Nemenzo. Inverse Kinematics of Some General 6R/P Manipulators, arXiv:1906.07813, 2019.

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

ikdh-1.0.0.tar.gz (386.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ikdh-1.0.0-cp314-cp314-macosx_26_0_arm64.whl (228.6 kB view details)

Uploaded CPython 3.14macOS 26.0+ ARM64

File details

Details for the file ikdh-1.0.0.tar.gz.

File metadata

  • Download URL: ikdh-1.0.0.tar.gz
  • Upload date:
  • Size: 386.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.6

File hashes

Hashes for ikdh-1.0.0.tar.gz
Algorithm Hash digest
SHA256 cffb4626493edf6d0679781762d6a6edb08a18e92ab7242684b38386d6d32ab4
MD5 8199ce72644897295ce57d2cbe5fbf8d
BLAKE2b-256 c5e88b4942d352527f185fda10b1709ebc58549ef5f81e53787a6fe6282d4966

See more details on using hashes here.

File details

Details for the file ikdh-1.0.0-cp314-cp314-macosx_26_0_arm64.whl.

File metadata

File hashes

Hashes for ikdh-1.0.0-cp314-cp314-macosx_26_0_arm64.whl
Algorithm Hash digest
SHA256 8690af435848d4548c7f58b3e5683f4888c5436fd90c1ff76387f8a17b8bf18e
MD5 01ea442764b2e017865cc70ebaef21f9
BLAKE2b-256 73603f858b8b4b765bf26cd73e01308aa94a9b170d02322c27d990e3d6423263

See more details on using hashes here.

Supported by

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