Go Down

Topic: [Multicotteri] Elettronica : IMU, MCU, Sensori ed algoritmi di controllo (Read 416162 times) previous topic - next topic

lestofante


Un conto è la velocità di comunicazione sul bus, ed è un bene che sia la maggiore possibile, e un conto è la reale frequenza con cui ottieni nuovi dati validi, il parametro DLPF_CFG, parliamo di ITG3200, ti permette di settare un rate massimo di 256 Hz con 8ksps interni, in realtà è meglio lavorare a 188 Hz se vuoi letture veramente stabili.


scusa ma faccio fatica a capire il funzionamento del filtro passa basso. in pratica funziona su 8000ksps/256Hz=31sample circa
somma semplicemente per 31 volte la differenza di valore in entrata(tensione di alimetazione 3,3v) e quello in uscita dal sensore?
Guida per principianti http://playground.arduino.cc/Italiano/newbie
Unoffical Telegram group https://t.me/genuino

astrobeed


scusa ma faccio fatica a capire il funzionamento del filtro passa basso. in pratica funziona su 8000ksps/256Hz


Il sensore ha un suo sistema interno, un mix tra analogico e digitale, di prefiltraggio delle letture, è il blocco "signal conditioning" nello schema a blocchi del sensore.
Tu puoi scegliere come filtrare le letture raw del sensore tramite il registro DLPF_CFG, a seconda del valore viene scelta un'accoppiata tra sample rate analogico interno, filtro analogico passa basso e filtraggio digitale successivo che ti danno il sample rate in uscita.
Per farla breve, se imposti DLPF_CFG = 0 in uscita ottieni 256 sample al secondo utili, è perfettamente inutile leggere il sensore 1000 volte al secondo a meno che non usi quattro letture consecutive per fare una media in modo da pulire ulteriormente il segnale, però alla fine sempre 256 letture utili ottieni.

Scientia potentia est

lestofante

quello che vorrei capire è come vengono generate le 256 misure utili a partire dalle 8KHz di sample rate...
Guida per principianti http://playground.arduino.cc/Italiano/newbie
Unoffical Telegram group https://t.me/genuino

astrobeed


quello che vorrei capire è come vengono generate le 256 misure utili a partire dalle 8KHz di sample rate...


Stai facendo confusione tra la lettura raw interna del sensore con quella già filtrata in uscita.
Il sample rate del ADC interno è  8kHz oppure 1 kHz, e questa è la velocità con cui viene letto il sensore mems, poi c'è la parte di filtraggio che ti limita la banda utile reale eliminando nel contempo molto rumore che altrimenti dovevi filtrare tu se avevi direttamente a disposizione le letture raw.
Scientia potentia est

lestofante

ok, e immagino che il grosso, se non tutto, di questo filtraggio sia fatto dal filtro passa basso, giusto?

e questo suo filtraggio come è esprimibile matematicamente? la media delle letture RAW filtrate? la somma delle differenze dallo "zero" delle letture RAW filtrate? altro?
Guida per principianti http://playground.arduino.cc/Italiano/newbie
Unoffical Telegram group https://t.me/genuino

astrobeed

#1145
Sep 14, 2012, 01:31 pm Last Edit: Sep 14, 2012, 01:33 pm by astrobeed Reason: 1

ok, e immagino che il grosso, se non tutto, di questo filtraggio sia fatto dal filtro passa basso, giusto?


In parte analogico, e in parte digitale.

Quote

e questo suo filtraggio come è esprimibile matematicamente? la media delle letture RAW filtrate? la somma delle differenze dallo "zero" delle letture RAW filtrate?


Questa domanda falla a Invensense visto che non è dato sapere come lavora esattamente internamente il suo sensore e quali algoritmi usano, tu come utente finale prendi per buono come sample rate reale il limite imposto dal filtro passa basso e sei sicuro di non sbagliare :)
Ti posso dire che da test che ho fatto personalmente sul ITG3200 è meglio non andare oltre il valore immediatamente prima di 256Hz, ovvero 188 Hz dove si riesce ad ottenere una risposta complessiva della IMU stabile e precisa nel medio/breve termine, sul lungo termine entra in gioco il drift del gyro ed è necesssario ricalibrarlo, operazione che può essere fatta anche a caldo senza resettare il sistema.
Scientia potentia est

lestofante

ok, a questo punto mi interessa sapere cosa combina la parte di filtro passa basso, cosa ci "buttano dentro" e cosa si apsettano in uscita. Purtroppo la mia ignoranza dilaga (le mie supposizioni di prima sono basate solo su quello che fa il flrtro passa basso, non sul resto del sistema di filtrazione dati)
Guida per principianti http://playground.arduino.cc/Italiano/newbie
Unoffical Telegram group https://t.me/genuino

astrobeed

