El rumbo de la brújula se retrasa en las curvas, ¿el filtro está mal?
Traducido del Türkçe por IA ·
Estamos trabajando en un pequeño barco autónomo para medir la calidad del agua, que recorre una ruta hasta puntos de muestreo en estanques. Yo me encargo de los datos, pero el equipo de electrónica está de vacaciones, así que el problema me ha tocado a mí.Para el rumbo tenemos un magnetómetro QMC5883L, y el ESP32 lo lee a 10 Hz. Cuando el barco va recto el rumbo está bien, pero en las curvas se retrasa 2-3 segundos: el barco ya ha girado, el valor sigue mostrando el anterior y luego se pone al día poco a poco. El retraso parece distinto en giros a la derecha y a la izquierda. Por eso el seguimiento de la ruta oscila.Los valores también se envían a Hermetry, donde dibujamos la ruta en un mapa. Hay además algo raro: en el gráfico semanal el rumbo a veces aparece alrededor de 180, aunque ese día el barco fue al norte y volvió.
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ş.
Traducido del Türkçe por IA ·
¿Aplican un filtro al valor leído?
Okunan değere bir filtre uyguluyor musunuz?
Traducido del Türkçe por IA ·
Sí, es el promedio de las últimas 20 lecturas. A 10 Hz tarda 2 segundos.
Evet, son 20 okumanın ortalaması. 10 Hz’de 2 saniye ediyor.
Traducido del Türkçe por IA ·
Ajuste la ventana a 50, será más estable.
Pencereyi 50’ye çıkarın, daha stabil olur.
Traducido del Türkçe por IA ·
¿Se ha realizado la calibración? Si no se ha hecho la calibración de hard iron y soft iron, aparecen errores distintos según el sentido de giro, y la diferencia izquierda-derecha puede deberse a eso.
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.
Traducido del Türkçe por IA ·
Ampliar la ventana aumenta el retraso, hay que hacer lo contrario. Tuve el mismo problema una vez mientras trabajaba con drones.La fuente del retraso es el promedio en sí: un promedio móvil de 20 lecturas llega con unos 1 segundo de retraso, y el error crece a medida que aumenta la velocidad de giro. La falta de calibración que mencionó Büşra Hanım también explica la diferencia entre el giro a la derecha y a la izquierda.La solución es combinarlo con el giroscopio. El giroscopio detecta la rotación al instante pero se desvía lentamente, el magnetómetro es lento pero no se desvía. Un filtro complementario combina ambos:
// 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 placa no tiene giroscopio, añadir un MPU6050 es la forma más barata. Primero, haga girar el barco dos vueltas completas en el agua y realice la calibración hard/soft iron.El problema del 180 es aparte: un ángulo no se puede promediar. El promedio de 359 y 1 da 180. El gráfico semanal lee valores agregados por hora y la función predeterminada es average. En el gráfico del rumbo, cambie la función a last, y para el análisis envíe heading_sin y heading_cos junto al rumbo; su promedio sale correctamente.
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.
Traducido del Türkçe por IA ·
Con el filtro complementario el retraso casi desapareció, y el equipo ya había encontrado un MPU6050 de todos modos. También hicimos la calibración y la diferencia izquierda-derecha se fue. Al usar last en la gráfica también se acabó la tontería del 180. Menos mal que leí este artículo antes de probar la sugerencia 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 🙂
- Debes estar registrado para responder a este debate.
Únete a la conversación
Inicia sesión para preguntar y responder, dar me gusta a las publicaciones útiles y marcar la respuesta que resolvió tu problema. Cada aportación suma puntos y niveles.

