spacer.png, 0 kB

Torna indietro   Roboitalia.com - Il primo portale in Italia sulla robotica amatoriale > Robotica di base > Elettronica > E. Digitale

Rispondi
 
Strumenti discussione Modalità  visualizzazioe
  #1  
Vecchio 31-07-2010, 18.13.32
Globe Globe non è collegato
Robottaro senior
 
Data registrazione: 22-05-2005
Messaggi: 40
Potenza reputazione: 66
Globe E' un faro della comunità
Exclamation Filtro di Kalman per Accelerometro

Ciao,
sto cercando di realizzare un filtro di kalman per pulire la sequenza di read_adc fatta da un pic sul segnale analogico che esce da un accelerometro.
Credo di aver capito che il task maggiore nell'implementare tale filtro sia identificare correttamente le matrici A,B,C (oltre ovviamente alla W e Z che descrivono i disturbi) che descrivono il sistema seguente:

x(k+1) = A*x(k) + B*u(k) + w(k)
y(k) = C*x(k) + z(k)

Ora vi chiedo, voi come descrivereste tali matrici se ipotizziamo per semplicità che stiamo trattando un accelerometro ad un solo asse?

Grazie di ogni eventuale idea
Rispondi citando
  #2  
Vecchio 02-08-2010, 14.24.27
gyppe gyppe non è collegato
Robottaro sostenitore
 
Data registrazione: 24-03-2009
Residenza: sardegna
Età : 38
Messaggi: 1,250
Potenza reputazione: 91
gyppe La sua reputazione è oltre la sua famagyppe La sua reputazione è oltre la sua fama
Predefinito

Uhm, discorso troppo serio, temo dovrai aspettare la prossima cena
Qui in italia le discussioni sulla "robotica" in internet difficilmente vanno oltre il diodo e il condensatore.
Qualcuno che ci studia seriamente e fa qualche progresso c'è, tantissimi presenti giornalmente in internet, ma c'è chi non si muove se non per soldi, chi è "professionista", chi proprio non gli importa divulgare e sta solo per leggere i commenti degli altri, chi ne parla solo in privato durante una mangiata, ma penso ci siano anche tanti che sul serio non hanno tempo e infatti li si sente di rado, e comunque esiste ancora, ma sono molto pochi, che ha capito che solo unendo le forze si può arrivare a qualcosa di decente come fanno nel resto del mondo.

Comunque, tornando in tema, tempo fa ebbi un'esigenza simile, dovevo leggere il valore della bemf dei motori cc per usarlo a mo di dinamo tachimetrica, il segnale era parecchio sporco e andava filtrato. Da una discussione con Guido (forse l'unico divulgatore e sperimentatore serio in Italia) e altri amici, saltò poi fuori che la soluzione più veloce ed efficace era la semplice media tra più letture, anche perchè io avevo da leggere ben 4 ADC e sarebbe stato sicuramente troppo dura avere 4 kalman. Trovai in internet anche alcuni algoritmi che implementavano dei filtri passa basso, ma alla fin fine cambiava solo l'approccio, più complicato e pesante, ma non il risultato.

Il mio segnale era paurosamente sporco, ad occhio quasi casuale prima della pulizia, ma ottenni grossi risultati facendo una sequenza di 20 letture con l'adc veloce del 18F, ordinando il vettore per valori e poi eliminando la prima e l'ultima porzione della scala e mediando i valori restanti. Il numero di letture da scartare lo scelsi dopo aver visionato ad occhio molte sequenze e capito come si distribuiva l'errore.
In questo modo i valori in uscita erano molto stabili e attendibili e il pic non aveva alcun problema.
Anche il tempo macchina per eseguire ben 4 di queste procedure non era tantissimo e mi restava anche il tempo per eseguire i 4 pid e le routine per la ricezione seriale.

Io proverei, le righe da scrivere non sono tante e i risultati li vedrai sicuramente, poi certo valuta tu se è sufficiente per quel che ti serve o no.

