Filter Kalman untuk posisi dan kecepatan: memperkenalkan perkiraan kecepatan

24

Terima kasih kepada semua orang yang mengirim komentar / jawaban untuk pertanyaan saya kemarin ( Menerapkan filter Kalman untuk posisi, kecepatan, percepatan ). Saya telah melihat apa yang direkomendasikan, dan khususnya pada (a) contoh wikipedia tentang posisi dan kecepatan satu dimensi dan juga situs web lain yang menganggap hal serupa .

Perbarui 26-Apr-2013 : pertanyaan asli di sini berisi beberapa kesalahan, terkait dengan fakta bahwa saya belum memahami contoh wikipedia dengan benar tentang posisi dan kecepatan satu dimensi . Dengan pemahaman saya yang lebih baik tentang apa yang terjadi, saya sekarang telah menyusun ulang pertanyaan dan memfokuskannya lebih erat.

Kedua contoh yang saya rujuk dalam paragraf pengantar di atas menganggap bahwa hanya posisi yang diukur. Namun, contoh baik memiliki jenis perhitungan (xk-xk-1)/dt untuk kecepatan. Sebagai contoh, misalnya Wikipedia menentukan H matriks sebagai H=[1   0] , yang berarti bahwa hanya posisi input. Fokus pada contoh Wikipedia, negara vektor xk dari filter Kalman berisi posisi xk dan kecepatan x˙k , yaitu

xk=(xkx˙k)

Misalkan pengukuran posisi pada waktu yaitu x k . Kemudian jika posisi dan kecepatan pada saat k - 1 adalah x k - 1 dan ˙ x k - 1 , dan jika suatu adalah percepatan konstan yang berlaku dalam selang waktu k - 1 untuk k , dari pengukuran x itu mungkin untuk menyimpulkan nilai untuk sebuah menggunakan rumuskx^kk-1xk-1x˙k-1Sebuahk-1kx^Sebuah

x^k=xk-1+x˙k-1dt+12Sebuahdt2

Ini berarti bahwa pada saat , pengukuran ˙ x k kecepatan yang diberikan olehkx˙^k

x˙^k=x˙k-1+Sebuahdt=2x^k-xk-1dt-x˙k-1

Semua jumlah di sisi kanan persamaan itu , x k - 1 dan ˙ x k - 1 ) biasanya didistribusikan variabel acak dengan cara yang dikenal dan standar deviasi, sehingga R matrix untuk vektor pengukuranx^kxk-1x˙k-1R

x^k=(x^kx˙^k)

dapat dihitung. Apakah ini cara yang valid untuk memperkenalkan perkiraan kecepatan ke dalam proses?

Secara stokastik
sumber
2
Saya tidak melihat semua perhitungan Anda. Namun, berbicara tentang contoh Wikipedia, Anda tampaknya agak bingung pada strukturnya. Anda benar karena hanya posisi yang diukur. Namun, model yang disebut "kecepatan konstan" digunakan. Ini berarti bahwa kecepatan dianggap konstan dalam matriks transisi keadaan.
Jason R
3
Perubahan kecepatan dimodelkan menggunakan matriks derau proses. Oleh karena itu, Anda secara inheren mengasumsikan bahwa kecepatan akan berubah secara acak dengan beberapa kovarian tertentu. Cukup mengejutkan, ini sering berhasil. Adalah umum untuk menggunakan derau proses satu turunan di atas turunan variabel tertinggi Anda dengan cara ini. Misalnya, jika Anda memasukkan akselerasi dalam model Anda, maka Anda mungkin memiliki komponen brengsek acak yang disertakan dalam kebisingan proses Anda.
Jason R
@JasonR dengan model wikipedia (dengan asumsi nol kovarians awal antara posisi dan kecepatan), perkiraan kecepatan selalu merupakan nilai awal (seperti yang Anda katakan, model "kecepatan konstan"). Namun, varians dari kecepatan tumbuh monoton melalui proses noise, dan tidak ada pengukuran yang dapat menguranginya. Apa keuntungan dari model ini dibandingkan model yang hanya memodelkan posisi dan mengasumsikan kecepatan konstan?
Stochastically
2
Varian dari estimasi kecepatan seharusnya tidak meningkat secara monoton. Gangguan proses hanya memperkenalkan komponen stokastik ke persamaan transisi keadaan, memungkinkan Anda untuk mengekspresikan beberapa ketidakpastian pada bagaimana keadaan sistem akan berevolusi dari langkah waktu ke langkah waktu. Jika Anda tidak menyertakan kebisingan proses, maka filter Anda akan benar-benar menghasilkan kecepatan konstan. Itu mungkin bukan yang Anda inginkan.
Jason R
Nah @JasonR, jika Anda melihat model wikipedia, Anda akan melihat bahwa varians kecepatan yang meningkat secara monoton adalah apa yang diberikannya kepada Anda!
Stochastically

Jawaban:

24

Apakah ini cara yang valid untuk memperkenalkan perkiraan kecepatan ke dalam proses?

Jika Anda memilih negara Anda dengan tepat, maka perkiraan kecepatan datang "gratis". Lihat derivasi dari model sinyal di bawah ini (untuk kasus 1-D sederhana yang telah kita lihat).

