Correggere l'ortogonalità degli assi x-y con EMC

Sezione dedicata a Linuxcnc
Rispondi
Avatar utente
davide78
Newbie
Newbie
Messaggi: 36
Iscritto il: venerdì 19 dicembre 2008, 8:30
Località: Molinella (Bo)

Correggere l'ortogonalità degli assi x-y con EMC

Messaggio da davide78 » giovedì 4 marzo 2010, 19:55

Ho una macchina home made che controllo con EMC2. Ho visto che il gioco dei singoli assi può essere compensato via software precisando il valore nel campo backlash. Nel mio caso però il gioco è trascurabile (almeno per la precisione complessiva della macchina), invece una cosa su cui vorrei agire è la correzione software dell'ortogonalità  degli assi x e y.
Tramite misurazione con comparatore ho infatti determinato il fuori squadro dei 2 assi x e y e visto che mi risulta molto difficile fare la correzione meccanicamente mi è venuto in mente di effettuarla via software.
Nel file di configurazione non ho trovato nessuna voce per questo genere di compensazione... qualcuno più esperto saprebbe consigliarmi la via migliore per realizzare questa compensazione?...sempre che sia possible farla!
Grazie

bobwolf
Member
Member
Messaggi: 319
Iscritto il: mercoledì 15 novembre 2006, 0:35
Località: Pistoia

Re: Correggere l'ortogonalità degli assi x-y con EMC

Messaggio da bobwolf » giovedì 4 marzo 2010, 22:39

ciao

potresti usare i moduli kinematics 8)

http://www.linuxcnc.org/docview/html//m ... atics.html

servono per creare le configurazioni di meccaniche non convenzionali o comunque non le classiche XYZ (tipo bracci antropomorfi)
penso che se rendi un asse dipendente da un altro (altri) potresti anche riuscirci
non deve essere molto semplice da realizzare, ma comunque è fattibile con EMC2 :mrgreen:
ciao

Roberto

"è più immorale il sesso o la guerra?"

Avatar utente
davide78
Newbie
Newbie
Messaggi: 36
Iscritto il: venerdì 19 dicembre 2008, 8:30
Località: Molinella (Bo)

Re: Correggere l'ortogonalità degli assi x-y con EMC

Messaggio da davide78 » venerdì 5 marzo 2010, 12:19

Grazie mille! Adesso studio... e vi faccio sapere!

Avatar utente
davide78
Newbie
Newbie
Messaggi: 36
Iscritto il: venerdì 19 dicembre 2008, 8:30
Località: Molinella (Bo)

Re: Correggere l'ortogonalità degli assi x-y con EMC

Messaggio da davide78 » lunedì 8 marzo 2010, 22:12

Ohhh sono proprio contento!!!! :D
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!!!!! 8)

Grazie ancora dell'aiuto!!!

bobwolf
Member
Member
Messaggi: 319
Iscritto il: mercoledì 15 novembre 2006, 0:35
Località: Pistoia

Re: Correggere l'ortogonalità degli assi x-y con EMC

Messaggio da bobwolf » lunedì 8 marzo 2010, 23:49

ciao
sono contento che hai risolto 8)
ora spieghi anche a noi mortali come hai fatto ad inventare queste due relazioni???
intanto provo a spiegare quello che ho capito... anzi ti chiedo quello che non ho capito :mrgreen:
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];
la parte forward dovrebbe essere quella che EMC2 usa per calcolare le traiettorie da dare in pasto al modulo motion che crea le frequenze/sequenze di uscita da dare in pasto ai motori :roll:
apparte la Z che è diretta... e la X è la variabile dipendente da Y... perchè la Y la calcoli proporzionale all'angolo di errore???

joints[0] = pos->tran.x+sin(alpha_rad)*pos->tran.y;
joints[1] = cos(alpha_rad)*pos->tran.y;
joints[2] = pos->tran.z;
questa dovrebbe essere la parte che EMC2 usa per acquisire i dati delle traiettorie... se ci sono dagli encoder... oppure, più frequentemente nei nostri casi, dai moduli motion attraverso i pin che danno il feedback virtuale di quello che stanno facendo; ed anche qui hai usato le medesime associazioni :roll:


forse dovevo stare un po più attento mentre a scuola facevano trigonometria... ma non capisco... l'unica cosa che mi viene in mente è che seno e coseno possono essere i due valori ricavabili da una retta ad x gradi di inclinazione... per il resto buio totale :evil:
ciao

Roberto

"è più immorale il sesso o la guerra?"

Avatar utente
davide78
Newbie
Newbie
Messaggi: 36
Iscritto il: venerdì 19 dicembre 2008, 8:30
Località: Molinella (Bo)

Re: Correggere l'ortogonalità degli assi x-y con EMC

Messaggio da davide78 » martedì 9 marzo 2010, 11:00

