Quali sono i metodi per gestire il ritardo della bussola (isteresi dipendente dalla frequenza)?


12

Ho un robot guidato dal battistrada, con encoder a ruote a bassa precisione per il rilevamento della distanza e una bussola elettronica per determinare la direzione. La bussola presenta un ritardo significativo (> 1 secondo) quando il robot gira rapidamente, ad esempio dopo aver raggiunto un waypoint, ruotando in posizione per indicare la sua nuova rotta.

Quali sono i modi per affrontare il ritardo? Penso che si potrebbero fare molte misurazioni e modellare la risposta della bussola. Tuttavia, questo sembra problematico poiché dipende dalla frequenza e non conosco la frequenza istantanea.

Come approccio semplice ma lento, ho il robot che gira fino a quando non è puntato più o meno nella giusta direzione, quindi faccio piccole curve incrementali con brevi pause di misurazione fino a quando non è puntato nel modo giusto. Ci sono altri modi per affrontarlo?

Risposte:


12

Il ritardo nella bussola è dovuto a un filtro passa-basso, per sopprimere il rumore ad alta frequenza.

  • Esistono magnetometri più costosi che hanno meno rumore e quindi meno ritardo.
  • È inoltre possibile utilizzare un giroscopio per migliorare la precisione. In effetti, questo è ciò che fanno le unità di misurazione inerziale (IMU). Ciò può essere realizzato utilizzando un filtro Kalman. Il miglioramento della precisione aiuta a ridurre il ritardo, poiché una maggiore precisione riduce la dipendenza da un filtro passa basso per eliminare il rumore. Il filtro Kalman fonde i dati dal magnetometro e anche dal giroscopio (che misura la velocità di variazione della rotta).

Se rimani con la tua bussola attuale, ci sono due possibili soluzioni (Attenzione, questo diventa sempre più avanzato, ma l'opzione 1 dovrebbe essere accessibile alla maggior parte delle persone senza troppo lavoro).

  1. Puoi provare a cancellare il filtro. Questo può rimuovere il ritardo, ma aumenta anche il rumore ad alta frequenza. Dopo aver fatto ciò, puoi provare a controllare il robot in base alla nuova stima della direzione. Per fare ciò, è necessario sperimentare per elaborare i parametri del filtro passa basso. Ad esempio, in tempo discreto, potresti trovare:

    dove θ (t)è il titolo stimata (uscita bussola) al tempot,θè la direzione effettiva (verità di base) al momentot.

    θ^(t)=a0θ(t)+a1θ(t1)++akθ(tk)
    θ^(t)tθt

    Puoi trovare i parametri facendo un esperimento in cui misuri la verità di base usando altri mezzi esterni. Dato n + k + 1 campioni, si ha questa equazione: [ θ ( k ) θ ( k + n ) ] = [ θ ( k ) θ ( k - 1 ) θ ( 0 ) ain+k+1

    [θ^(k)θ^(k+n)]=[θ(k)θ(k1)θ(0)θ(k+n)θ(k+n1)θ(n)][a0a1ak]

    [a0a1ak]=[θ(k)θ(k1)θ(0)θ(k+n)θ(k+n1)θ(n)]+[θ^(k)θ^(k+n)]
    M+Mk, quindi probabilmente indovinerai. Per i punti bonus, questo presuppone che il rumore sia bianco e indipendente, ma è possibile imbiancarlo prima per rimuovere la distorsione, e quindi migliorare la stima dei parametri.

    Puoi convertirlo in una funzione di trasferimento (nota anche come Z-transform nel dominio del tempo discreto):

    Θ^(z)Θ(z)=a0+a1z1+...+akzk

    θ¯(t)

    Θ¯(z)Θ^(z)=1a0+a1z1++akzk

    Conversione indietro nel dominio del tempo:

    a0θ¯(t)+a1θ¯(t1)++akθ¯(tk)=θ^(t)

    θ¯(t)=θ^(t)a1θ¯(t1)akθ¯(tk)a0

    θ¯

    θ¯

  2. La soluzione di cui sopra non è ancora il modo migliore. La stima rumorosa potrebbe non essere molto utile. Se lo inseriamo in un'equazione dello spazio degli stati, possiamo progettare un filtro Kalman e un controller di feedback a stato pieno utilizzando LQR (regolatore quadratico lineare). La combinazione di un filtro Kalman e un controller LQR è anche noto come controller LQG (gaussiano quadratico lineare) e usa il recupero del trasferimento di loop per ottenere un buon controller.

    Per fare questo, crea le equazioni dello spazio degli stati (tempo discreto):

    x(t)=Ax(t1)+Bu(t1)y(t)=Cx(t)

    x(t)=[θ(t)θ(t1)θ(tk)]=[A1A200010000010000010000010]x(t1)+[B0B1000]u(t1)

    y(t)=[θ^(t)]=[a0a1ak]x(t)

    u(t1)A0A1B0B1BA

    QoRo

    QcRcQc=[100000000000]Rc=[1]J=(xTQx+uTRu)

    Quindi, basta passare attraverso l'equazione algebrica di Riccati a tempo discreto:

    P=Q+AT(PPB(R+BTPB)1BTP)A

    P

    Pertanto, la tua legge di controllo può essere data da:

    u(t)=K(x(t)xref(t))

    K=(R+BTPB)1(BTPA)

    θ¯

    Qo=Q0+q2BVBTQ0QVV=IqqQo la matrice viene disattivata, il che significa che diventa meno ottimale.

    qRcQc

I concetti in questo post diventano abbastanza avanzati, ma se devi risolvere cose come l'equazione di Riccati, puoi usare MATLAB o altri software per farlo. Potrebbero esserci anche librerie che implementano già il filtro Kalman (di nuovo, credo che anche MATLAB lo faccia).

Per un'applicazione incorporata, potrebbe essere necessario implementare da soli il filtro Kalman, sebbene sia probabilmente presente un'implementazione C.


Grazie per la risposta eccellente e approfondita. Seguo l'essenza della tua prima soluzione e sono sicuro di poterlo elaborare. Il secondo, come dici tu, è più impegnativo e dovrò lavorare per vedere se riesco a seguire tutto.
ViennaMike

4

Un giroscopio è la risposta semplice. Ho sempre sentito, giroscopio per le misurazioni brevi, bussola per il lungo. E realisticamente una tazza di filtro kallman tra i due il più delle volte. Il prezzo di una scheda giroscopio 6DOF / acc in questi giorni è inferiore a $ 20, decisamente troppo economico per non usarne uno.

Un tempo, ho lavorato attraverso il filtro Kallman di qualcun altro . e ha funzionato. Un filtro kallman è in realtà più un approccio, non un'implementazione esatta, e nel caso del giroscopio, il risultato finale non ha bisogno di usare la matrice matematica. Rende il codice molto più semplice.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.