Von Türkçe mit KI übersetzt ·
Das Vergrößern des Fensters erhöht die Verzögerung, man muss das Gegenteil tun. Ich hatte dasselbe Problem einmal, als ich mich mit Drohnen beschäftigt habe.Die Ursache der Verzögerung ist der Mittelwert selbst: Ein gleitender Mittelwert über 20 Messwerte kommt etwa 1 Sekunde verspätet an, und der Fehler wächst mit steigender Drehgeschwindigkeit. Der von Büşra Hanım erwähnte Kalibrierungsmangel erklärt außerdem den Unterschied zwischen rechts und links.Die Lösung ist die Kombination mit dem Gyroskop. Das Gyroskop erfasst die Drehung sofort, driftet aber langsam, das Magnetometer ist langsam, driftet aber nicht. Ein komplementärer Filter kombiniert beide:
// dt = 0.1 s, gz = derece/s (z ekseni jiroskop)
float a = 0.98;
heading = a * (heading + gz * dt) + (1 - a) * magHeading;
// 0/360 geçişini düzelt
float fark = magHeading - heading;
if (fark > 180) heading += 360 * (1 - a);
if (fark < -180) heading -= 360 * (1 - a);
heading = fmod(heading + 360, 360);
Falls auf der Platine kein Gyroskop vorhanden ist, ist das Hinzufügen eines MPU6050 der günstigste Weg. Drehen Sie das Boot zuerst im Wasser zwei volle Umdrehungen und führen Sie die Hard- und Soft-Iron-Kalibrierung durch.Das 180-Problem ist davon getrennt: Ein Winkel lässt sich nicht mitteln. Der Mittelwert von 359 und 1 ergibt 180. Das Wochendiagramm liest stündlich aggregierte Werte, und die Standardfunktion ist Mittelwert. Stellen Sie im Kursdiagramm die Funktion auf last und senden Sie für die Analyse zusätzlich heading_sin und heading_cos neben dem Kurs; deren Mittelwert ergibt das richtige Ergebnis.
Pencereyi büyütmek gecikmeyi artırır, tersini yapmak lazım. Bir dönem drone ile uğraşırken aynı şeyi yaşadım.
Gecikmenin kaynağı ortalamanın kendisi: 20 okumalık hareketli ortalama yaklaşık 1 saniye geriden gelir, dönüş hızı arttıkça hata büyür. Büşra Hanım’ın dediği kalibrasyon eksikliği de sağ-sol farkını açıklıyor.
Çözüm jiroskopla birleştirmek. Jiroskop dönüşü anında görür ama yavaşça kayar, manyetometre yavaş ama kaymaz. Tamamlayıcı filtre ikisini birleştirir:
// dt = 0.1 s, gz = derece/s (z ekseni jiroskop)
float a = 0.98;
heading = a * (heading + gz * dt) + (1 - a) * magHeading;
// 0/360 geçişini düzelt
float fark = magHeading - heading;
if (fark > 180) heading += 360 * (1 - a);
if (fark < -180) heading -= 360 * (1 - a);
heading = fmod(heading + 360, 360);
Kartta jiroskop yoksa bir MPU6050 eklemek en ucuz yol. Önce tekneyi suda iki tam tur döndürüp hard/soft iron kalibrasyonunu yapın.
180 meselesi ayrı: açının ortalaması alınamaz. 359 ile 1’in ortalaması 180 çıkar. Haftalık grafik saatlik toplu değerleri okuyor ve varsayılan fonksiyon ortalama. Başlık grafiğinde fonksiyonu last yapın, analiz için de başlığın yanında heading_sin ve heading_cos gönderin, onların ortalaması doğru çıkar.

