Softivation

Drone pusulası şaşıyor, yön yanlış gösteriyor

Pusula kalibrasyonu geçti, offsetler normal, yine de burun yönü şaşıyor. Sebebi çoğu zaman motor ve güç kablosu girişimi. Nasıl ölçülür, nasıl çözülür.

Furkan IŞIKAY 8 dk okuma

Mission Planner açık, drone yerde duruyor, burnu kuzeye bakıyor. Ekrandaki pusula ise bambaşka bir yön gösteriyor. Kalibrasyonu üçüncü kez tekrarladın, değişen bir şey yok.

Bu noktada çoğu takım kalibrasyonu bir kez daha dener. Oysa kalibrasyon zaten geçtiyse sorun pusulanın kendisinde değil, pusulanın çevresinde.

Sapma sabit mi, gazla mı değişiyor

Pusula sapmasının üç farklı imzası var ve her biri başka bir şeye işaret eder. Önce hangisinde olduğunu bulman gerekiyor, çözüm ondan sonra geliyor.

  • Sapma sabit ve hep aynı yönde: montaj yönü yanlış. Ya montaj yönü ayarı ya da harici pusulanın fiziksel yerleşimi hatalı.
  • Drone yerde dururken doğru, gazı açtığında kayıyor: motor ve güç kablosu girişimi. En sık görülen ve en çok vakit kaybettiren durum.
  • Sapma rastgele ve tekrarlanmıyor: kalibrasyon gerçekten kötü yapılmış ya da sensör arıza veriyor.

Bu yazı ikinci maddeye odaklanıyor, çünkü kalibrasyonu geçen bir sistemde en sık çıkan sebep o.

Pusulayı ne bozuyor

Manyetometre Dünya'nın manyetik alanını ölçer. Bu alan zayıftır. Motorların ve güç kablosunun çektiği akım da manyetik alan üretir ve pusula ikisini ayırt edemez, toplamını ölçer.

Pusula nerede durursa ne ölçer

Yandan drone: gövde içindeki dahili pusula güç kablosunun alanının içinde, GPS direğinin üstündeki harici pusula kablodan 10-15 cm uzakta
Nereye bak: kesikli halkalar. Gövde içindeki kırmızı nokta halkaların içinde kalıyor; direğin üstündeki pusula dışarıda.

Şekilde kesikli halkalara bak. Gövde içindeki dahili pusula güç kablosunun alanında kalıyor, GPS direğinin üstündeki harici pusula o alanın dışında.

Belirleyici olan mesafe. Alan şiddeti mesafenin küpüyle azaldığı için pusulayı güç kablosundan iki kat uzaklaştırdığında girişim yaklaşık sekizde bire düşer. Uygulamada bu, pusulayı gövde içinden alıp GPS direğine taşımak demek.

Pusulayı uzaklaştırınca girişim ne kadar düşer

Alan şiddeti mesafenin küpüyle azalır; mesafe iki katına çıkınca girişim yaklaşık sekizde bire iner
Nereye bak: eğrinin ilk yarısı. Kazancın çoğu ilk uzaklaştırmada geliyor; 2 kat uzaklık girişimi yaklaşık 8'de 1'e indiriyor.

Eğri, mesafeyi büyütmenin neden ilk çözüm olduğunu gösteriyor: pusulayı biraz uzaklaştırmak bile girişimi hızla düşürüyor.

Kendi kartında nasıl ölçersin

Girişimin ne kadar olduğunu yalnızca kendi kartında, gerçek donanımla bulabilirsin. Gaz arttıkça manyetik alan şiddeti |B| tırmanıyorsa girişim var; ölçmen gereken şey bu fark.

Aşağıdaki kod otopilota bağlanır, gaz seviyesini ve manyetik alan şiddetini eş zamanlı okur, taban değere göre yüzde kaç saptığını yazar.

