[[guide:junction_speed:junction_deviation]]

Differenze

Queste sono le differenze tra la revisione selezionata e la versione attuale della pagina.

Link a questa pagina di confronto

Entrambe le parti precedenti la revisione Revisione precedente
Prossima revisione
Revisione precedente
guide:junction_speed:junction_deviation [03/06/2018 22:02]
Simone Persiani
guide:junction_speed:junction_deviation [01/07/2018 22:00] (versione attuale)
Simone Persiani
Linea 1: Linea 1:
-==== Algoritmo "​Junction Deviation"​ ====+====== Algoritmo "​Junction Deviation" ​======
  
 //Autore: [[iosonopersia@gmail.com|Simone Persiani]]//​ //Autore: [[iosonopersia@gmail.com|Simone Persiani]]//​
  
-=== Strategia ===+==== Strategia ​====
 L'​algoritmo [[guide:​junction_speed:​jerk_limiting|Jerk Limiting]] opera su ciascun asse separatamente,​ senza cioè tener in considerazione l'​effettiva traiettoria seguita dagli spostamenti che si succedono nel corso di una stampa. La [[guide:​junction_speed:​start|Junction Speed]] in questo modo non viene influenzata da un fattore fondamentale:​ l'​angolo <​m>​\Theta</​m>​ tra uno spostamento ed il successivo, ovvero la //"​curvatura"//​ della traiettoria. Si può facilmente intuire l'​importanza di tale angolo: più l'​angolo è grande meno sarà necessario rallentare, e viceversa. Il modello fisico implementato dal [[guide:​junction_speed:​jerk_limiting|Jerk Limiting]] è quindi inaccurato e porta, generalmente,​ ad eccessivi rallentamenti (che aumentano inutilmente i tempi di stampa). L'​algoritmo [[guide:​junction_speed:​jerk_limiting|Jerk Limiting]] opera su ciascun asse separatamente,​ senza cioè tener in considerazione l'​effettiva traiettoria seguita dagli spostamenti che si succedono nel corso di una stampa. La [[guide:​junction_speed:​start|Junction Speed]] in questo modo non viene influenzata da un fattore fondamentale:​ l'​angolo <​m>​\Theta</​m>​ tra uno spostamento ed il successivo, ovvero la //"​curvatura"//​ della traiettoria. Si può facilmente intuire l'​importanza di tale angolo: più l'​angolo è grande meno sarà necessario rallentare, e viceversa. Il modello fisico implementato dal [[guide:​junction_speed:​jerk_limiting|Jerk Limiting]] è quindi inaccurato e porta, generalmente,​ ad eccessivi rallentamenti (che aumentano inutilmente i tempi di stampa).
  
 L'​algoritmo ''​Junction Deviation''​ si propone invece di scegliere <​m>​\vec{v}_{junction}</​m>​ tenendo conto anche dell'​angolo <​m>​\Theta</​m>​. Il risultato è un algoritmo più semplice ed efficace, in grado di velocizzare la percorrenza di tratti curvilinei. Questo nuovo modello fisico permette di ottenere le <​m>​\vec{v}_{junction}</​m>​ corrette in ogni occasione, adattandosi alle più diverse situazioni. L'​algoritmo ''​Junction Deviation''​ si propone invece di scegliere <​m>​\vec{v}_{junction}</​m>​ tenendo conto anche dell'​angolo <​m>​\Theta</​m>​. Il risultato è un algoritmo più semplice ed efficace, in grado di velocizzare la percorrenza di tratti curvilinei. Questo nuovo modello fisico permette di ottenere le <​m>​\vec{v}_{junction}</​m>​ corrette in ogni occasione, adattandosi alle più diverse situazioni.
  
-=== L'​algoritmo ===+==== L'​algoritmo ​====
 <WRAP center round todo 100%> <WRAP center round todo 100%>
 **NOTA DELL'​AUTORE:​** **NOTA DELL'​AUTORE:​**
