Le cap de la boussole est en retard dans les virages, le filtre est-il faux ?
Traduit de Türkçe par IA ·
Nous travaillons sur un petit bateau autonome pour la mesure de la qualité de l’eau, qui suit un itinéraire vers des points de prélèvement dans des étangs. Je m’occupe des données, mais l’équipe électronique est en vacances, donc le problème me revient.Pour le cap nous utilisons un magnétomètre QMC5883L, et l’ESP32 le lit à 10 Hz. Quand le bateau avance droit, le cap est correct, mais dans les virages il est en retard de 2 à 3 secondes : le bateau a tourné, la valeur affiche encore l’ancienne, puis rattrape lentement. Le retard semble différent selon qu’on tourne à droite ou à gauche. Le suivi de trajectoire en est donc perturbé.Les valeurs sont aussi envoyées vers Hermetry, où nous traçons l’itinéraire sur une carte. Il y a aussi un détail étrange : sur le graphique hebdomadaire, le cap apparaît parfois autour de 180, alors que ce jour-là le bateau est allé vers le nord puis est revenu.
Su kalitesi ölçümü için küçük bir otonom tekne üzerinde çalışıyoruz, göletlerde rota üzerinde numune noktalarına gidiyor. Ben veri tarafındayım ama elektronik ekibi tatilde, sorun bana kaldı.
Başlık (heading) için QMC5883L manyetometre var, ESP32 10 Hz okuyor. Tekne düz giderken başlık güzel, ama dönüşlerde 2-3 saniye geriden geliyor: tekne dönmüş, değer hâlâ eskiyi gösteriyor, sonra yavaşça yetişiyor. Sağa ve sola dönüşte gecikme farklı gibi. Rota takibi bu yüzden yalpalıyor.
Değerler Hermetry’ye de gidiyor, haritada rota çiziyoruz. Bir de tuhaf bir şey var: haftalık grafikte başlık bazen 180 civarı görünüyor, oysa tekne o gün kuzeye gidip gelmiş.
Traduit de Türkçe par IA ·
Appliquez-vous un filtre à la valeur lue ?
Okunan değere bir filtre uyguluyor musunuz?
Traduit de Türkçe par IA ·
Oui, c’est la moyenne des 20 dernières mesures. À 10 Hz, cela prend 2 secondes.
Evet, son 20 okumanın ortalaması. 10 Hz’de 2 saniye ediyor.
Traduit de Türkçe par IA ·
Réglez la fenêtre sur 50, cela sera plus stable.
Pencereyi 50’ye çıkarın, daha stabil olur.
Traduit de Türkçe par IA ·
La calibration a-t-elle été effectuée ? Si la calibration hard iron et soft iron n’a pas été faite, des erreurs différentes apparaissent selon le sens de rotation, et la différence gauche-droite peut venir de là.
Kalibrasyon yapıldı mı? Hard iron ve soft iron kalibrasyonu yapılmamışsa dönüş yönüne göre farklı hata çıkar, sağ-sol farkı ondan olabilir.
Traduit de Türkçe par IA ·
Agrandir la fenêtre augmente le retard, il faut faire l’inverse. J’ai vécu la même chose à une époque où je travaillais sur des drones.La source du retard est la moyenne elle-même : une moyenne mobile sur 20 mesures arrive avec environ 1 seconde de retard, et l’erreur augmente à mesure que la vitesse de rotation augmente. Le manque de calibration évoqué par Büşra Hanım explique aussi la différence entre la droite et la gauche.La solution consiste à combiner avec le gyroscope. Le gyroscope voit la rotation instantanément mais dérive lentement, le magnétomètre est lent mais ne dérive pas. Un filtre complémentaire combine les deux :
// 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);
Si la carte n’a pas de gyroscope, ajouter un MPU6050 est la solution la moins chère. Commencez par faire tourner le bateau sur deux tours complets dans l’eau et effectuez la calibration hard/soft iron.Le problème du 180 est distinct : un angle ne peut pas être moyenné. La moyenne de 359 et 1 donne 180. Le graphique hebdomadaire lit des valeurs agrégées toutes les heures et la fonction par défaut est average. Sur le graphique du cap, réglez la fonction sur last, et pour l’analyse envoyez heading_sin et heading_cos en plus du cap ; leur moyenne donne le bon résultat.
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.
Traduit de Türkçe par IA ·
Avec le filtre complémentaire, le retard a presque disparu, et l’équipe avait de toute façon déjà trouvé un MPU6050. Nous avons aussi fait la calibration, la différence gauche-droite a disparu. En faisant last sur le graphique, le problème du 180 a disparu aussi. Heureusement que j’ai lu cet article avant d’essayer la suggestion de Hakan Bey 🙂
Tamamlayıcı filtre ile gecikme neredeyse kayboldu, ekip bir MPU6050 bulmuştu zaten. Kalibrasyonu da yaptık, sağ-sol farkı gitti. Grafikte last yapınca 180 saçmalığı da bitti. Hakan Bey’in önerisini denemeden önce bu yazıyı okumuş olmam iyi oldu 🙂
- Vous devez être connecté pour répondre à ce sujet.
Rejoignez la discussion
Connectez-vous pour poser et répondre à des questions, aimer les messages utiles et marquer la réponse qui a résolu votre problème. Chaque contribution rapporte des points et des niveaux.