En sık yapılan hata: pervaneler takılıyken test etmek. Pervaneleri sök, drone'u yere sabitle, ancak ondan sonra gazı kademeli aç. Pervane takılıyken yapılan gaz testi ciddi yaralanmaya yol açar.

Python
# Pusula girisim olcumu - kendi kartinda calistir
# Pervaneleri SOK, drone'u yere sabitle, sonra gazi kademeli ac.
import math
from pymavlink import mavutil

BAGLANTI = 'tcp:127.0.0.1:5760'   # telemetri: '/dev/ttyUSB0' veya 'udp:0.0.0.0:14550'
SURE_SN  = 45

arac = mavutil.mavlink_connection(BAGLANTI, baud=57600)
arac.wait_heartbeat(timeout=30)
print('Baglandi. sysid=%d' % arac.target_system)

# Bu satir olmazsa telemetri akmaz
arac.mav.request_data_stream_send(
    arac.target_system, arac.target_component,
    mavutil.mavlink.MAV_DATA_STREAM_ALL, 10, 1)

gaz, olcumler = 0, []
import time
bitis = time.time() + SURE_SN
print('%-8s %-9s %-9s' % ('gaz%', '|B|', 'sapma%'))
while time.time() < bitis:
    m = arac.recv_match(type=['SERVO_OUTPUT_RAW', 'SCALED_IMU2'],
                        blocking=True, timeout=2)
    if m is None:
        continue
    if m.get_type() == 'SERVO_OUTPUT_RAW':
        gaz = max(0, min(100, (m.servo1_raw - 1000) / 10.0))
        continue
    x, y, z = m.xmag, m.ymag, m.zmag
    if x == 0 and y == 0 and z == 0:
        continue
    B = math.sqrt(x*x + y*y + z*z)
    olcumler.append((gaz, B))
    if len(olcumler) % 25 == 0:
        taban = olcumler[0][1]
        sapma = 100.0 * (B - taban) / taban
        print('%-8.0f %-9.1f %-+9.2f' % (gaz, B, sapma))

if olcumler:
    B0 = olcumler[0][1]
    en_kotu = max(olcumler, key=lambda t: abs(t[1] - B0))
    fark = 100.0 * abs(en_kotu[1] - B0) / B0
    print('\nTaban |B| = %.1f mGauss (gaz %.0f%%)' % (B0, olcumler[0][0]))
    print('En buyuk sapma = %%%.2f (gaz %%%.0f, |B| = %.1f)'
          % (fark, en_kotu[0], en_kotu[1]))
    print('SONUC: %s' % ('GIRISIM VAR - pusulayi uzaklastir' if fark > 5
                         else 'girisim kabul edilebilir'))

Bağlantı satırını kendi hattına göre değiştir: USB için /dev/ttyUSB0, telemetri köprüsü için udp:0.0.0.0:14550. Gazı yavaş aç, her kademede birkaç saniye bekle.

Yorumu kolay. Taban değere göre sapma yüzde beşe kadarsa yaşanabilir; yüzde onu aşıyorsa otopilot uçuş sırasında yönü kaybeder ve LOITER modunda tuvalet çukuru dediğimiz genişleyen daireler başlar.

Ölçüm kötüyse ne yaparsın

Sırayı bozma. Önce mesafeyi büyüt, sonra yazılım tarafını düzelt. Parametreyle kapatmaya çalıştığın fiziksel bir sorun geri gelir.

  • Pusulayı GPS direğine taşı, güç kablosundan en az 10-15 cm uzaklaştır.
  • Güç kablolarını birbirine burarak topla. Gidiş ve dönüş kablosu bitiştiğinde ürettikleri alan büyük ölçüde birbirini götürür.
  • Harici pusulayı kullan, gövde içindeki dahili pusulayı devre dışı bırak.
  • COMPASS_ORIENT değerini doğrula. Yanlış yön, iki pusula arasında tutarsızlık olarak geri döner.

