spyder-ik 0.1.0

Motion planner for hexapod robots
Documentation
use std::error::Error;

use crate::{builder::SpyderBuilder, gait::Trigait};

mod bezier;
mod builder;
mod gait;
mod ik;
mod leg;
mod spyder;

fn main() -> Result<(), Box<dyn Error>> {
    let mut spyder = SpyderBuilder::default()
        .leg_params(42.25, 120.0, 180.0)
        .home(160.0, 0.0, -100.0)
        .azimuth_angle(60.0)
        .cw_ang_resolution(10)
        .build()
        .unwrap();

    let lut = spyder.generate_lut(&Trigait::new(160.0, 180.0, 35))?;
    let _ = spyder.get_standing_pose();
    println!("{:?}", lut);
    Ok(())
}

#[cfg(test)]
mod tests {
    use crate::{builder::SpyderBuilder, gait::Trigait};

    #[test]
    fn test_get_standing_pose() {
        let spyder = SpyderBuilder::default()
            .leg_params(42.25, 120.0, 180.0)
            .home(160.0, 0.0, -100.0)
            .azimuth_angle(60.0)
            .cw_ang_resolution(60)
            .build()
            .unwrap();

        let pose = spyder.get_standing_pose().unwrap();
        assert_eq!(
            pose,
            [
                0.0,
                0.7078761251016318,
                -2.1304601389264617,
                0.0,
                0.7078761251016318,
                -2.1304601389264617,
                0.0,
                0.7078761251016318,
                -2.1304601389264617,
                0.0,
                0.7078761251016318,
                -2.1304601389264617,
                0.0,
                0.7078761251016318,
                -2.1304601389264617,
                0.0,
                0.7078761251016318,
                -2.1304601389264617
            ]
        );
    }

    #[test]
    fn test_generate_lut() {
        let mut spyder = SpyderBuilder::default()
            .leg_params(42.25, 120.0, 180.0)
            .home(160.0, 0.0, -100.0)
            .azimuth_angle(60.0)
            .cw_ang_resolution(60)
            .build()
            .unwrap();

        let lut = spyder
            .generate_lut(&Trigait::new(160.0, 180.0, 35))
            .unwrap();

        assert_eq!(
            lut[0][0],
            [
                0.0,
                2.1012205327122304,
                -2.2322120713457885,
                0.0,
                0.7078761251016318,
                -2.1304601389264617,
                0.0,
                2.1012205327122304,
                -2.2322120713457885,
                0.0,
                0.7078761251016318,
                -2.1304601389264617,
                0.0,
                2.1012205327122304,
                -2.2322120713457885,
                0.0,
                0.7078761251016318,
                -2.1304601389264617
            ]
        )
    }
}