Sto cercando di fare qualche prova cambiando la cinematica, credo di essere a buon punto ma ci sono un paio di cose che non mi sono chiare.
La versione che sto usando è la 2.7.11. Ho scritto un file con nuova cinematica che compilo correttamente: halcompile --install mytriviks.c
Ho poi provato con un primo esperimento, invertire X con Y, ovvero
kinematicsForward
pos->tran.x = joints[1];
pos->tran.y = joints[0];
kinematicsInverse
joints[1] = pos->tran.x;
joints[0] = pos->tran.y;
E in effetti funziona ma solo se eseguo dei comandi GCode, cioè con G0X100 si muove il motore delle Y, se invece premo sulla tastiera la freccia a destra (movimento in X) si muove ancora il motore della X.
Ho poi provato con l'esempio sul sito di Linuxcnc
http://linuxcnc.org/docs/html/motion/kinematics.html
kinematicsForward
double AD2 = joints[0] * joints[0];
double BD2 = joints[1] * joints[1];
double x = (AD2 - BD2 + Bx * Bx) / (2 * Bx);
double y2 = AD2 - x * x;
if(y2 < 0) return -1;
pos->tran.x = x;
pos->tran.y = sqrt(y2);
pos->tran.z = joints[2];
pos->a = joints[3];
pos->b = joints[4];
pos->c = joints[5];
pos->u = joints[6];
pos->v = joints[7];
pos->w = joints[8];
kinematicsInverse
double x2 = pos->tran.x * pos->tran.x;
double y2 = pos->tran.y * pos->tran.y;
joints[0] = sqrt(x2 + y2);
joints[1] = joints[1] = sqrt((Bx - pos->tran.x)*(Bx - pos->tran.x) + y2);
joints[2] = pos->tran.z;
joints[3] = pos->a;
joints[4] = pos->b;
joints[5] = pos->c;
joints[6] = pos->u;
joints[7] = pos->v;
joints[8] = pos->w;
Anche quì compilo senza problemi (Bx ha valore di 200) ma quando premo F2 ottengo un errore di inseguimento sull'asse 1. I motori sono passo passo ad anello aperto quindi credo che il problema sia nel definire le posizioni iniziali o qualche cosa del genere.
Qualche suggerimento?
Grazie in anticipo.