ik-geo 0.1.2

Geometric solutions to inverse kinematics, using the IK-Geo algorithm
Documentation
pub mod setups;

use {
    self::setups::{
        Irb6640, KukaR800FixedQ3, RrcFixedQ6, SphericalBot, ThreeParallelBot, TwoParallelBot, Ur5,
        YumiFixedQ3,
    },
    super::{
        gen_six_dof, spherical, spherical_two_intersecting, spherical_two_parallel, three_parallel,
        three_parallel_two_intersecting, two_intersecting, two_parallel,
    },
    nalgebra::{Matrix3, Vector3, Vector6},
};

pub fn irb6640(r: &Matrix3<f64>, t: &Vector3<f64>) -> (Vec<Vector6<f64>>, Vec<bool>) {
    spherical_two_parallel(r, t, &Irb6640::get_kin())
}

pub fn kuka_r800_fixed_q3(r: &Matrix3<f64>, t: &Vector3<f64>) -> (Vec<Vector6<f64>>, Vec<bool>) {
    let (kin_partial, r_6t) = KukaR800FixedQ3::get_kin_partial();
    spherical_two_intersecting(&(r * r_6t.transpose()), t, &kin_partial)
}

pub fn rrc_fixed_q6(r: &Matrix3<f64>, t: &Vector3<f64>) -> (Vec<Vector6<f64>>, Vec<bool>) {
    let (kin_partial, r_6t) = RrcFixedQ6::get_kin_partial();
    two_intersecting(&(r * r_6t.transpose()), t, &kin_partial)
}

pub fn yumi_fixed_q3(r: &Matrix3<f64>, t: &Vector3<f64>) -> (Vec<Vector6<f64>>, Vec<bool>) {
    let (kin_partial, r_6t) = YumiFixedQ3::get_kin_partial();
    gen_six_dof(&(r * r_6t.transpose()), t, &kin_partial)
}

pub fn ur5(r: &Matrix3<f64>, t: &Vector3<f64>) -> (Vec<Vector6<f64>>, Vec<bool>) {
    three_parallel_two_intersecting(r, t, &Ur5::get_kin())
}

pub fn three_parallel_bot(r: &Matrix3<f64>, t: &Vector3<f64>) -> (Vec<Vector6<f64>>, Vec<bool>) {
    three_parallel(r, t, &ThreeParallelBot::get_kin())
}

pub fn two_parallel_bot(r: &Matrix3<f64>, t: &Vector3<f64>) -> (Vec<Vector6<f64>>, Vec<bool>) {
    two_parallel(r, t, &TwoParallelBot::get_kin())
}

pub fn spherical_bot(r: &Matrix3<f64>, t: &Vector3<f64>) -> (Vec<Vector6<f64>>, Vec<bool>) {
    spherical(&r, &t, &SphericalBot::get_kin())
}