Pusula gecikmesi (hıza bağlı histerezis) ile başa çıkmak için yöntemler nelerdir?


12

İz mesafesi için düşük hassasiyetli tekerlek kodlayıcıları ve istikameti belirlemek için elektronik bir pusula ile lastik sırtlı bir robotum var. Pusula, robot hızlı bir şekilde döndüğünde, örneğin yeni istikametine işaret etmek için yerinde bir dönüş noktasına ulaştıktan sonra önemli (> 1 saniye) gecikmeye sahiptir.

Gecikmenin üstesinden gelmenin yolları nelerdir? Bir sürü ölçüm alabilir ve pusula tepkisini modelleyebilir düşünürdüm. Ancak, orana bağlı olduğu ve anlık oranı bilmediğim için bu sorunlu görünüyor.

Basit ama yavaş bir yaklaşım olarak, robot kabaca doğru yönde gösterilene kadar dönüyor, sonra doğru yolu gösterene kadar kısa ölçüm duraklamaları ile çok küçük artımlı dönüşler yapıyorum. Bununla başa çıkmanın başka yolları var mı?

Yanıtlar:


12

Pusuladaki gecikme, yüksek frekanslı gürültüyü bastırmak için düşük geçişli bir filtreden kaynaklanmaktadır.

  • Daha az gürültüye ve dolayısıyla daha az gecikmeye sahip daha pahalı manyetometreler vardır.
  • Doğruluğu artırmak için bir jiroskop kullanmak da mümkündür. Aslında, Ataletsel Ölçüm Birimleri (IMU'lar) bunu yapar. Bu bir Kalman filtresi kullanılarak gerçekleştirilebilir. Hassasiyeti artırmak gecikmeyi azaltmaya yardımcı olur, çünkü artan doğruluk gürültüyü bastırmak için düşük geçişli filtreye bağımlılığı azaltır. Kalman filtresi, manyetometreden gelen verileri ve ayrıca jiroskopu (pozisyondaki değişiklik oranını ölçer) birleştirir.

Mevcut pusulanıza bağlı kalırsanız, iki olası çözüm vardır (Uyarı, bu gittikçe daha da gelişir, ancak seçenek 1, çok fazla iş yapmadan çoğu insan için erişilebilir olmalıdır).

  1. Filtreyi iptal etmeyi deneyebilirsiniz. Bu gecikmeyi kaldırabilir, ancak aynı zamanda yüksek frekanslı gürültüyü artırır. Bunu yaptıktan sonra yeni rota tahminine göre robotu kontrol etmeye çalışabilirsiniz. Bunu yapmak için, düşük geçiş filtresi parametrelerini çözmeyi denemelisiniz. Örneğin, ayrık zamanda şunları bulabilirsiniz:

    θ (t)süresi tahmin başlık (pusula çıkışıdır)t,θtzamanındaki gerçek istikamettir (temel gerçek).

    θ^(t)=bir0θ(t)+bir1θ(t-1)++birkθ(t-k)
    θ^(t)tθt

    parametrelerini , başka bir dış yol kullanarak temel gerçeği ölçtüğünüz bir deney yaparak bulabilirsiniz . Verilen n + k + 1 örnekler, bu denklem vardır: [ θ ( k ) θ ( k + n ) ] = [ θ ( k ) θ ( k - 1 ) θ ( 0 ) birbenn+k+1

    [θ^(k)θ^(k+n)]=[θ(k)θ(k-1)θ(0)θ(k+n)θ(k+n-1)θ(n)][bir0bir1birk]

    Ve şunu bularak çözebilirsiniz:

    [bir0bir1birk]=[θ(k)θ(k-1)θ(0)θ(k+n)θ(k+n-1)θ(n)]+[θ^(k)θ^(k+n)]
    M+Mk, muhtemelen tahmin edersiniz. Bonus puanlar için, bu, gürültünün beyaz ve bağımsız olduğunu varsayar, ancak önce önyargıyı gidermek ve böylece parametreler tahmininizi geliştirmek için beyazlatabilirsiniz.

    Bunu bir transfer işlevine dönüştürebilirsiniz (ayrık zaman etki alanında Z dönüşümü olarak da bilinir):

    Θ^(z)Θ(z)=bir0+bir1z-1+...+birkz-k

    θ¯(t)

    Θ¯(z)Θ^(z)=1bir0+bir1z-1++birkz-k

    Zaman alanına geri dönüştürme:

    bir0θ¯(t)+bir1θ¯(t-1)++birkθ¯(t-k)=θ^(t)

    θ¯(t)=θ^(t)-bir1θ¯(t-1)--birkθ¯(t-k)bir0

    θ¯

    θ¯

  2. Yukarıdaki çözüm hala en iyi yol değildir. Gürültülü tahmin çok yararlı olmayabilir. Bunu bir durum uzay denklemine koyarsak, bir Kalman filtresi ve LQR (doğrusal kuadratik regülatör) kullanarak bir tam durum geri besleme kontrolörü tasarlayabiliriz. Bir Kalman filtresi ve LQR kontrolörünün kombinasyonu aynı zamanda bir LQG kontrolörü (doğrusal kuadratik gaussian) olarak bilinir ve iyi bir kontrolör elde etmek için döngü transfer kurtarmayı kullanır.

    Bunu yapmak için, (ayrık zamanlı) durum uzayı denklemlerini bulun:

    x(t)=birx(t-1)+Bu(t-1)y(t)=Cx(t)

    x(t)=[θ(t)θ(t-1)θ(t-k)]=[bir1bir200010000010000010000010]x(t-1)+[B0B1000]u(t-1)

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

    u(t-1)bir0bir1B0B1Bbir

    SÖR,Ö

    ScR,cSc=[100000000000]R,c=[1]J=Σ(xTSx+uTR,u)

    Sonra, onu ayrık zaman cebirsel Riccati denklemine koydunuz:

    P=S+birT(P-PB(R,+BTPB)-1BTP)bir

    P

    Böylece, kontrol kanunu aşağıdaki yollarla verilebilir:

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

    K=(R,+BTPB)-1(BTPbir)

    θ¯

    SÖ=S0+q2BVBTS0SVV=benqqSÖ matrisin ayarı kaldırılır, yani daha az optimal olur.

    qR,cSc

Bu yazıdaki kavramlar oldukça ilerlemiştir, ancak Riccati denklemi gibi şeyleri çözmeniz gerekiyorsa, bunu yapmak için MATLAB veya başka bir yazılım kullanabilirsiniz. Kalman filtresini zaten uygulayan kütüphaneler de olabilir (yine MATLAB'ın bunu yaptığını düşünüyorum).

Gömülü bir uygulama için, muhtemelen bir C uygulaması olmasına rağmen, Kalman filtresini kendiniz uygulamanız gerekebilir.


Mükemmel ve derinlemesine cevap için teşekkürler. İlk çözümünüzün özünü takip ediyorum ve eminim bunun üstesinden gelebilirim. İkincisi, dediğin gibi, daha zorlayıcı ve hepsini takip edip edemeyeceğimi görmek için çalışmalıyım.
ViennaMike

4

Bir jiroskop basit cevaptır. Her zaman duydum, kısa ölçümler için gyro, uzun pusula. Ve gerçekçi olarak çoğu zaman arasında bir fincan kallman filtresi. 6DOF gyro / acc panosunun fiyatı bugünlerde 20 $ 'dan daha az, bir tane kullanmak için çok ucuz.

Bir keresinde, başkasının Kallman filtresinde çalıştım . ve işe yaradı. Bir kallman filtresi aslında tam bir uygulama değil, daha çok bir yaklaşımdır ve jiroskop durumunda, sonuçta matris matrisi kullanılmasına gerek yoktur. Çok daha basit bir kod sağlar.

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.