Konum ve hız için Kalman filtresi: hız tahminlerini tanıtmak


24

Dün sorguma yorum yazan / cevaplayan herkese teşekkürler ( Konum, hız, ivme için bir Kalman filtresi uygulamak ). Ne önerildiğine ve özellikle (a) tek boyutlu konum ve hızdaki wikipedia örneğine ve benzer bir şey düşünen başka bir web sitesine bakıyorum .

Güncelleme 26-Nisan-2013 : Buradaki asıl soru , wikipedia örneğini bir boyutlu pozisyon ve hızda tam olarak anlamadığım gerçeğiyle ilgili bazı hatalar içeriyordu . Neler olup bittiğini anlama konusundaki anlayışım sayesinde, şimdi soruyu yeniden tasarladım ve daha sıkı bir şekilde odakladım.

Yukarıdaki giriş paragrafında bahsettiğim her iki örnek de, bunun yalnızca ölçülen konum olduğunu varsaymaktadır. Bununla birlikte, hiçbir örnek hız için herhangi bir hesaplama . Örneğin, Wikipedia örneği, matrisini olarak belirtir, bu, yalnızca konumun giriş olduğu anlamına gelir. Wikipedia örneğine odaklanarak , Kalman filtresinin durum vektörü , konumunu ve speed konumunu , yani, H , H = [ 1 0 ] x k x k ˙ x k(xkxk1)/dtHH=[1   0]xkxkx˙k

xk=(xkx˙k)

Zaman pozisyon ölçümü varsayalım olan . O zaman sırasındaki konum ve hız ve ise ve , ila arasındaki aralıkta uygulanan sabit bir ivme ise , ölçümünden , aşağıdaki formülü kullanmak için değer çıkarmak mümkündür.x k k - 1 x k - 1 ˙ x k - 1 bir k - 1 k x birkx^kk1xk1x˙k1ak1kx^a

x^k=xk1+x˙k1dt+12adt2

Bu kez de ima , bir ölçüm hızının verilir˙ x kkx˙^k

x˙^k=x˙k1+adt=2x^kxk1dtx˙k1

Bu denklemin sağ tarafındaki tüm miktarlar (yani, , ve ) normalde bilinen yollara ve standart sapmalara sahip rastgele değişkenler dağıtılır. , böylece ölçüm vektörü için matrisix^kxk1x˙k1R

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

hesaplanabilir. Bu, hız tahminlerini sürece dahil etmenin geçerli bir yolu mu?


2
Bütün hesaplarına bakmadım. Bununla birlikte, Wikipedia örneğinden bahsedersek, yapısı üzerinde biraz kafanız karışmış gibi görünmektedir. Sadece pozisyon ölçülürken haklısın. Bununla birlikte, "sabit hız" adı verilen bir model kullanılır. Bu, durum geçiş matrisinde hızın sabit olduğu anlamına gelir.
Jason R,

3
Hızdaki değişiklikler proses gürültü matrisi kullanılarak modellenmiştir. Bu nedenle, doğal olarak, hızın belirli bir kovaryansla rasgele değişeceğini varsayıyorsunuz. Şaşırtıcı bir şekilde, bu genellikle iyi çalışıyor. Bu şekilde en yüksek durum değişkenli türevinizin üzerinde bir işlem türevi kullanmak yaygındır. Örneğin, modelinize ivme eklerseniz, işlem gürültünüze dahil olan rastgele bir sarsıntı bileşeniniz olabilir.
Jason R,

Wikipedia modelinde @JasonR (konum ve hız arasında sıfır başlangıç ​​kovaryansı varsayarsak), hız tahmini her zaman başlangıç ​​değeridir (dediğiniz gibi, "sabit hız" modeli). Bununla birlikte, hızdaki varyans, işlem gürültüsü aracılığıyla monoton şekilde büyür ve bunu azaltabilecek hiçbir ölçüm yoktur. Bunun sadece pozisyon alan ve sabit bir hız belirleyen bir model üzerinde avantajı nedir?
Stokastik olarak

2
Hız tahmininin varyansı monoton şekilde artmamalıdır. İşlem gürültüsü basitçe durum geçiş denklemine stokastik bir bileşen getirerek, sistem durumunun zaman zaman adım adım adım nasıl gelişeceği konusunda bazı belirsizlikleri ifade etmenize izin verir. İşlem gürültüsünü dahil etmezseniz, filtreniz gerçekten sabit bir hız verir. Muhtemelen istediğin bu değildir.
Jason R,

