Esistono due passaggi speciali principali per la tecnica utilizzata dalla maggior parte dei controller di stampante 3d open source:
- Dividi ogni segmento di gcode lineare in molti sottosegmenti molto piccoli ("Segmentazione")
- Usa un po 'di trigonometria di base o il teorema di Pitagora per legare la posizione dell'estrusore all'altezza del carrello per ciascuna delle tre torri ("cinematica inversa") per trovare la posizione target per ogni piccolo segmento
La cinematica inversa è sorprendentemente semplice. Un triangolo virtuale a 90 gradi è costruito da due lunghezze note per risolvere la terza lunghezza sconosciuta:
- La lunghezza del braccio delta fissa è l'ipotenusa del triangolo
- La distanza orizzontale tra i giunti della colonna e i giunti dell'effettore viene calcolata dalle coordinate XY dell'ugello e dalla posizione fissa della colonna, per determinare la lunghezza del lato inferiore del triangolo
- La lunghezza del lato superiore del triangolo viene calcolata dai due precedenti tramite il teorema di Pitagora
- La lunghezza del lato superiore viene aggiunta all'altezza Z dell'ugello per ottenere l'altezza del carrello necessaria
Penso che il miglior riferimento open source qui sia il documento di Rostock Kinematics di Steve Grave, rev3 disponibile per il download qui: https://groups.google.com/d/msg/deltabot/V6ATBdT43eU/jEORG_l3dTEJ
Alcune immagini rilevanti:
Questi calcoli della cinematica inversa vengono eseguiti per ciascun carrello per ottenere una posizione target di "spazio del carrello", e questo viene eseguito per ogni sottosegmento del percorso.
I risultati di questi passaggi possono quindi essere reinseriti nelle tecniche standard di interpolazione del percorso lineare per la stampante, in cui spara passaggi nei rapporti necessari e alle velocità necessarie per produrre il movimento rettilineo desiderato e il profilo di accelerazione / velocità. (Come QUESTO viene fatto è una domanda diversa.)
L'effetto netto è che la stampante si sposterà attraverso una serie di piccoli movimenti del carrello "lineari" (significato lineare costante * velocità rispetto al tempo) che approssimano collettivamente i movimenti del carrello curvi (posizione quadratica rispetto al tempo) necessari per produrre un mossa dell'effettore di linea retta.
* (La velocità costante prima dei rallentamenti dell'accelerazione viene applicata per obbedire ai vincoli di dinamica, comunque. Ancora una volta, questo è l'oggetto di una domanda diversa.)
La segmentazione è molto simile al processo di utilizzo di un poligono per approssimare un cerchio. Se le sfaccettature sono abbastanza piccole, il poligono è una buona approssimazione. Tassi di segmentazione più alti producono meno errori di inseguimento del percorso. La principale differenza concettuale tra gli archi del cerchio di disegno e i percorsi di movimento delta è che il cosiddetto "arco sfaccettato" con la segmentazione delta è costruito in coordinate altezza-tempo invece delle coordinate X-vs-Y che useresti per disegnare un cerchio sullo schermo di un computer.
Questo sistema è utilizzato in gran parte perché il supporto per le stampanti in stile Delta era originariamente fissato ai pianificatori di movimento basati su GRBL, scritti esclusivamente per i percorsi di movimento in linea retta nelle stampanti cartesiane. È stata una modifica relativamente minima alla base di codice esistente rispetto all'implementazione dell'interpolazione del percorso quadratico completo.
Le tecniche si sono evolute nel corso degli anni. E vengono spesso utilizzati approcci alternativi: ad esempio, il fork dc42 di RepRapFirmware esegue il percorso esatto senza segmentazione, ricalcolando il tempo corretto per il passaggio successivo dopo ogni passaggio . Questo è funzionalmente equivalente all'approssimazione di un cerchio con un numero di facce poligonale così elevato che ogni pixel sullo schermo ottiene la propria sfaccettatura . Quindi è esattamente preciso quanto la risoluzione di posizionamento dei motori consente. Il rovescio della medaglia è che questa tecnica priva di segmentazione è abbastanza intensiva per i processori, quindi funziona solo con controller relativamente veloci, non con il vecchio Atmega AVR a 8 bit che alimenta oggi la maggior parte delle stampanti consumer / hobbisti esistenti.
Altre tecniche sono possibili. La letteratura accademica sul controllo della robotica parallela è un altro mondo di tecniche matematiche e complessità al fine di produrre algoritmi di controllo generalizzati che funzionano per un'ampia gamma di meccanismi robotici. La versione che utilizziamo nelle stampanti 3d open source è piuttosto semplice e specifica per l'applicazione in confronto.