Facci sapere, ciao.
__________________
Visita: Cheap-hack
Rispondi citando
  #3  
Vecchio 04-08-2010, 16.25.56
Globe Globe non è collegato
Robottaro senior
 
Data registrazione: 22-05-2005
Messaggi: 40
Potenza reputazione: 66
Globe E' un faro della comunità
Predefinito

Citazione:
Orginalmente inviato da gyppe Visualizza messaggio
Io proverei, le righe da scrivere non sono tante e i risultati li vedrai sicuramente, poi certo valuta tu se è sufficiente per quel che ti serve o no.
Ciao Gyppe,
innanzitutto ti ringrazio per l'unica risposta che ho ricevuto dal forum

Ovviamente anche io avevo pensato in prima approssimazione a fare una media mobile sulle ultime letture ma il problema è che un evento "significativo" propagherà i suoi effetti con un ritardo proporzionale al numero di elementi presenti nella media e questo è grave in quanto, siccome sto realizzando il tutto per pilotare un quadrotor, un ritardo nel controllo porterebbe a conseguenze catastrofiche come puoi ben immaginare

I filtri invece, in generale tutti ma in particolare Kalman, dovrebbero pulire il segnale senza però ritardarlo e per me questa caratteristica è fondamentale.

Avevo pensato anche all'implementazione di un filtro passa basso sui dati della conversione adc, però come insegna Astrobeed bisogna sovracampionare e di molto... e col pic non ci riesco in quanto la banda dell'acceleromentro è circa 350Hz e io non riesco a campionare molto più veloce di così...

Boh! sono a corto di idee
Rispondi citando
  #4  
Vecchio 04-08-2010, 17.42.11
gyppe gyppe non è collegato
Robottaro sostenitore
 
Data registrazione: 24-03-2009
Residenza: sardegna
Età : 38
Messaggi: 1,250
Potenza reputazione: 91
gyppe La sua reputazione è oltre la sua famagyppe La sua reputazione è oltre la sua fama
Predefinito

Uhm vero, non avevo considerato questo aspetto. Il problema è che almeno io ho trovato pochissime informazioni su questo filtro, e i pochi algoritmi che ho trovato erano un listato lunghissimo di codice sicuramente pesante da eseguire, bisognava poi modellizzare il sistema usato e anche li non è mica semplice, così alla fine ho mollato.

Considera comunque che un pid su un motore ha bisogno di un aggiornamento sicuramente più rapido di quello per correggere la posizione di un velivolo, sopratutto un quadricottero che è di suo molto più stabile di un elicottero normale. Io per qualche tempo ho usato un walkera da due soldi, famosissimo per essere il più instabile del mondo, eppure un essere umano anche poco allenato come me dopo qualche giorno riusciva a tenerlo perfettamente in hovering, direi che si tratta di aggiornare la posizione forse ogni mezzo secondo, al massimo ogni 1/3 che è il tempo minimo di risposta dei riflessi umani, mentre il mio pid lo aggiornavo se ricordo bene ogni 10ms.
Poi anche pensa che un accelerometro, almeno quelli che ho visto io non hanno altissime velocità di aggiornamento, e conta ancora che l'adc di un 4431 è di ben 200 ksps mica poco, quindi in un terzo di secondo, mettiamo anche 100 ms, hai tutto il tempo del mondo per fare anche qualche centinaio di letture, ordinare il vettore, mediare e mandare in pasto al programma di navigazione. E poi esistono anche pic con adc da 1 Msps, ma certo a quel punto si parla di dspic e certo sarebbe meglio sfruttarlo a pieno facendoci un filtro avanzato.

Il problema è che almeno io ho trovato pochissime informazioni pratiche e alla fine ho rinunciato, se tu trovi qualcosa e riesci facci sapere mi raccomando. Ciao
__________________
Visita: Cheap-hack
Rispondi citando
  #5  
Vecchio 04-04-2011, 15.46.56
Roccheggiando Roccheggiando non è collegato
Nuovo robottaro
 
