Pages: 1 ... 76 77 [78] 79 80 ... 101   Go Down
Author Topic: [Multicotteri] Elettronica : IMU, MCU, Sensori ed algoritmi di controllo  (Read 117537 times)
0 Members and 1 Guest are viewing this topic.
Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 120
Posts: 9173
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Era mia ntenzione elaborare un modello fisico che almeno, conosciuta la forza espressa dall'accoppiata elica/motore, usasse le formule del pendolo inverso per trovare il giusto (teoricamente, quindi niente vento etc...) valore del motore, e aggiungere solo un "pizzico" di pid, in pratica renderlo molto meno influente nelle scelte. ma rimane comunque necessario.

Allora usa un controllo adattativo oppure un controllo robusto.
Logged

Capo d'Orlando
Offline Offline
God Member
*****
Karma: 2
Posts: 725
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Per non raggiungere il punto desiderato intendete dire che, in quel modo, agendo ad muzzum sui motori, sorpasserei il punto desiderato e quindi il quadri cercherebbe di bilanciarsi all'infinito?
Quindi il pid sarebbe una costante fissa tarata sul mio quadricottero che mi dice quanto agire tante volte fino a che non arrivo al punto desiderato?
Logged

0
Offline Offline
Shannon Member
****
Karma: 130
Posts: 10449
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

quindi in pratica se vede che tra la lettura X e la lettura X+1 c'è troppa differenza, nel modello ideale fa in modo che X+1 sia uguale a X?
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

0
Offline Offline
Shannon Member
****
Karma: 130
Posts: 10449
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Per non raggiungere il punto desiderato intendete dire che, in quel modo, agendo ad muzzum sui motori, sorpasserei il punto desiderato e quindi il quadri cercherebbe di bilanciarsi all'infinito?
Quindi il pid sarebbe una costante fissa tarata sul mio quadricottero che mi dice quanto agire tante volte fino a che non arrivo al punto desiderato?


sono 3 valori, una è la P che dice quanto inflienza la parte Proporzionale, la I dice come comportari nel modo Integrativo (ovvero: se la P prima non è bastata, aggiunge qualcosa in più), e la D per il modo derivatico (ovvero: se ci avviciniamo al punto desisderato, smorza la P)

comqune con solo la P vederti il quad che continua ad oscillare come un pendolo, con solo la I lo vedresti apparentemente non far niente quando si inclina per qualche istante, per poi aumnetare a dismisura la potenza sui motori fono a superare ampiamente il punto desisderato, con solo la D vedreti che il motore va sempre a una velocità fissa (impostats dall P), tranne quando ti avvicini al punto desiderato che diminuisce
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 120
Posts: 9173
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Per non raggiungere il punto desiderato intendete dire che, i

Intendo dire che con solo un controllo proporzionale non riesci proprio a raggiungere il punto desiderato, a seconda del gain puoi ottenere un punto maggiore o uno minore, ma mai quello atteso, apparentemente aumentando il gain sull'errore è possibile arrivare al punto desiderato, ma qui subentra l'instabilità (Bode e Nyquist) e il sistema va in oscillazione esponenziale autodistruggendosi.
Ti consiglio caldamente di cercare il corso sul PID di Livio Orsini (liberamente scaricabile), è uno dei migliori e rende la cosa molto semplice, dopo che lo avrai letto ti sarà tutto chiaro, ovviamente è solo il punto di partenza perché l'argomento è vasto e ogni controllo pid è una storia a se perché al di la della semplice formuletta del pid canonico poi c'è da prendere in considerazione tutta una serie di parametri del sistema e la sua fisica per arrivare al pid ottimale, non che quello canonico non funzionerebbe, però non puoi ottenere il massimo dell'efficienza.
Logged

Capo d'Orlando
Offline Offline
God Member
*****
Karma: 2
Posts: 725
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Questo? Sarebbe meglio perchè ad essere sincero non ho capito molto smiley-grin
Logged

Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 120
Posts: 9173
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

