Apa metode untuk menangani kompas lag (histeresis tergantung tingkat)?

12

Saya punya robot yang digerakkan tapak, dengan encoders roda presisi rendah untuk melacak jarak dan kompas elektronik untuk menentukan heading. Kompas memiliki kelambatan yang signifikan (> 1 detik) ketika robot berputar dengan cepat, misalnya setelah mencapai titik arah - berputar di tempatnya untuk menunjuk ke pos yang baru.

Apa cara untuk mengatasi lag? Saya akan berpikir seseorang dapat mengambil banyak pengukuran dan memodelkan respons kompas. Namun, ini tampaknya bermasalah karena itu tergantung pada tingkat dan saya tidak tahu tingkat sesaat.

Sebagai pendekatan sederhana tapi lambat, saya memiliki putaran robot sampai itu sangat kasar menunjuk ke arah yang benar, kemudian membuat putaran tambahan yang sangat kecil dengan jeda pengukuran singkat sampai menunjuk ke arah yang benar. Apakah ada cara lain untuk mengatasi ini?

ViennaMike
sumber

Jawaban:

12

Kelambatan dalam kompas adalah karena filter low-pass, untuk menekan noise frekuensi tinggi.

  • Ada magnetometer lebih mahal yang memiliki lebih sedikit noise, dan karenanya, lebih sedikit lag.
  • Dimungkinkan juga untuk menggunakan giroskop untuk meningkatkan akurasi. Faktanya, inilah yang dilakukan Unit Pengukuran Inersia (IMU). Ini dapat dilakukan dengan menggunakan filter Kalman. Meningkatkan akurasi membantu mengurangi lag, karena peningkatan akurasi mengurangi ketergantungan pada low pass filter untuk menekan noise. Filter Kalman memadukan data dari magnetometer, dan juga giroskop (yang mengukur laju perubahan pos).

Jika Anda tetap menggunakan kompas Anda saat ini, ada dua solusi yang mungkin (Peringatan, ini semakin maju, tetapi opsi 1 harus dapat diakses oleh kebanyakan orang tanpa terlalu banyak pekerjaan).

  1. 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θ(t1)++akθ(tk)
    θ^(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 ) ain+k+1

    [θ^(k)θ^(k+n)]=[θ(k)θ(k1)θ(0)θ(k+n)θ(k+n1)θ(n)][a0a1ak]

    [a0a1ak]=[θ(k)θ(k1)θ(0)θ(k+n)θ(k+n1)θ(n)]+[θ^(k)θ^(k+n)]
    M+Mk, 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+a1z1+...+akzk

    θ¯(t)

    Θ¯(z)Θ^(z)=1a0+a1z1++akzk

    Konversi kembali ke domain waktu:

    a0θ¯(t)+a1θ¯(t1)++akθ¯(tk)=θ^(t)

    θ¯(t)=θ^(t)a1θ¯(t1)akθ¯(tk)a0

    θ¯

    θ¯

  2. 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)=Ax(t1)+Bu(t1)y(t)=Cx(t)

    atau:

    x(t)=[θ(t)θ(t1)θ(tk)]=[A1A200010000010000010000010]x(t1)+[B0B1000]u(t1)

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

    u(t1)A0A1B0B1BA

    QoRo

    QcRcQc=[100000000000]Rc=[1]J=(xTQx+uTRu)

    Kemudian, Anda hanya memasukkannya melalui persamaan Riccati aljabar waktu diskrit:

    P=Q+AT(PPB(R+BTPB)1BTP)A

    P

    Dengan demikian, hukum kontrol Anda dapat diberikan oleh:

    u(t)=K(x(t)xref(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=IqqQo Matriks menjadi tidak disetel, yang artinya menjadi kurang optimal.

    qRcQc

Konsep dalam posting ini memang cukup maju, tetapi jika Anda perlu menyelesaikan hal-hal seperti persamaan Riccati, Anda dapat menggunakan MATLAB atau perangkat lunak lain untuk melakukan ini. Mungkin juga ada perpustakaan yang sudah menerapkan filter Kalman (sekali lagi, saya percaya MATLAB juga melakukan ini).

Untuk aplikasi yang disematkan, Anda mungkin perlu menerapkan filter Kalman sendiri, meskipun mungkin ada implementasi C.

ronalchn
sumber
Terima kasih atas jawaban Anda yang luar biasa dan mendalam. Saya mengikuti inti dari solusi pertama Anda dan saya yakin saya bisa mengatasinya. Yang kedua, seperti yang Anda katakan, lebih menantang dan saya harus bekerja untuk melihat apakah saya bisa mengikuti semuanya.
ViennaMike
4

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.

Spiked3
sumber