#kinematics #robot #inverse-kinematics

ik-geo

Geometric solutions to inverse kinematics, using the IK-Geo algorithm

3 releases

0.1.2 Jul 9, 2024
0.1.1 Jul 9, 2024
0.1.0 Jul 1, 2024

#64 in Robotics

Custom license

130KB
3.5K SLoC

Ik Geo

This is a Rust implementation of the analytic inverse kinematics algorithms found in the IK-Geo paper. This implemenation has been adapted from the original Rust implementation by RPI Robotics.

Usage

To use this package, you either need to choose a an implemented model by name, or specify the kinematics as a Product of Exponentials and select the appropriate problem decomposition.

// Only need to import the one you are using
use ik_geo::robot::{
    spherical, spherical_two_parallel, spherical_two_intersecting, three_parallel_two_intersecting, three_parallel, two_parallel, 
    two_intersecting, gen_six_dof
}
use ik_geo::robot::{
    ur5, irb6640, three_parallel_bot, two_parallel_bot, spherical_bot
}

fn main() {
    let robot = ur5();

    let R: Matrix3<f64> = ...
    let t: Vector3<f64> = ...

    // Solutions is a list of IK solutions
    // and whether they are least squares approximations.
    // Depending on the specific decomposition, a least squares solution might not be available.
    let solns = robot.ik(R, t);

    for (q, is_ls) in solns {
        if !is_ls {
            // This is an exact solution
        } else {
            // This one is close, but not exact
        }
    }
}

Performance

While this implementation can be used on a wide range of manipulators, it performs much better on when the solution can be found entirely analytically. The following table shows which method is used for each type of kinematics:

Solution Type Robot Kinematic Family Example
Closed-form Spherical joint Franka Production 3, fixed $q_5$
     and two intersecting axes KUKA LBR iiwa 7 R800 , fixed $q_3$
     and two parallel axes ABB IRB 6640
Three parallel axes N/A
     and two intersecting axes Universal Robots UR5
     and two parallel axes N/A
1D search Two intersecting axes Kassow Robots KR810, fixed $q_7$
     and two intersecting axes FANUC CRX-10iA/L
     and two parallel axes Kawasaki KJ125
Two parallel axes N/A
     and two parallel axes N/A
Two intersecting axes $k, k+2$ ABB YuMi, fixed $q_3$
     and two intersecting axes RRC K-1207i, fixed $q_6$
     and two parallel axes N/A
2D search General 6R Kassow Robots KR810, fixed $q_6$

Testing

Correctness Tests

$ cargo test --release

For diagnostic info:

$ cargo test --release -- --nocapture

Dependencies

~5MB
~97K SLoC