Ohhh sono proprio contento!!!!
Seguendo il consiglio di bobwolf sono riuscito con successo a modificare il modulo kinematics di EMC2 per compensare il mio problema di ortogonalità tra gli assi x e y!!!!
Adesso vi racconto come ho fatto... magari può essere utile a qualche altro utente:
1) Come al solito ho fatto partire da live cd ubuntu real-time con emc già installato
2) sudo apt-get install build-essential emc2-dev (installo i pacchetti per la compilazione)
3) sudo apt-get source emc2 (scarico i sorgenti)
4) cd emc2-2.1.5/src/emc/kinematics
5) sudo gedit trivkins.c (edito il file che definisce la cinematica)
6) effettuo le seguenti modifiche alle funzioni kinematicsForward e kinematicsInverse :
int kinematicsForward(const double *joints,
EmcPose * pos,
const KINEMATICS_FORWARD_FLAGS * fflags,
KINEMATICS_INVERSE_FLAGS * iflags)
{
double alpha=0.381966;
double alpha_rad;
alpha_rad=alpha*3.141592654/180;
pos->tran.x = joints[0]-sin(alpha_rad)*joints[1]/cos(alpha_rad);
pos->tran.y = joints[1]/cos(alpha_rad);
pos->tran.z = joints[2];
pos->a = joints[3];
pos->b = joints[4];
pos->c = joints[5];
return 0;
}
int kinematicsInverse(const EmcPose * pos,
double *joints,
const KINEMATICS_INVERSE_FLAGS * iflags,
KINEMATICS_FORWARD_FLAGS * fflags)
{
double alpha=0.381966;
double alpha_rad;
alpha_rad=alpha*3.141592654/180;
joints[0] = pos->tran.x+sin(alpha_rad)*pos->tran.y;
joints[1] = cos(alpha_rad)*pos->tran.y;
joints[2] = pos->tran.z;
joints[3] = pos->a;
joints[4] = pos->b;
joints[5] = pos->c;
return 0;
}
alpha è l'angolo che ho misurato sperimentalmente tra l'asse x (preso come riferimento esatto) e il ponte dell'asse y
ahh e ho aggiunto tra gli include
#include "rtapi_math.h"
7) sudo comp --install trivkins.c (ricompilo il modulo)
Ecco e dopo aver inserito i soliti file di configurazione il gioco è fatto!!!!!
Grazie ancora dell'aiuto!!!