Allora ieri sera prima di andare a letto mi è venuto il dubbio di aver invertito cinematica diretta e inversa... infatti era proprio così....
DI seguito metto il codice corretto:

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]-joints[1]*sin(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/cos(alpha_rad);
joints[1] = pos->tran.y/cos(alpha_rad);
joints[2] = pos->tran.z;
joints[3] = pos->a;
joints[4] = pos->b;
joints[5] = pos->c;

return 0;
}


...e adesso cerco di rispondere alle domande che mi hai fatto.
Da quello che ho capito io la cinematica diretta è rappresentata dalle equazioni che permettono di passare da un sistema di coordinate differente da quello standard (nel mio caso s,t,z) al sistema standard stesso (x,y,z) . La cinematica inversa fa l'esatto contrario... noti x,y,z permette dideterminare le coordinate di un punto nel sistema di coordinate s,t,z.
Sinceramente non conosco nel dettglio come emc2 usa quelle equazioni per il suo funzionamento!

Per capire come ho tirato fuori le equazioni basta guardare la figura che ho allegato. Ho trascurato l'azze z che è invariato nel cambio di coordinate.
x,y sono gli assi teorici, mentre s e t sono quelli reali della mia macchina. x e s coincidono, mentre tra y e t c'è un angolo alpha.
Prendiamo un punto P qualunque nello spazio, esso potrà  essere espresso rispetto le coordinate x,y oppure s,t. Il passaggio di coordinate da un sistema all'altro sono proprio le equazioni implementate.

In pratica è un giochino di trigonometria... vediamo un esempio: Dx (coordinata x di P) è uguale a Ds (coordinata s di P) - Dt * sen(alpha)

...e così via...

Spero che un po' si capisca adesso!
ciao
Non hai i permessi necessari per visualizzare i file e le foto allegati in questo messaggio. Per visualizzare tali file devi registrarti ed effettuare il Login

bobwolf
Member
Member
Messaggi: 319
Iscritto il: mercoledì 15 novembre 2006, 0:35
Località: Pistoia

Re: Correggere l'ortogonalità degli assi x-y con EMC

Messaggio da bobwolf » martedì 9 marzo 2010, 19:45

grazie della risposta

forse comincio a capire qualcosa :roll:

non tenevo conto che il riferimento rispetto ad Y era spostato; quindi anche il valore di X (S) va modificato rispetto a questo valore... infatti Ds è uguale alla distanza fra P e l'asse T ( che è quella reale, con errore angolare) e Dt è uguale alla distanza Y moltiplicato per l'errore ( cos(alfa) )

ma il bello è che a scuola mi ci impegnavo molto a capire la trigonometria, e li per li me la cavavo anche... poi ora che mi serve non mi è rimasto nulla :roll: e pensare che il diploma l'ho preso nel 2008 e pure con il corso serale... quindi anche motivato a fare qualcosa 8)

se non chiedo troppo mi sapresti dire come faresti per creare la cinematica (dir ed inv) per una 5 assi??? che ragionamenti dovresti fare per trovare le formule???
ciao

Roberto

"è più immorale il sesso o la guerra?"

Avatar utente
davide78
Newbie
Newbie
Messaggi: 36
Iscritto il: venerdì 19 dicembre 2008, 8:30
Località: Molinella (Bo)

Re: Correggere l'ortogonalità degli assi x-y con EMC

Messaggio da davide78 » mercoledì 10 marzo 2010, 8:49

bella domanda... :?
beh per prima cosa bisogna capire bene quali sono i 5 gradi di libertà  della macchina e poi quali saranno i 5 parametri spaziali controllati.
Dopo è necessario capire le relazioni che ti permettono di individuare gli uni rispetto gli altri e viceversa.
La cinematica diretta in ogni caso dovrebbe essere abbastanza semplice... solo questione di seni e coseni. La parte forse più complicata potrebbe essere la cinematica inversa che a seconda della struttura della macchina mi sa che non è prorpio semplice semplice... anche perchè li ti devi scontrare con i limiti fisici della meccanica!
Ora essere più preciso è difficile senza conoscere di che tipo di 5 assi parli! Magari per capire un po' di più si può guardare come funziona la cinematica scara (ho visto che c'è il sorgente in EMC2)... ora non ricordo se sia 4 o 5 assi però!
In ogni caso è da circa una settimana che sono entrato in questo mondo e quindi prendi i miei suggerimenti con le molle!!!!!

bobwolf
Member
Member
Messaggi: 319
Iscritto il: mercoledì 15 novembre 2006, 0:35
Località: Pistoia

Re: Correggere l'ortogonalità degli assi x-y con EMC

Messaggio da bobwolf » mercoledì 10 marzo 2010, 20:07

ciao

grazie ancora per la disponibilità 