Data registrazione: 22-09-2010
Residenza: Lariano
Messaggi: 12
Potenza reputazione: 0
Roccheggiando E' per ora ancora un mistero
Predefinito

Ho letto ora la discussione, e visto che può essere d'aiuto a molti, dico anche la mia.

Per la conoscenza del modello nello spazio di stato, quindi le matrici A,B,C,D bisogna descrivere il sistema attraverso equazioni differenziali o alle differenze (si può passare facilmente da l'una all'altra), acquisendo cosi un modello matematico del sistema dinamico. Infine ricondurre tali equazioni che definiscono una descrizione del Modello a delle matrici che definiscono un Sistema, appunto le matrici A,B,C,D.
Questo metodo è abbastanza laborioso, ma è d'obbligo per controllare impianti in cui si vogliono tenere sotto controllo anche le variabili di stato di un sistema dinamico e non solo le uscite e gli ingressi. Inoltre per tale metodo è molto difficile trovare in internet informazioni.

Per processi semplici invece basta un'identificazione del processo, ed applicare al teoria della realizzazione (si trovano molte risorse online).

Un'implementazione del filtro di kalman in Matlab la trovate nel link sottostante
http://digilander.libero.it/LeoDaga/...mentazione.htm

La differenza tra i due processi è moltissima, basti vedere le dimensioni delle matrici, non è difficile arrivare ad avere una matrice A del 20-esimo ordine per sistemi mediamente complessi.
In generale per processi estremamente non lineari o con molte variabili interne è d'obbligo il primo approccio.
Il motivo è semplice, l'identificazione e la conseguente realizzazione, descrivono i modi del sistema raggiungibili ed osservabili, ossia quelle parti del processo che possono essere controllate (termine improprio ma rende l'idea) ed osservate in uscita. Mentre non descrivono tutte le altre variabili.

Esempio
Motore in DC con Motoriduttore.

Attraverso l'identificazione e la realizzazione si descrive un sistema del secondo/terzo ordine con matrici A e C 2x2/3x3 in esse però non compaiono le descrizioni dell'evoluzione del flusso magnetico interno. In generale per il controllo semplice di un motore basta la realizzazione in quanto i modi non descritti non provocano non-linearità forti. Ma non è sempre cosi.

Bene praticamente si procede in pochi passi:

-Deduzione dei parametri del modello per identificazione (algoritmo ai minimi quadrati, gradiente) o direttamente della FdT tramite FIR...
-Applicare gli algoritmi della teoria della realizzazione per determinare le A,B,C,D
-Filtro di Kalmann, nel caso anche quello esteso.

Una volta avuti i bei numerini si implementa in un micro...

Tali argomenti fanno parte della Teoria del Controllo.

Ultima modifica di Roccheggiando : 04-04-2011 alle ore 15.53.28 Motivo: Aggiunta link implementazione
Rispondi citando
  #6  
Vecchio 04-04-2011, 15.54.53
L'avatar di astrobeed
astrobeed astrobeed non è collegato
Robottaro sostenitore
 
Data registrazione: 18-03-2004
Residenza: Roma
Età : 59
Messaggi: 3,377
Potenza reputazione: 345
astrobeed La sua reputazione è oltre la sua famaastrobeed La sua reputazione è oltre la sua famaastrobeed La sua reputazione è oltre la sua famaastrobeed La sua reputazione è oltre la sua famaastrobeed La sua reputazione è oltre la sua famaastrobeed La sua reputazione è oltre la sua famaastrobeed La sua reputazione è oltre la sua famaastrobeed La sua reputazione è oltre la sua fama
Predefinito

Citazione:
Orginalmente inviato da Roccheggiando Visualizza messaggio
Ho letto ora la discussione, e visto che può essere d'aiuto a molti, dico anche la mia.
Si ma tutto questo cosa ha che vedere col filtro di Kalman che è il topic di questo thread ?
Stai parlando di cose completamente diverse.
__________________
Bye
Rispondi citando
  #7  
Vecchio 04-04-2011, 21.20.34
Roccheggiando Roccheggiando non è collegato
Nuovo robottaro
 