Non riesco a capire cosa vuoi sapere ?
Il giroscopio vedilo come una black box, quello che c'è dentro e cosa fa e come lo fa non ti serve saperlo, di cui sai solo che ti fornisce in uscita certi dati in funzione di certi stimoli.
Scientia potentia est

sciorty


Studierò il PID, però lasciandolo un attimo da parte, perchè non si può usare quel metodo?


Non vorrei essere petulante, né insistere sulla possibilità di usare questa logica ma qualcuno potrebbe spiegarmi in che problema inciamperei?

lestofante


Non riesco a capire cosa vuoi sapere ?
Il giroscopio vedilo come una black box, quello che c'è dentro e cosa fa e come lo fa non ti serve saperlo, di cui sai solo che ti fornisce in uscita certi dati in funzione di certi stimoli.



vorrei sapere cosa fa un filtro passa basso.  :smiley-mr-green:
Guida per principianti http://playground.arduino.cc/Italiano/newbie
Unoffical Telegram group https://t.me/genuino

lestofante



Studierò il PID, però lasciandolo un attimo da parte, perchè non si può usare quel metodo?


Non vorrei essere petulante, né insistere sulla possibilità di usare questa logica ma qualcuno potrebbe spiegarmi in che problema inciamperei?


il pid è una semplificazione di un sistema complesso. E' una perdita di precisione usarlo dove non serve. ma nulla vieta di creare  un sistema complessissimo fatto da pid, auguri a debuggarlo.
Guida per principianti http://playground.arduino.cc/Italiano/newbie
Unoffical Telegram group https://t.me/genuino

sciorty


il pid è una semplificazione di un sistema complesso. E' una perdita di precisione usarlo dove non serve. ma nulla vieta di creare  un sistema complessissimo fatto da pid, auguri a debuggarlo.


Ma io infatti non parlavo di usare il PID, ma di non usarlo! Al posto di sapere quanto agire sui motori e poi agire, perchè non posso agire direttamente fino a quando so che ad esempio il quadri ha raggiunto quell'inclinazione?(while(!inclinato)motore++.. per rendere l'idea, ovviamente non così semplicemente!)

lestofante

il pid serve per capire quanta botta di potenza dare al motore per tornare dritto il più in fretta possibile, senza però dare troppa potenza e finire di sbilancirrsi dall'altra parte. Se vuoi puoi costruirci sopra un modello fisico, ma il problema che questo modello non terrà conto di mille altri fattori (vento, eliche non perfette, risposta dei motori non lineare e dipendente dall'umidità, durezza dell'aria, etc...).
Come noti sei in un sistema multivariabile in cui le variabili sono praticamente infinite, e sopratutto per la maggior parte di esse non hai nemmeno i mezzi per misurarle/stimarle.

Quindi si usa un PID.

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.
Guida per principianti http://playground.arduino.cc/Italiano/newbie
Unoffical Telegram group https://t.me/genuino

astrobeed


vorrei sapere cosa fa un filtro passa basso.  :smiley-mr-green:


Per definizione un filtro passa basso limita la frequenza massima di un sistema, ovvero oltre il limite imposto si ha una attenuazione del segnale tanto maggiore quanto è maggiore lo scostamento, poi a seconda delle caratteristiche del filtro l'attenuazione può essere o maggiore o minore a parità di scostamento.
Applicato al nostro giroscopio vuol dire che variazioni della velocità angolare troppo rapide rispetto alla reale banda passante vengono attenuate fino ad essere azzerate.

Scientia potentia est

astrobeed


Ma io infatti non parlavo di usare il PID, ma di non usarlo! Al posto di sapere quanto agire sui motori e poi agire, perchè non posso agire direttamente fino a quando so che ad esempio il quadri ha raggiunto quell'inclinazione?(while(!inclinato)motore++.. per rendere l'idea, ovviamente non così semplicemente!)


Il PID è un algoritmo matematico che permette di ottenere un fattore di regolazione partendo da un errore e dalle costanti di tempo del sistema, ovvero ti consente sia di correggere in modo graduale l'errore senza andare nel contempo oltre il fattore di correzione desiderato, che comunque viene raggiunto dopo una leggera oscillazione smorzata, senza innescare un processo oscillatorio esponenziale che porta inevitabilmente alla distruzione del sistema.
Detto in modo più semplice se fai solo una regolazione proporzionale dell'angolo di inclinazione del quadri non riesci a tenerlo stabile al punto desiderato, anzi non riesci nemmeno a raggiungere il punto desiderato.
Il PID è uno dei più semplici algoritmi per il controllo, ce ne sono di molto più complessi, e non è applicabile a tutte le problematiche di controllo, nel caso del quadri non solo va bene, è indispensabile, ovviamente nulla vieta di usare algoritmi più complessi come il "controllo robusto" (si è proprio il nome dell'algoritmo).
Scientia potentia est

Go Up