Differenze
Queste sono le differenze tra la revisione selezionata e la versione attuale della pagina.
Entrambe le parti precedenti la revisione Revisione precedente Prossima revisione | Revisione precedente | ||
guide:junction_speed:junction_deviation [01/06/2018 13:03] Simone Persiani ↷ Pagina spostata e rinominata da guidegfd a guide:junction_speed:junction_deviation |
guide:junction_speed:junction_deviation [01/07/2018 22:00] (versione attuale) Simone Persiani |
||
---|---|---|---|
Linea 1: | Linea 1: | ||
- | ==== Algoritmo "Junction Deviation" ==== | + | ====== Algoritmo "Junction Deviation" ====== |
- | === 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 <m>\vec{v}_X</m>, <m>\vec{v}_Y</m> e <m>\vec{v}_Z</m>, finendo spesso per limitare eccessivamente la velocità totale (data dalla loro somma vettoriale: <m>\vec{v} = \vec{v}_X + \vec{v}_Y +\vec{v}_Z</m>). | + | |
- | L'algoritmo ''Junction Deviation'' fornisce invece al ''planner'' una visione d'insieme migliore sulla coda di movimenti da eseguire, permettendogli di scegliere <m>\vec{v}_{junction}</m> 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. | + | //Autore: [[iosonopersia@gmail.com|Simone Persiani]]// |
- | === L'algoritmo === | + | ==== 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 ''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 ==== | ||
<WRAP center round todo 100%> | <WRAP center round todo 100%> | ||
**NOTA DELL'AUTORE:** | **NOTA DELL'AUTORE:** | ||
- | Attualmente la migliore spiegazione si trova qui: [[https://onehossshay.wordpress.com/2011/09/24/improving_grbl_cornering_algorithm/|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. | + | 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 // per abilitare il Junction Deviation e disabilitare il Jerk Limiting | + | #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_ACCELERATION 1000 | + | |
- | //#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 === |
- | * ''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 è <m>a_{centripeta} = {v^2}/{r}</m>, dove r è il raggio di curvatura. <m>\vec{v}</m> e soprattutto <m>r</m> possono cambiare da un movimento all'altro, determinando di volta in volta un diverso valore di <m>a_{centripeta}</m>. ''JUNCTION_ACCELERATION'' permette quindi di limitare <m>a_{centripeta}</m>; | + | 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}</m> saranno molto limitate. Nella pratica conviene cercare di aumentare progressivamente questo valore in modo da aumentare la velocità nei cambi di direzione, facendo 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. |
- | * 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 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. | + | <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 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 === | + | === 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> | |
- | 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). | + | #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. | ||
- | ''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. | + | 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]]// |
- Ultima modifica: 01/06/2018 13:03
- da Simone Persiani