Esempio n. 1
0
void RostockSolution::cartesian_to_actuator( float cartesian_mm[], float actuator_mm[] ){
    float alpha_rotated[3], rotated[3];

    if( sin_alpha == 0 && cos_alpha == 1){
        alpha_rotated[X_AXIS] = cartesian_mm[X_AXIS];
        alpha_rotated[Y_AXIS] = cartesian_mm[Y_AXIS];
        alpha_rotated[Z_AXIS] = cartesian_mm[Z_AXIS];
    }else{
        rotate( cartesian_mm, alpha_rotated, sin_alpha, cos_alpha );
    }
    actuator_mm[ALPHA_STEPPER] = solve_arm( alpha_rotated );

    rotate( alpha_rotated, rotated, sin_beta, cos_beta );
    actuator_mm[BETA_STEPPER ] = solve_arm( rotated );

    rotate( alpha_rotated, rotated, sin_gamma, cos_gamma );
    actuator_mm[GAMMA_STEPPER] = solve_arm( rotated );
}
Esempio n. 2
0
void RostockSolution::millimeters_to_steps( double millimeters[], int steps[] ){
    float mm[3], alpha_rotated[3], rotated[3];
    
    // convert input to float
    mm[0]= millimeters[0];
    mm[1]= millimeters[1];
    mm[2]= millimeters[2];
    
    if( this->sin_alpha == 0 && this->cos_alpha == 1){
        alpha_rotated[0] = mm[0];
        alpha_rotated[1] = mm[1];
        alpha_rotated[2] = mm[2];
    }else{
        rotate( mm, alpha_rotated, sin_alpha, cos_alpha );
    }
    steps[ALPHA_STEPPER] = lround( solve_arm( alpha_rotated ) * this->alpha_steps_per_mm );

    rotate( alpha_rotated, rotated, sin_beta, cos_beta );
    steps[BETA_STEPPER ] = lround( solve_arm( rotated ) * this->beta_steps_per_mm );

    rotate( alpha_rotated, rotated, sin_gamma, cos_gamma );
    steps[GAMMA_STEPPER] = lround( solve_arm( rotated ) * this->gamma_steps_per_mm );
}