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θ ( t - 1 ) + ⋯ + aKθ ( t - k )
θ^( 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 ) ⋮ ⋮un'ion + k + 1
⎡⎣⎢⎢⎢θ^( k )⋮θ^( k + n )⎤⎦⎥⎥⎥= ⎡⎣⎢⎢θ ( k )⋮θ ( k + n )θ ( k - 1 )⋮θ ( k + n - 1 )⋯⋯θ ( 0 )⋮θ ( n )⎤⎦⎥⎥⎡⎣⎢⎢⎢⎢un'0un'1⋮un'K⎤⎦⎥⎥⎥⎥
⎡⎣⎢⎢⎢⎢un'0un'1⋮un'K⎤⎦⎥⎥⎥⎥= ⎡⎣⎢⎢θ ( k )⋮θ ( k + n )θ ( k - 1 )⋮θ ( k + n - 1 )⋯⋯θ ( 0 )⋮θ ( 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+ a1z- 1+ . . . + aKz- k
θ¯( t )
Θ¯( z)Θ^( z)= 1un'0+ a1z- 1+ ⋯ + aKz- k
Conversione indietro nel dominio del tempo:
un'0θ¯( t ) + a1θ¯( t - 1 ) + ⋯ + aKθ¯( t - k ) = θ^( t )
θ¯( t ) = θ^( t ) - a1θ¯( t - 1 ) - ⋯ - aKθ¯( t - k )un'0
θ¯
θ¯
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⃗ (t−1)+Bu⃗ (t−1)y⃗ (t)=Cx⃗ (t)
x⃗ (t)=⎡⎣⎢⎢⎢⎢θ(t)θ(t−1)⋯θ(t−k)⎤⎦⎥⎥⎥⎥=⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢A110⋮00A201⋮00⋯⋯⋯⋯⋯000⋮10000⋮01000⋮00⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥x⃗ (t−1)+⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢B0B10⋮00⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥u⃗ (t−1)
y⃗ (t)=[θ^(t)]=⎡⎣⎢⎢⎢⎢a0a1⋮ak⎤⎦⎥⎥⎥⎥x⃗ (t)
u⃗ (t−1)A0A1B0B1BA
QoRo
QcRcQc=⎡⎣⎢⎢⎢⎢10⋮000⋮000⋮0⋯⋯⋯00⋮0⎤⎦⎥⎥⎥⎥Rc=[1]J=∑(x⃗ TQx⃗ +u⃗ TRu⃗ )
Quindi, basta passare attraverso l'equazione algebrica di Riccati a tempo discreto:
P=Q+AT(P−PB(R+BTPB)−1BTP)A
P
Pertanto, la tua legge di controllo può essere data da:
u⃗ (t)=−K(x⃗ (t)−x⃗ ref(t))
K=(R+BTPB)−1(BTPA)
θ¯
Qo=Q0+q2BVBTQ0QVV=Iqq→∞Qo la matrice viene disattivata, il che significa che diventa meno ottimale.
qRcQc