sono 3 valori, una è la P che dice quanto inflienza la parte Proporzionale, la I dice come comportari nel modo Integrativo (ovvero: se la P prima non è bastata, aggiunge qualcosa in più), e la D per il modo derivatico (ovvero: se ci avviciniamo al punto desisderato, smorza la P)

Se lo spieghi così non ci capisce nulla, nel quadricottero hai una esigenza primaria, tenere la velocità angolare su i tre assi a 0, ovvero assetto stabile, questo è quello che viene detto volo acro perché il controllo non fa nulla per riportare il quadri in volo livellato, questo è il modo stable.
Prendiamo un attimo in considerazione solo il modo acro, il pid è un controllo velocità a tutti gli effetti e in caso di comandi 0 dello stick controllo assetto (Pitch e Roll) e di quello della direzione (yaw) il punto da raggiungere è 0, cioè tenere la velocità angolare a 0 su tutti e tre gli assi,
Adesso ragioniamo un attimo su cosa sono la derivata e l'integrale della velocità, ovvero la componente I e D del PID, la P è la velocità stessa, la derivata della velocità è l'accelerazione (A = V/T) mentre l'integrale è lo spazio (S = T*V).
Quanto sopra significa che la componente D del pid altro non è che l'accelerazione con cui viene modificata la velocità per portarla al punto desiderato, questa  accelerazione diventa sempre minore all'avvicinarsi del punto e cambia di segno se viene oltrepassato, la componente I rappresenta sia o spazio angolare, se preferisci di quanti gradi è spostato l'asse dal punto desiderato, che la divergenza nel tempo, ovvero lo spazio perso durante lo scorrere del tempo per effetto dell'errore di posizione.
In pratica il PID interviene in tre modi simultaneamente, prima applica un fattore correttivo costante (P) che dipende esclusivamente dall'errore a cui applica un fattore di accelerazione che si modifica, sia aumentando che riducendo, nel tempo (D) e un fattore correttivo che aumenta in modo algebrico in funzione di quanto tempo è trascorso e l'entità dell'errore (I).
La somma dei tre fattori correttivi, a cui viene applicato uno specifico gain (le famigerate Kp, Ki, Kd) porta ad un valore di compensazione (offset) da applicare alla variabile di controllo.
Attenzione che il PID non fornisce direttamente il valore del controllo, fornisce un offset da sommare algebricamente alla variabile di controllo, tale offset cambia nel tempo in accordo con l'intensità dell'errore e i parametri K, ovvero tende ad arrivare a 0 mentre ci avviciniamo al punto desiderato e tende ad aumentare fino al massimo consentito quando ci allontaniamo dal punto, in pratica l'offset non è mai a 0, oscilla leggermente, in modo smorzato, attorno al punto.
Logged

Rome (Italy)
Offline Offline
Tesla Member
***
Karma: 120
Posts: 9173
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Questo? Sarebbe meglio perchè ad essere sincero non ho capito molto smiley-grin

Yes.
Logged

Capo d'Orlando
Offline Offline
God Member
*****
Karma: 2
Posts: 725
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Sarà che l'ho solo sbirciato perchè non ho avuto tutto il pomeriggio, sarà che desideravo vedere un'applicazione pratica, ho trovato molto utile questo.
Però le formule che cita sono:
P = valore errore * kP (variabile utilizzata per la regolazione)
I  = [valore errore * Δt (durata loop) ] * per kI (regolazione)
D = valore errore - valore errore loop precedente / Δt (durata loop)

Mentre mi pare che lui usi:
P = errore / kP;
I = I + (P * durata loop) / kI;
D = (errore - errore precedente) / durata loop / kD;

Non mi coincidono!

Logged

0
Offline Offline
Shannon Member
****
Karma: 130
Posts: 10449
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

a parte che metà delle formule che citi senza usare le paretesi cambiano se scegli la convenzione di partire da sinistra o da destra per svolgere le operazioni.

