[[guide:junction_speed:junction_deviation]]

Questa è una vecchia versione del documento!


Strategia

L'algoritmo Jerk Limiting ragiona su ciascun asse separatamente, senza perciò tener in considerazione l'effettiva traiettoria generata dai movimenti pianificati nel planner. Il risultato è che nelle curve, che sono sempre composte da una moltitudine di segmenti più o meno "corti", il planner cerca di assicurare che ciascun asse non subisca variazioni troppo alte di velocità limitando separatamente le componenti \vec{v}_X, \vec{v}_Y e \vec{v}_Z, finendo spesso per limitare eccessivamente la velocità totale (data dalla loro somma vettoriale: \vec{v} = \vec{v}_X + \vec{v}_Y +\vec{v}_Z).

L'algoritmo Junction Deviation fornisce invece al planner una visione d'insieme migliore sulla coda di movimenti da eseguire, permettendogli di scegliere \vec{v}_{junction} tenendo conto solamente di fattori relativi alla traiettoria degli spostamenti. Il risultato è un algoritmo più semplice ed efficace, in grado di evitare rallentamenti eccessivi e quindi di velocizzare la percorrenza di tratti curvilinei. Alcuni utenti di Marlin, i primi ad aver testato tale algoritmo, hanno riferito di aver notato una diminuzione di circa il 20% sui tempi di stampa.

L'algoritmo

NOTA DELL'AUTORE: Attualmente la migliore spiegazione si trova qui: Improving Grbl cornering algorithm. È disponibile solo in lingua inglese e in alcuni passaggi è un po' sbrigativa e confusa, per lo meno agli occhi dell'autore di questa guida. Per questo motivo, se dovesse servire, potrei dedicarmi alla sua riscrittura in lingua italiana.

Configurazione dei parametri

Per attivare questa funzionalità è necessario assicurarsi di aver abilitato l'opzione JUNCTION_DEVIATION. I parametri attualmente disponibili sono i seguenti:

#define JUNCTION_DEVIATION // per abilitare il Junction Deviation e disabilitare il Jerk Limiting
#define JUNCTION_DEVIATION_MM 0.05 // valore decimale maggiore o uguale a 0
#define JUNCTION_ACCELERATION 1000
//#define JUNCTION_DEVIATION_INCLUDE_E
  • Per comprendere l'opzione JUNCTION_DEVIATION_MM è strettamente necessario aver capito a fondo il funzionamento dell'algoritmo. Si faccia riferimento alla guida di cui sopra è stato fornito il link. Si sappia che è un valore espresso in mm e che un range sicuro di possibili valori va da 0mm a 0,5mm. Ovviamente questi valori vanno testati sulla propria macchina procedendo per tentativi;
  • JUNCTION_ACCELERATION è il più semplice da immaginare: trattasi della massima accelerazione centripeta che la meccanica può sostenere. Durante i cambi di direzione il nuovo algoritmo cerca di mantenere costante la velocità: l'accelerazione centripeta è a_{centripeta} = {v^2}/{r}, dove r è il raggio di curvatura. \vec{v} e soprattutto r possono cambiare da un movimento all'altro, determinando di volta in volta un diverso valore di a_{centripeta}. JUNCTION_ACCELERATION permette quindi di limitare a_{centripeta};
  • Per fare in modo che per la valutazione dell'angolo di curvatura venga tenuto in conto anche l'avanzamento/ritrazione del filamento, è necessario abilitare l'opzione JUNCTION_DEVIATION_INCLUDE_E. Questa opzione è assolutamente sperimentale! Siccome abilitando tale opzione l'angolo verrebbe calcolato in uno spazio quadridimensionale XYZE, nemmeno gli sviluppatori del Junction Deviation sono in grado di predirne con sicurezza gli effetti! L'opzione è presente perché il planner ha a disposizione anche i dati relativi all'estrusore: siccome lo sforzo che sarebbe servito per aggiungere tale possibilità era davvero minimo, pur non riuscendo ad immaginarne gli effetti o l'utilità, gli sviluppatori hanno pensato di lasciare tale funzione e di permettere agli utenti di sperimentarla sulle loro macchine per verificare se ciò possa produrre miglioramenti apprezzabili o meno.

L'analogia dell'automobile

Se volessimo utilizzare un'analogia per far comprendere meglio il significato dei primi due parametri, faremmo sicuramente riferimento ad un'automobile che si appresta ad affrontare una curva stretta.

In questa analogia, tratta dalla guida sopra citata, JUNCTION_DEVIATION_MM rappresenta la larghezza della strada rispetto a quella dell'automobile: impostarlo a zero significa che la strada sarà della stessa larghezza della vettura, la quale sarà costretta (come se fosse su di un binario) a rallentare molto per affrontare la curva senza uscire dalla carreggiata. Viceversa, aumentare tale valore renderà la strada più larga e permetterà all'automobile di scegliere una traiettoria più veloce (con la differenza che nel caso della stampante la traiettoria rimarrà ovviamente la stessa ma sarà percorsa a velocità maggiore).

JUNCTION_ACCELERATION rappresenterebbe invece il "grip" (l'aderenza) delle gomme con l'asfalto: se l'aderenza è scarsa, la velocità di percorrenza della curva deve essere limitata di molto per evitare di scivolare fuori traiettoria. Viceversa, un valore alto significa che l'automobile è in grado di sopportare accelerazioni centripete più alte e quindi può premere più bruscamente i pedali del gas e del freno.

I due parametri vanno quindi impostati tenendo conto del loro significato fisico/geometrico. L'utente è libero di sperimentare per trovare i valori limite della propria stampante ma il consiglio è quello di non allontanarsi troppo dai valori di default, a meno che non si sappia esattamente cosa si stia facendo.