-Attualmente la migliore spiegazione dell'​algoritmo si trova qui: [[https://​onehossshay.wordpress.com/​2011/​09/​24/​improving_grbl_cornering_algorithm/​|Improving Grbl cornering algorithm]]. È disponibile solo in lingua inglese. Per questo motivo, se dovesse servire, potrei dedicarmi alla sua riscrittura in lingua italiana.+Attualmente la migliore spiegazione dell'​algoritmo si trova qui: [[https://​onehossshay.wordpress.com/​2011/​09/​24/​improving_grbl_cornering_algorithm/​|Improving Grbl cornering algorithm]]. È disponibile solo in lingua inglese. Per questo motivo, se dovesse servire, potrei dedicarmi alla sua riscrittura in lingua italiana. Nel frattempo, se ne consiglia fortemente la lettura.
 </​WRAP>​ </​WRAP>​
  
-=== Configurazione dei parametri === +==== Configurazione dei parametri ​==== 
-Per attivare questa funzionalità è necessario assicurarsi di aver abilitato l'​opzione ''​JUNCTION_DEVIATION''​. ​I parametri attualmente disponibili sono i seguenti:+Per attivare questa funzionalità è necessario assicurarsi di aver abilitato l'​opzione ''​JUNCTION_DEVIATION''​. ​Il parametro dell'​algoritmo è il seguente:
 <​code>​ <​code>​
 #define JUNCTION_DEVIATION #define JUNCTION_DEVIATION
-#define JUNCTION_DEVIATION_MM 0.05 // valore decimale ​maggiore o uguale a 0 +#define JUNCTION_DEVIATION_MM 0.05 // valore decimale ​compreso tra 0.01 e 0.3 (estremi inclusi)
-//#define JUNCTION_DEVIATION_INCLUDE_E+
 </​code>​ </​code>​
  
-  * 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_DEVIATION_MM === 
-  * 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 è <wrap em>assolutamente sperimentale</wrap>! Siccome abilitando tale opzione l'​angolo verrebbe calcolato ​in uno spazio quadridimensionale XYZEnemmeno 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 minimopur 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.+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 0.01mm ​a 0,3mm. Ovviamente questi valori vanno testati sulla propria macchina procedendo per tentativi. Si tenga presente ​che questo parametro rappresenta ​l'errore di approssimazione ​del modello fisico utilizzato dall'​algoritmo. Porlo a 0.01mm significa utilizzare un modello accurato quasi al 100%con l'inconveniente che in questo modo le <m>v_{junction}</msaranno molto limitate. Nella pratica conviene cercare di aumentare progressivamente questo valore ​in modo da aumentare la velocità nei cambi di direzionefacendo attenzione a scegliere una quantità che non porti la stampante a produrre troppo rumore o troppe vibrazioni. Aumentare questo valore significa infatti fornire più flessibilità all'algoritmo, che potrà così decidere di percorrere i cambi di direzione con "​accelerazioni centripete"​ più alte. 
 +<WRAP center round info 100%> 
 +''​JUNCTION_DEVIATION_MM'' ​**è un parametro salvato in EEPROM e può essere modificato anche senza ricompilare il firmware:** basta utilizzare ​il comando ​''​M205 J<?>''​. Al termine delle modifichese si è soddisfatti del valore impostato è possibile salvarlo permanentemente tramite comando ''​M500''​ (richiede ​l'attivazione del supporto alla EEPROM). 
 +</​WRAP>​
  
-=== L'​analogia dell'​automobile === +=== DEFAULT_MAX_ACCELERATION === 
-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.+<wrap em>​Attenzione!</​wrap>​ Prima ancora di cominciare a sperimentare con i valori di ''​JUNCTION_DEVIATION_MM'',​ è assolutamente consigliabile ricontrollare i seguenti parametri:​ 
 +<​code>​ 
 +#define DEFAULT_MAX_ACCELERATION {3000,​3000,​100,​3000,​3000,​3000,​3000,​3000,​3000} 
 +// Nell'​ordine:​ max. accel. dell'​asse X, Y, Z, E0, E1, E2, E3, E4 ed E5 
 +</​code>​ 
 +Il ''​Junction Deviation'',​ infatti, si preoccupa di limitare le accelerazioni su ciascun asse in base ai limiti qui impostati. Si rivela fondamentale,​ quindi, aver impostato questi valori nel modo corretto. Essi devono rispecchiare l'​inerzia di ciascun asse. 
 +<WRAP center round info 100%> 
 +''​DEFAULT_MAX_ACCELERATION''​ **è un parametro salvato in EEPROM e può essere modificato anche senza ricompilare il firmware:** basta utilizzare il comando ''​M201 X<?> Y<?> Z<?>''​. Al termine delle modifiche, se si è soddisfatti del valore impostato è possibile salvarlo permanentemente tramite comando ''​M500''​ (richiede l'​attivazione del supporto alla EEPROM). 
 +</​WRAP>​ 
 +==== L'​analogia dell'​automobile ​da corsa ==== 
 +Se volessimo utilizzare un'​analogia per far comprendere meglio il significato dei primi due parametri, faremmo sicuramente riferimento ad un'auto da Formula 1 che si appresta ad affrontare una curva.
  
-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).+In questa analogia, ​liberamente ispirata ​dalla guida sopra citata, ''​JUNCTION_DEVIATION_MM''​ rappresenta la larghezza della pista rispetto a quella dell'auto: impostarlo a zero significa ​imporre ​che la pista sia della stessa larghezza della vettura, la quale sarà costretta (come se fosse su di un binario) a rallentare ​moltissimo ​per affrontare la curva correttamente. Viceversa, aumentare tale valore renderà la strada più larga e permetterà ​al bolide ​di scegliere una traiettoria più veloce (con la sola differenza che nel caso della stampante la traiettoria rimarrà ovviamente la stessa ma sarà percorsa a velocità maggiore).
  
-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.+Questo parametro va quindi ​impostato ​tenendo conto del suo 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 quelli ​di default, a meno che non si sappia esattamente cosa si stia facendo.
  
 //Autore: [[iosonopersia@gmail.com|Simone Persiani]]//​ //Autore: [[iosonopersia@gmail.com|Simone Persiani]]//​