Model Sinyal, Ambil 2

Jadi, kita benar-benar perlu menyepakati model sinyal sebelum kita bisa bergerak maju. Dari mengedit Anda, sepertinya model Anda dari posisi, , adalah:xk

xk+1=xk+x˙kΔt+12Sebuah(Δt)2x˙k+1=x˙k+SebuahΔt

Jika keadaan kita seperti sebelumnya: maka persamaan pembaruan status adalah hanya: xk+1=( 1 Δ t 0 1 )xk+( ( Δ t ) 2

xk=(xkx˙k)
mana sekarang kamisebuahkadalah percepatan terdistribusi normal.
xk+1=(1  Δt0  1)xk+((Δt)22Δt)Sebuahk
Sebuahk

Itu memberikan matriks yang berbeda dari versi sebelumnya, tetapi matriks F dan H harus sama.GFH


Jika saya menerapkan ini dalam scilab(maaf, tidak ada akses ke matlab), sepertinya:

// Signal Model
DeltaT = 0.1;
F = [1 DeltaT; 0 1];
G = [DeltaT^2/2; DeltaT];
H = [1 0];

x0 = [0;0];
sigma_a = 0.1;

Q = sigma_a^2;
R = 0.1;

N = 1000;

a = rand(1,N,"normal")*sigma_a;

x_truth(:,1) = x0;
for t=1:N,
    x_truth(:,t+1) = F*x_truth(:,t) + G*a(t);
    y(t) = H*x_truth(:,t) + rand(1,1,"normal")*sqrt(R);
end

Lalu, saya bisa menerapkan persamaan filter Kalman untuk ini (pengukuran berisik).y

// Kalman Filter
p0 = 100*eye(2,2);

xx(:,1) = x0;
pp = p0;
pp_norm(1) = norm(pp);
for t=1:N,
    [x1,p1,x,p] = kalm(y(t),xx(:,t),pp,F,G,H,Q,R);
    xx(:,t+1) = x1;
    pp = p1;
    pp_norm(t+1) = norm(pp);
end

Jadi kami memiliki pengukuran bising kami , dan kami telah menerapkan filter Kalman untuk mereka dan menggunakan model sinyal yang sama untuk menghasilkan y seperti yang kami lakukan untuk menerapkan filter Kalman (asumsi yang cukup besar, kadang-kadang!).yy

Kemudian plot berikut menunjukkan hasilnya.

Plot 1 : dan x k terhadap waktu.yxk

masukkan deskripsi gambar di sini

Plot 2 : Tampilan yang diperbesar dari beberapa sampel pertama:

masukkan deskripsi gambar di sini

Plot 3 : Sesuatu yang tidak pernah Anda dapatkan dalam kehidupan nyata, posisi sebenarnya vs perkiraan posisi tersebut.

masukkan deskripsi gambar di sini

Plot 4 : Sesuatu yang Anda juga tidak pernah dapatkan dalam kehidupan nyata, kecepatan sebenarnya vs perkiraan kecepatan.

masukkan deskripsi gambar di sini

Plot 5 : Norma matriks kovarian negara (sesuatu yang harus selalu Anda pantau dalam kehidupan nyata!). Perhatikan bahwa sangat cepat berubah dari nilai awalnya yang sangat besar ke sesuatu yang sangat kecil, jadi saya hanya menunjukkan beberapa sampel pertama.

masukkan deskripsi gambar di sini

Plot 6 : Plot kesalahan antara posisi sebenarnya dan kecepatan dan perkiraan mereka.

masukkan deskripsi gambar di sini

zk+1=xk+1Pk=0Pk+1-=QKk+1

Kk+1=(12/dt)

Ini berarti bahwa prosedur pembaruan Kalman menghasilkan

x^k+1=Fk+1xk+Kk+1(zk+1-Hk+1Fk+1xk)=(xk+x˙kdtx˙k)+(12/dt)(xk+1-(xk+x˙kdt))=(xk+12(xk+1-xk)/dt-x˙k)

Seperti yang Anda lihat, nilai untuk kecepatan diberikan dengan tepat formula yang Anda usulkan untuk digunakan untuk perkiraan kecepatan. Jadi meskipun Anda tidak bisa melihat perhitungan apa pun(xk-xk-1)/dt untuk kecepatan, sebenarnya itu tersembunyi di sana.

Peter K.
sumber
Terima kasih atas semua bantuan Anda sejauh ini. Pertanyaan awal saya memang mengandung beberapa kesalahpahaman, jadi saya sudah mencoba memfokuskan kembali dan dengan upaya untuk menjawab pertanyaan Anda tentang z_k.
Stochastically
1
terima kasih vm untuk semua upaya Anda :-). Pekerjaan Anda mendorong saya untuk melakukan sedikit matematika yang telah saya tempelkan pada jawaban Anda, harap Anda tidak keberatan. Bagaimanapun, saya sekarang 100% yakin bahwa metode standar itu baik, karena saya bisa melihat rumus di sana untuk kecepatan setelah semua. Terima kasih lagi
Stochastically
Senang bisa membantu! Tidak ada masalah dengan menambahkan jawaban.
Peter K.