@JasonR, wikipedia modeline bakarsanız, monotinik olarak artan hız farkının size verdiği şeyi göreceksiniz!
Stokastik olarak

Yanıtlar:


24

Bu, hız tahminlerini sürece dahil etmenin geçerli bir yolu mu?

Durumunuzu uygun şekilde seçerseniz, hız tahminleri "bedava" olarak gelir. Aşağıdaki sinyal modelinin türetmesine bakın (baktığımız basit 1-D durum için).

Sinyal modeli, 2 almak

Bu yüzden, bunu ilerletmeden önce bir sinyal modelinde hemfikir olmamız gerekiyor. Düzenlemenizde, konumunuzu modeline benziyor, , şudur:xk

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

: sonra durum güncelleme denklemi şöyle olur: burada normalde dağıtılmış hızlanmadır. Xk+1=( 1 Δ t 0 1 )xk+( ( Δ t ) 2

xk=(xkx˙k)
ak
xk+1=(1  Δt0  1)xk+((Δt)22Δt)ak
ak

Bu önceki sürümden farklı matrisi verir , ancak ve matrisleri aynı olmalıdır.F HGFH


Bunu uygularsam scilab(üzgünüm, matlab'a erişim yok), şöyle görünüyor:

// 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

Ardından, Kalman filtre denklemlerini bu uygulayabilirim (gürültülü ölçümler).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

Bu nedenle, gürültülü ölçümlerimizi alıyoruz ve Kalman filtresini kendilerine uyguladık ve Kalman filtresini (bazen oldukça büyük bir varsayım!) Uyguladığımız gibi üretmek için aynı sinyal modelini kullandık .yyy

Sonra aşağıdaki grafikler sonucu göstermektedir.

Plot 1 : ve karşı.x kyxk

görüntü tanımını buraya girin

Plot 2 : İlk birkaç örneğin büyütülmüş görüntüsü:

görüntü tanımını buraya girin

Arsa 3 : Asla gerçek hayatta elde edemeyeceğiniz bir şey, gerçek pozisyon, pozisyonun durum tahmini ile karşılaştırılır.

görüntü tanımını buraya girin

Grafik 4 : Gerçek hayatta asla elde edemeyeceğiniz bir şey, gerçek hız, hızın durum tahmini ile karşılaştırılır.

görüntü tanımını buraya girin

Grafik 5 : Durum kovaryansı matrisinin normu (gerçek hayatta her zaman izlemeniz gereken bir şey!). Çok hızlı bir şekilde ilk çok büyük değerinden çok küçük bir şeye gittiğini unutmayın, bu yüzden sadece ilk birkaç örneği gösterdim.

görüntü tanımını buraya girin

Grafik 6 : Gerçek konum ve hız arasındaki farkın çizimleri ve tahminleri.

görüntü tanımını buraya girin

Konum ölçümlerinin kesin olduğu durumu incelerseniz, Kalman udpate denklemlerinin HIZ pozisyonu ve hızı için kesin sonuçlar verdiğini görürsünüz. Matematiksel olarak nedenini görmek basittir. Wikipedia makalesiyle aynı gösterimi kullanarak , kesin ölçümler . Başlangıç ​​konumu ve hızın , olarak bilindiğini varsayarsanız, ve Kalman kazanç matrisi tarafından verilirzk+1=xk+1Pk=0Pk+1=QKk+1

Kk+1=(12/dt)

Bu, Kalman güncelleme prosedürünün ürettiği anlamına gelir

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

Gördüğünüz gibi, hızın değeri tam olarak hız tahmini için kullanmayı düşündüğünüz formüle göre verilmiştir. Yani hız için herhangi bir hesaplama , aslında sonuçta orada gizli.(xkxk1)/dt


Bu zamana kadarki tüm yardımların için teşekkürler. Asıl sorum bazı yanlış anlamalar içeriyordu, bu yüzden yeniden odaklamaya ve z_k hakkındaki sorunuza cevap vermeye çalıştım.
Stokastik olarak

1
tüm çabalarınız için teşekkürler vm :-). Çalışmanız beni cevabınıza çektiğim bir miktar matematik yapmaya zorladı, umarım sakıncası yoktur. Her neyse, şimdi% 100 standart yöntemin iyi olduğuna ikna oldum, çünkü sonuçta orada hız için formüller görebiliyorum. Tekrar teşekkürler
Stokastik olarak

Yardım edebilmek için sevindim! Cevabınıza ekleme ile sorun değil.
Peter K.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.