Macademia'nın robotik ve mühendislik programı · ücretsiz seviye tespiti ve kişisel öğrenme yolu

7. ünite / 10

Navigasyon: GPS, EKF ve ara nokta görevi

ParçaSimülasyonYazılım

Bu ünitenin sonunda

  • GPS hatasının yapısını (yavaş gezinen hata) açıklamak
  • Konum → hız → ivme → eğim kaskadını kurmak
  • Azami eğim açısından azami yatay ivmeyi hesaplamak
  • Rüzgârın etkisini ve I teriminin bunu nasıl telafi ettiğini simülasyonda göstermek

Ders notları

Konum denetimi yönelim denetiminin üstünde çalışan üçüncü döngüdür. Hedefe olan uzaklık bir hız hedefine (seyir hızıyla sınırlı), hız hatası bir ivme komutuna, ivme de eğim açısına çevrilir:

vhedef = Kp (phedef − p̂)  →  a = PI(vhedef − v)  →  θ ≈ a / g,   |a| ≤ g tan θazami

25° azami eğimde yatay ivme en çok 9,81 × tan 25° ≈ 4,6 m/s²'dir. Rüzgâr sürekli bir kuvvettir; onu dengelemek için drone rüzgâra doğru eğik durmalıdır ve bu eğimi hız döngüsünün I terimi bulur.

Konumu kim biliyor?

Kontrolcü gerçek konumu değil, kestirilen konumu (p̂) bilir. PX4'te bunu EKF2 üretir: IMU'yu yüksek hızda entegre eder, GPS, barometre, pusula (ve varsa optik akış, LiDAR) ölçümleriyle düzeltir. GPS hatası 1–3 m'dir ve yavaşça gezinir; ortalaması almakla geçmez. Ara noktaya varış kontrolü bile kestirime göre yapılır: simülasyonda drone ara noktayı "geçtiğini" düşündüğünde gerçekte metrelerce uzakta olabilir.

  • Varış yarıçapı (acceptance radius) GPS hatasından küçük seçilirse drone ara noktada dolanabilir.
  • Telemetri bağlantısı görev sırasında konum, batarya ve uyarıları yer istasyonuna taşır.

Simülasyon

Ara nokta görevi ve hassas iniş (3B uçuş + 2B harita)

Kalkış → ara noktalar → iniş pedine iniş. Kontrolcü yalnız kestirilen konumu bilir: GPS hatası yavaşça gezinir. İnişte ArUco kamerası açılınca hata santimetrelere düşer. Haritaya tıklayarak ara nokta ekle (sonuncusu ped), rüzgâr ve GPS hatasını değiştir.

3B sahne yükleniyor…

Simülasyon görevi

Görev simülasyonunda iniş kaynağı "Yalnız GPS" iken görevi üç kez yeniden başlat: iniş hatası her seferinde ne kadar? GPS hatasını 0'a indir: hata ne oldu? 8 m/s doğu rüzgârı ver ve rotanın nasıl değiştiğini izle. Konum P'yi 0,3 ve 2,5 yaparak görev süresini karşılaştır. Haritaya tıklayarak kendi rotanı kur.

Kod

Python: ara nokta takibi (konum P → hız PI)
import math

G, MAX_TILT = 9.81, math.radians(25)
A_MAX = G * math.tan(MAX_TILT)          # azami yatay ivme ≈ 4,6 m/s²

class Navigator:
    def __init__(self, waypoints, cruise=6.0, pos_p=0.9, vel_p=1.8, vel_i=0.3, accept=1.0):
        self.wps, self.i = waypoints, 0
        self.cruise, self.pos_p, self.vel_p, self.vel_i, self.accept = cruise, pos_p, vel_p, vel_i, accept
        self.vi = [0.0, 0.0]

    def step(self, est, vel, dt):
        """est: kestirilen konum (m), vel: hız (m/s) → ivme komutu"""
        tx, ty = self.wps[self.i]
        if math.hypot(tx - est[0], ty - est[1]) < self.accept and self.i < len(self.wps) - 1:
            self.i += 1                                     # varış: sonraki ara nokta
            tx, ty = self.wps[self.i]
        vx, vy = self.pos_p * (tx - est[0]), self.pos_p * (ty - est[1])
        n = math.hypot(vx, vy)
        if n > self.cruise:
            vx, vy = vx * self.cruise / n, vy * self.cruise / n
        ex, ey = vx - vel[0], vy - vel[1]
        ax, ay = self.vel_p * ex + self.vi[0], self.vel_p * ey + self.vi[1]
        a = math.hypot(ax, ay)
        if a > A_MAX:
            ax, ay = ax * A_MAX / a, ay * A_MAX / a          # doyum: integrali dondur
        else:
            self.vi[0] += self.vel_i * ex * dt
            self.vi[1] += self.vel_i * ey * dt
        # ivme → eğim açıları (küçük açı): pitch ≈ -ax/g, roll ≈ ay/g (gövde eksenine çevrilir)
        return ax, ay

Sık yapılan hatalar

  • GPS hatasını beyaz gürültü sanıp ortalama alarak düzelteceğini düşünmek.
  • Pusulayı kalibre etmemek: EKF yön hatası konum denetimini spirale sokar.
  • Varış yarıçapını GPS hatasından küçük seçmek.
  • Azami eğimi çok düşük tutup rüzgârda konum tutamamak; ya da çok yüksek tutup itkiyi irtifa tutmaya yetmez hale getirmek.

Yazılım mühendisliği bağlantısı

Navigasyon kodu arayüzler üzerinden test edilir: kontrolcü "kestirim" arayüzüne bağımlı olsun, GPS sürücüsüne değil.

  • Kestirimi sahte bir nesneyle (mock) besleyerek kontrolcüyü sensörsüz test et: sabit rüzgâr, sıçrayan GPS, kayıp GPS senaryoları.
  • Her senaryo için kabul ölçütü yaz: "8 m/s rüzgârda ara noktaya 1 m içinde varış".

Kendini sına

  1. Azami eğim 25° ise drone'un azami yatay ivmesi yaklaşık nedir?

  2. GPS'le inişte neden metre düzeyinde sapma olur?

  3. Uçuş kontrolcüsü ara noktaya vardığına neye bakarak karar verir?

  4. PX4 EKF2 hangi sensörleri birleştirir?

Bu ünitenin parçaları

3B modelli gerçek Hyvex parçaları:

Esc
  • PanelAna sayfaSayfa
  • ModüllerTüm modüllerSayfa
  • ParçalarParça ansiklopedisiSayfa
  • Mühendislik yoluBüyükler için robotik: 128 parça, 7 seviyeSayfa
  • Robotik dersi (ESOF 323)Üniversite robotik dersi, 14 haftaSayfa
  • Drone dersiBüyükler için: parça, simülasyon, yazılım; 10 üniteSayfa
  • Blok atölyesiSerbest blok programlamaAraç
  • Devre laboratuvarıSanal Arduino ve devreAraç
  • Robot arenasıSanal robot sürüşüAraç
  • OyunlarBloklarla 8 öğretici oyunAraç
  • Mikro Kart atölyesiSanal LED kartı bloklarla programlaAraç
  • Robot atölyesiMikro Kart'ı robota tak, bloklarla görev yapAraç