Fiziksel düzenlemeden sonra bakılacak parametreler bunlar:

Kod
COMPASS_EXTERNAL = 1      # harici pusula kullaniliyor
COMPASS_ORIENT   = 0      # montaj yonu (yanlissa tutarsizlik verir)
COMPASS_USE      = 1      # birincil pusula kullanilsin
COMPASS_USE2     = 0      # dahili pusulayi devre disi birak
COMPASS_OFFS_MAX = 1800   # offset ust siniri (varsayilan)

Parametreleri değiştirdikten sonra otopilotu yeniden başlat ve pusula kalibrasyonunu baştan yap. Eski offsetler yeni yerleşime uymaz.

Hata Mesajları ve Anlamları

Mission Planner'ın mesaj penceresinde göreceğin metinler ve karşılıkları.

PreArm: Compass not calibrated

Pusula hiç kalibre edilmemiş ya da kalibrasyon değerleri silinmiş. Mission Planner üzerinden canlı kalibrasyonu tamamla ve otopilotu yeniden başlat.

PreArm: Compasses inconsistent

Birden fazla pusula var ve aralarındaki yön farkı kabul sınırını aşıyor. Neredeyse her zaman sebebi yanlış COMPASS_ORIENT ya da bir pusulanın girişim altında olmasıdır.

PreArm: Compass offsets too high

Kalibrasyon sonucu çıkan offset değeri COMPASS_OFFS_MAX sınırını (varsayılan 1800) aşmış. Bu genelde pusulanın sürekli bir manyetik alan içinde olduğunu gösterir: batarya, güç dağıtım kartı ya da gövdedeki mıknatıs.

PreArm: Check mag field

Ölçülen manyetik alan şiddeti beklenen aralığın dışında. Mesaj ölçülen değeri ve kabul edilen alt-üst sınırı birlikte yazar. Çok yüksek değer yakındaki metal ya da akım, çok düşük değer genelde kablo veya sensör arızası anlamına gelir.

Bad Compass Health

Otopilot pusuladan sağlıklı veri alamıyor. Önce I2C ya da CAN kablosunu ve lehimlerini kontrol et. Titreşim altında gevşeyen konnektör bu mesajın en sık sebebidir.

Sahada ne değişir

Masada yaptığın ölçüm sahayı tam anlatmaz. Zemindeki demir donatı, otopark, konteyner ve araç pusulayı yerdeyken saptırır. Drone havalandıktan sonra bu etki hızla azalır.

Kalkış noktasını betonarme zeminden ve büyük metal yapılardan uzak seç. Yerde gördüğün küçük bir sapma havada kendini düzeltiyorsa sebep zemindir, dronun kendisi değil.

Örnek: Pit alanında drone'u metal konteynerin ve servis aracının dibine koydun, haritadaki ok burnun baktığı yönden belirgin biçimde sapıyor. Kalibrasyona koşmadan önce aracı birkaç metre ileriye, açık zemine taşı ve oka yeniden bak; sapma küçülüyorsa pusulan sağlam, zemin saptırıyordu. Kalkış noktasını da konteynerin dibine değil, o açık zemine al.

Yarışma alanında şunu da unutma: manyetik sapma açısı şehirden şehre değişir. COMPASS_AUTODEC parametresi bunu GPS konumundan otomatik hesaplar, elle kapatma.

Bu konu hangi eğitimde var

Pusula kalibrasyonunun adım adım uygulaması, kart bazlı farklar ve diğer sensörlerin teşhisi Sensörlerden Uçuşa Temel İHA eğitiminin Kalibrasyon bölümünde anlatılıyor.

Bu yazı işinize yaradı mı?

Ücretsiz kaynakPixhawk ve ArduPilot hata mesajları sözlüğüBu yazıdaki 6 mesaj ve benzerleri sözlükte: ne demek, neden çıkar, ilk neye bakılır.