Data registrazione: 22-09-2010
Residenza: Lariano
Messaggi: 12
Potenza reputazione: 0
Roccheggiando E' per ora ancora un mistero
Predefinito

mi è sembrato di capire che il problema era prima di tutto trovare le matrici di sistema. Ho fatto il reply sopratutto per questo. Il filtro di kalman, trovate le matrici è abbastanza semplice da implementare. una descrizione è qui http://it.wikipedia.org/wiki/Filtro_di_Kalman per quello a tempo discreto, un tutorial invece è qui http://www.cs.cmu.edu/~biorobotics/p...man_basics.pdf ed infine del codice si trova abbastanza ovunque, nel precedente post ho dato qualcosa in matlab, ma anche nelle librerie di visione opencv ci son esempi pratici in c e c++. Anche se resto dell'idea che l'approccio teorico della deduzione del filtro in base alle matrici del sistema sia la migliore.

un esempio di codice c
http://snippets.dzone.com/posts/show/11215

dove si è posto un sistema siso, che rappresenta anche in buona misura quella di un accelerometro ad un solo asse.
In generale i valori di Q ed R rappresentano i costi del controllo e dell'entrata e sono del tutto arbitrari.

Ultima modifica di Roccheggiando : 05-04-2011 alle ore 06.48.22 Motivo: implementazione in c, correzione
Rispondi citando
  #8  
Vecchio 12-05-2011, 12.05.14
flameman flameman non è collegato
Robottaro gold
 
Data registrazione: 01-06-2008
Residenza: milano
Messaggi: 167
Potenza reputazione: 46
flameman E' per ora ancora un mistero
Predefinito

ciao
anche io sto facendo qualcosa di simile
per ora mi sto concentrando sulla IMU
dovendo depurare i segnali provenienti da accelerometri, gyro e magnetometro



ma per la meccanica cosa hai pensato ?
(e relativo modello matematico?)

Ultima modifica di flameman : 22-05-2011 alle ore 23.01.19
Rispondi citando
  #9  
Vecchio 24-03-2014, 08.43.37
el berto el berto non è collegato
Nuovo robottaro
 
Data registrazione: 13-03-2014
Residenza: Udine
Messaggi: 13
Potenza reputazione: 0
el berto E' per ora ancora un mistero
Predefinito

Ho trovato in rete alcuni esempi di realizzazione di un filtro di Kalman a un solo ingresso (generalmente viene letta una temperatura) e i conti non mi tornano: c'è una grandezza "stimata" e una "misurata".
Ma finisce sempre che la grandezza "stimata" è quella che ipotizzo io a spanne.

Quindi non mi tornano i conti: che senso ha che io stimi la temperatura di una stanza a 20°C +/-5°C e che la confronti con quella di un termometro che leggo 22°C +/-2°C?
Rispondi citando
Rispondi


Utenti attualmente attivi che stanno leggendo questa discussione: 1 (0 utenti e 1 ospiti)
 
Strumenti discussione
Modalità  visualizzazioe

Regole di scrittura
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code è Attivato
Le smilies sono Attivato
[IMG] è Attivato
Il codice HTML è Disattivato

Vai al forum

Discussioni simili
Discussione Autore discussione Forum Risposte Ultimo messaggio
Accelerometro a 3 assi per Arduino simussimus Arduino 3 04-08-2013 11.33.56
Trovare la posizione di un'oggetto con l'accelerometro andreamnt94 Arduino 17 14-08-2012 09.43.28
gyro e applicazione del filtro di kalman Giukio Elettronica 19 22-05-2011 22.52.52
Filtro di Wiener LupinIV OpenCV 9 23-12-2009 13.21.35
Interfacciare accelerometro epokh E. Analogica 5 05-09-2008 15.07.26


Tutti gli orari sono GMT. Adesso sono le: 07.22.54.


Basato su: vBulletin Versione 3.8.8
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Realizzazione siti web Cobaltica Foligno
spacer.png, 0 kB