più che altro mi chiedo come fanno a funzionare macchine tipo questa, senza l'ausilio di un CAM che ti genera il percorso utensile

https://www.cncitalia.net/forum/viewtopi ... =cyberfive

piccola e semplice realizzazione di un utente del forum fatta avanzatempo... azz :shock: ci ho lasciato gli ohhi da quando l'ha fatta vedere la prima volta =D> =D> =D>
... però a pensarci bene questa configurazione, per il discorso che stiamo facendo, è più simile ad una 4 assi;
per una 5 assi come questa (altro bell'oggettino)
http://www.cnc-toolkit.com/gantry_router.html
che calcoli faresti???
ciao

Roberto

"è più immorale il sesso o la guerra?"

Avatar utente
davide78
Newbie
Newbie
Messaggi: 36
Iscritto il: venerdì 19 dicembre 2008, 8:30
Località: Molinella (Bo)

Re: Correggere l'ortogonalità degli assi x-y con EMC

Messaggio da davide78 » giovedì 11 marzo 2010, 8:31

Le macchine che mi hai linkato sono veramente notevoli... :shock:
bobwolf ha scritto:più che altro mi chiedo come fanno a funzionare macchine tipo questa, senza l'ausilio di un CAM che ti genera il percorso utensile
beh penso che se l'oggetto da fresare è complesso, un CAM che gestisca il numero di assi della macchina sia obbligato. L'alternativa infatti è scrivere il g-code a mano... che immagino sia possibile farlo solo in caso di pezzi relativamente semplici.
bobwolf ha scritto: per una 5 assi come questa (altro bell'oggettino)
http://www.cnc-toolkit.com/gantry_router.html
che calcoli faresti???
Non mi sembra troppo complicato, sta sera quando torno dal lavoro ti scrivo le equazioni.

ciao

bobwolf
Member
Member
Messaggi: 319
Iscritto il: mercoledì 15 novembre 2006, 0:35
Località: Pistoia

Re: Correggere l'ortogonalità degli assi x-y con EMC

Messaggio da bobwolf » giovedì 11 marzo 2010, 15:13

ciao

il discorso da come l'ho capito io è che:

se il disegno è complicato, è necessario il CAM, ed a quel punto o viene generato il percorso utensile da lui con tutte le interpolazioni del caso, oppure si appoggia alla cinematica della macchina ed il CAM genera solamente gli spostamenti di base

ma se il disegno è semplice è quasi più comodo che sia l'operatore a dare i comandi G al programma per fare le lavorazioni

esempio:

se devo scolpire una testa in pietra (figura con molte variazioni di piano continue) e voglio che la fresa sia sempre perpendicolare al taglio devo per forza usare un CAM che mi genera il percorso utensile

se devo fare dei fori a 45° su delle superfici (lavorazione semplice) il movimento della punta, dal momento in cui entra nel materiale, dovrà  essere sempre nella direzione della punta, altrimenti si spezza... questo movimento può essere fatto solamente grazie alla cinematica della macchina, altrimenti impossibile da fare a mano, correggendo istante per istante XYZAB
ciao

Roberto

"è più immorale il sesso o la guerra?"

Dino
Senior
Senior
Messaggi: 815
Iscritto il: lunedì 13 novembre 2006, 23:08
Località: Dolomiti (BL)
Contatta:

Re: Correggere l'ortogonalità degli assi x-y con EMC

Messaggio da Dino » giovedì 11 marzo 2010, 17:09

bobwolf ha scritto:se devo fare dei fori a 45° su delle superfici (lavorazione semplice) il movimento della punta, dal momento in cui entra nel materiale, dovrà  essere sempre nella direzione della punta, altrimenti si spezza... questo movimento può essere fatto solamente grazie alla cinematica della macchina, altrimenti impossibile da fare a mano, correggendo istante per istante XYZAB
Ciao,
diciamo che è più semplice programmare una macchina se le funzioni della cinematica ci aiutano ad orientare l'utensile, non è comunque impossibile programmare senza l'ausilio delle funzioni della cinematica.
Come già  detto da davide78 in EMC2 le funzioni che controllano la cinematica della macchina sono due, la funzione della cinematica diretta (kinematicsForward) si occupa di determinare la posizione esatta del punto nello spazio cartesiano, con anche l'orientamento dell'utensile, in base alla posizione degli assi, la cinematica inversa (kinematicsInverse) fa appunto l'inverso :) ovvero si occupa di determinare la posizione degli assi in base all'orientamento ed alla posizione del punto nello spazio cartesiano.
Queste funzioni non sono complicate da scrivere, ma sono strettamente collegate alla macchina e per questo si hanno solo esempi in rete, nelle funzioni bisogna inglobare le dimensioni fisiche della macchina, ad esempio per una macchina a 5 assi con testa mobile la distanza tra l'asse di rotazione ed il naso del mandrino (questo per convenzione dato che poi per ogni utensile attrezzato sarà  necessario compilare la tabella degli utensili), questo per far in modo che la macchina "recuperi" per gli sopostamenti degli assi rotatori.
Detto così è un po' complicato da capire, appena ho un momento faccio uno schema e lo posto.

Complimenti a davide78 per il lavoro svolto! consiglio solo di riscrivere le funzioni assegnando alla variabile alpha_rad direttamente il valore in radianti per evitare che ad ogni chiamata della funzione il valore venga ricalcolato. Io personalmente per un caso come quello esposto non avrei lavorato con le funzioni trigonometriche (che richiedono parecchi calcoli) ma ragionando sulle proprietà  dei triangoli rettangoli (fare il quadrato o la radice quadrata di un valore è più veloce che fare il seno e coseno).
NON più moderatore della sezione EMC ( http://www.linuxcnc.org/ )
Felice utilizzatore di GNU/Linux http://www.gnu.org/ http://www.kernel.org/
Linux Registered User #192043 http://counter.li.org/
Sito internet http://dino.delfavero.it/

Avatar utente
davide78
Newbie
Newbie
Messaggi: 36
Iscritto il: venerdì 19 dicembre 2008, 8:30
Località: Molinella (Bo)

Re: Correggere l'ortogonalità degli assi x-y con EMC

Messaggio da davide78 » giovedì 11 marzo 2010, 18:26

@bobwolf
Beh la cinematica dei 5 assi in emc2 ci deve essere comunque, sia che il g-code sia creato da un cad/cam sia che sia creato a mano dall'utente!
Ti allego una versione semplificata del 5 assi che mi avevi chiesto... come dice giustamente Dino, per creare la cinematica esatta bisogna conoscere in dettaglio le dimensioni e il funzionamento di tutti gli azionamenti... io mi sono fatto molti sconti... è solo per dare l'idea!


@Dino
Grazie dei complimenti... si avevo pensato anch'io di eliminare tutti i calcoli superflui e sostituirli con le costanti corrispondenti! Al momento però non l'ho ancora fatto perchè per testare il tutto è molto + comodo modificare la sola variabile alpha piuttosto che ricalocolarmi a mano tutte le costanti in caso di modifica. Il pc comunque se la cava bene e il kernell real time non mostra il fianco...e le velocità  della mia macchinetta non sono enormi!
Comunque appena tutto è in ordine lo faccio! grazie!
Non hai i permessi necessari per visualizzare i file e le foto allegati in questo messaggio. Per visualizzare tali file devi registrarti ed effettuare il Login

bobwolf
Member
Member
Messaggi: 319
Iscritto il: mercoledì 15 novembre 2006, 0:35
Località: Pistoia

Re: Correggere l'ortogonalità degli assi x-y con EMC

Messaggio da bobwolf » giovedì 11 marzo 2010, 21:42

bhe... sono semplici :roll: :roll: :roll:
pensavo peggio :mrgreen: :mrgreen: :mrgreen:

gli sconti che hai fatto alle formule sono le somme degli spostamenti delle dimensioni fisiche, che i vari snodi hanno fra di loro e rispetto alla terna XYZ???
se la cinematica viene creata sul naso del mandrino, allora nelle formule ci sarà  sicuramente un correttore che terrà  conto della lunghezza dell'utensile??? e anche il diametro... o è indifferente nel calcolo della posizione???

per capire:
se ad una macchina con 5 assi, in modalità  JOG (manuale), inclino la il mandrino di A° e di B° e poi decremento la Z (sempre in JOG) il percorso della punta che è nel mandrino sarà  per il verso della punta, quindi posso forare anche inclinato, oppure semplicemente scende di traverso e spezzo la punta??? nel secondo caso è possibile fare fori inclinati in modalità  JOG??? e come???
ciao

Roberto

"è più immorale il sesso o la guerra?"

Dino
Senior
Senior
Messaggi: 815
Iscritto il: lunedì 13 novembre 2006, 23:08
Località: Dolomiti (BL)
Contatta:

Re: Correggere l'ortogonalità degli assi x-y con EMC

Messaggio da Dino » giovedì 11 marzo 2010, 23:52

In modalità  JOG dipende dalla macchina, se è la testa che si inclina allora non credo sia semplice fare quello che chiedi, se è il pezzo che si muove è banale :-) l'asse Z è sempre parallelo all'utensile, in modalità  MDI invece è possibile.
NON più moderatore della sezione EMC ( http://www.linuxcnc.org/ )
Felice utilizzatore di GNU/Linux http://www.gnu.org/ http://www.kernel.org/
Linux Registered User #192043 http://counter.li.org/
Sito internet http://dino.delfavero.it/

Rispondi

Torna a “Linuxcnc”