comunqe X * a == Z/(1/a), poi mi pare errata del secondo blocco:
Code:
I = I + (P * durata loop) / kI;
se i è l'errore precedente ok, è "simile" a fare [valore errore * Δt (durata loop) ]

e del primo blocco

Code:
valore errore - valore errore loop precedente / Δt (durata loop)
quì non compare il termine D, ma se lo aggiungi moltiplicando il tutto vedrai che basandoti sul fatto che in realtà la PID del primo blocco è 1/PID del secondo e tutto torna
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Capo d'Orlando
Offline Offline
God Member
*****
Karma: 2
Posts: 725
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Non capisco ragazzi :\ non per colpa vostra, è che ancora forse mi è astratto questo concetto e non riesco a concretizzare quello che mi dite..

P rappresenta quanto dobbiamo agire, cioè l'errore, quindi la differenza tra l'angolo(parliamo di quadri magari)desiderato e quello attuale, ed è dato appunto dall'errore * la costante kP

I non ho capito cosa sia ma è dato dall'errore * il tempo passato dall'ultima correzione* la costante kI

D rappresenta la velocità con cui agire sull'errore? Dato da: (errore-errore ultima correzione)/ tempo passato dall'ultima correzione?

Giusto? (No  smiley-wink )
Mi sento un po' in imbarazzo a chiedere qui perchè non so se siete moralmente tenuti a spiegarmelo in questo topic, ma in ogni caso scusate!
Logged

0
Offline Offline
Shannon Member
****
Karma: 130
Posts: 10449
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

no, prima trovi l'errore, facendo (angolo desisderato-angolo attuale) che può essere positivi che negativo

poi per trasformare il valore di errore in un valore per l'azionamento che vuoi usare, e il sistema è con il componente P. La P si comporta come una retta: tanto più grande è P, tanto più è inclinata la retta rispetto all'asse X (dove asse X = errore, asse Y = output del pid)

notare che il tempo non centra niente: a qualsiasi istante il valore del componente P può essere conosciuto con certezza conoscendo l'input.

la  I invece lavora con il tempo; è come la P, però se l'errore era presente anche alla misurazione precedente, lo aggiunge all'output.

Immaginati di andare in skate:per avanzare di tot metri dai una spinta X (Proporzionale). Ma se sei in salita non basta X, dovrai dare X+Y dove Y è proporzionale ai metri in meno che hai percorso nelle spinte precedenti.
Ovviamente Y crescerà fino a quando con X+Y non percorri i metri desiderati anche in salita. Quando tornerai in piano la Y tornerà, con la setssa velocità con cui è cresciuta, ad essere 0.
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Capo d'Orlando
Offline Offline
God Member
*****
Karma: 2
Posts: 725
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ottimo esempio, ci sono andato in skate per un paio d'anni smiley-grin

Quindi in parole povere la P è l'errore, la I è come l'errore ma al posto di azzerarsi quando l'errore è 0 scende piano piano? (raddriza il quadri dolcemente?)
Logged

0
Offline Offline
Shannon Member
****
Karma: 130
Posts: 10449
:(){:|:&};:
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

la I è proporzionale alla somma dell'errore, in pratica se c'è un errore si accumula. Ovviamente l'errore può essere sia positivo che negativo, riuscendo quindi ad azzerarsi. Insomma si può dire che la P è il normale riflesso, la I la memoria a medio termine con cui modifichi l'impulso iniziale in base al comportamento passato dell'errore, però è a medio termine perchè mano a mano che raggiungi il punto desisderato si cancella
Logged

sei nuovo? non sai da dove partire? leggi qui: http://playground.arduino.cc/Italiano/Newbie

Tortona
Offline Offline
God Member
*****
Karma: 2
Posts: 601
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

ecco un'altro test che ho fatto. (non state a guardare la qualità del montaggio, sono una chiavica)


Logged

Se gommo tiene,io vince gara! Se gommo non tiene,io come bomba dentro montagna

Pages: 1 ... 76 77 [78] 79 80 ... 101   Go Up
Jump to: