Anda dapat mencoba membatalkan filter. Ini dapat menghilangkan kelambatan, tetapi juga meningkatkan kebisingan frekuensi tinggi. Setelah melakukan ini, Anda dapat mencoba mengendalikan robot berdasarkan perkiraan heading yang baru. Untuk melakukan ini, Anda harus bereksperimen untuk mengetahui parameter filter low pass. Misalnya, dalam waktu yang terpisah, Anda mungkin menemukan:
di mana θ (t)adalah perkiraan pos (kompas output) pada waktut,θadalah heading aktual (ground truth) pada waktut.
θ^( t ) = a0θ ( t ) + a1θ ( t - 1 ) + ⋯ + akθ ( t - k )
θ^( t )tθt
Anda dapat menemukan parameter dengan melakukan percobaan di mana Anda mengukur kebenaran tanah menggunakan beberapa cara eksternal lainnya. Mengingat n + k + 1 sampel, Anda memiliki persamaan
ini: [ θ ( k ) ⋮ θ ( k + n ) ] = [ θ ( k ) θ ( k - 1 ) ⋯ θ ( 0 ) ⋮ ⋮Sebuahsayan + k + 1
⎡⎣⎢⎢⎢θ^( k )⋮θ^( k + n )⎤⎦⎥⎥⎥= ⎡⎣⎢⎢θ ( k )⋮θ ( k + n )θ ( k - 1 )⋮θ ( k + n - 1 )⋯⋯θ ( 0 )⋮θ ( n )⎤⎦⎥⎥⎡⎣⎢⎢⎢⎢Sebuah0Sebuah1⋮Sebuahk⎤⎦⎥⎥⎥⎥
⎡⎣⎢⎢⎢⎢Sebuah0Sebuah1⋮Sebuahk⎤⎦⎥⎥⎥⎥= ⎡⎣⎢⎢θ ( k )⋮θ ( k + n )θ ( k - 1 )⋮θ ( k + n - 1 )⋯⋯θ ( 0 )⋮θ ( n )⎤⎦⎥⎥+⎡⎣⎢⎢⎢θ^( k )⋮θ^( k + n )⎤⎦⎥⎥⎥
M.+M.k, jadi Anda mungkin hanya akan menebak. Untuk poin bonus, ini mengasumsikan bahwa noise putih dan independen, tetapi Anda dapat memutihkannya terlebih dahulu untuk menghilangkan bias, dan karenanya meningkatkan estimasi Anda dari parameter.
Anda dapat mengonversikan ini ke fungsi transfer (juga dikenal sebagai Z-transform dalam domain waktu diskrit):
Θ^( z)Θ ( z)= a0+ a1z- 1+ . . . + akz- k
θ¯( t )
Θ¯( z)Θ^( z)= 1Sebuah0+ a1z- 1+ ⋯ + akz- k
Konversi kembali ke domain waktu:
Sebuah0θ¯( t ) + a1θ¯( t - 1 ) + ⋯ + akθ¯( t - k ) = θ^( t )
θ¯( t ) = θ^( t ) - a1θ¯( t - 1 ) - ⋯ - akθ¯( t - k )Sebuah0
θ¯
θ¯
Solusi di atas masih bukan cara terbaik. Perkiraan bising mungkin tidak terlalu berguna. Jika kita menempatkan ini dalam persamaan ruang keadaan, kita dapat merancang filter Kalman, dan pengontrol umpan balik keadaan penuh menggunakan LQR (regulator kuadratik linier). Kombinasi filter Kalman dan pengontrol LQR juga dikenal sebagai pengontrol LQG (linear quadratic gaussian), dan menggunakan pemulihan loop-transfer untuk mendapatkan pengontrol yang baik.
Untuk melakukan ini, buatlah persamaan ruang-ruang (waktu diskrit):
x⃗ ( t ) = A x⃗ ( t - 1 ) + B u⃗ ( t - 1 )y⃗ ( t ) = Cx⃗ ( t )
atau:
x⃗ ( t ) = ⎡⎣⎢⎢⎢⎢θ ( t )θ ( t - 1 )⋯θ ( t - k )⎤⎦⎥⎥⎥⎥= ⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢SEBUAH110⋮00SEBUAH201⋮00⋯⋯⋯⋯⋯000⋮10000⋮01000⋮00⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥x⃗ ( t - 1 ) + ⎡⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢B0B10⋮00⎤⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥kamu⃗ ( t - 1 )
y⃗ ( t ) = [ θ^( t )] = ⎡⎣⎢⎢⎢⎢Sebuah0Sebuah1⋮Sebuahk⎤⎦⎥⎥⎥⎥x⃗ ( t )
kamu⃗ ( t - 1 )SEBUAH0SEBUAH1B0B1BSEBUAH
QHaiRHai
QcRcQc=⎡⎣⎢⎢⎢⎢10⋮000⋮000⋮0⋯⋯⋯00⋮0⎤⎦⎥⎥⎥⎥Rc=[1]J=∑(x⃗ TQx⃗ +u⃗ TRu⃗ )
Kemudian, Anda hanya memasukkannya melalui persamaan Riccati aljabar waktu diskrit:
P=Q+AT(P−PB(R+BTPB)−1BTP)A
P
Dengan demikian, hukum kontrol Anda dapat diberikan oleh:
u⃗ (t)=−K(x⃗ (t)−x⃗ ref(t))
K=(R+BTPB)−1(BTPA)
θ¯
Untuk memperbaiki ini, kami menggunakan Loop transfer teknik Recovery, di mana Anda menyesuaikan filter Kalman, dan sebagai gantinya memilih baru Qo=Q0+q2BVBTQ0QVV=Iqq→∞Qo Matriks menjadi tidak disetel, yang artinya menjadi kurang optimal.
qRcQc
Lang adalah jawaban sederhana. Saya selalu mendengar, lang untuk pengukuran pendek, kompas untuk waktu yang lama. Dan secara realistis secangkir kallman menyaring di antara keduanya sebagian besar waktu. Harga papan gyro / acc 6DOF kurang dari $ 20 hari ini, terlalu murah untuk tidak menggunakannya.
Pada suatu waktu, saya bekerja melalui filter Kallman orang lain . dan membuatnya bekerja. Filter kallman sebenarnya lebih merupakan pendekatan, bukan implementasi yang tepat, dan dalam kasus gyro, hasil akhirnya tidak perlu menggunakan matriks matematika. Itu membuat kode jauh lebih sederhana.
sumber