Softivation

GPS neden fix atmıyor

GPS fix atmıyor ve ARM izni çıkmıyorsa uydu sayısıyla HDOP arasındaki farka, hatanın asıl sebebine ve sahada adım adım uygulayacağın sıralı çözüme bak.

Furkan IŞIKAY 9 dk okuma

Kumandayı açtın, karta güç verdin, dakikalar geçti; Mission Planner hâlâ GPS'te fix olmadığını gösteriyor. ARM'a bastığında da otopilot fix kötü diye kalkışa izin vermiyor.

İçindeki soru hep aynı: modül mü bozuk, yoksa gökyüzü mü sorunlu? Bu yazı o uyarının tam olarak neyi söylediğini, uydu sayısının neden tek başına yetmediğini ve sahada hangi sırayla ilerleyeceğini anlatıyor.

Fix ne demek, otopilot nereden itibaren kabul ediyor

GPS modülü sana tek bir “çalışıyor / çalışmıyor” bilgisi vermez, bir seviye döner. Bu seviye 0 ile 6 arasındadır ve ArduPilot'un kalkışa izin verip vermemesi doğrudan bu sayıya bağlıdır.

Üç uydu görüyorsan modül çalışıyor demektir, ama konum çözmek için en az dört uydu gerekir. Dörtten azında seviye 1'de takılı kalır ve otopilot bunu kötü fix diye raporlar.

Kabul sınırı 3D fix. Seviye 3'ün altında kaldığı sürece ARM izni çıkmaz:

SeviyeAdNe demek, ne yapmalı
0GPS YOKModül hiç veri göndermiyor: seri port, baud ya da kablo.
1FIX YOKModül konuşuyor ama konum çözemiyor. Anten göğü görmüyor.
22D FIXEnlem-boylam var, irtifa yok. ArduPilot bunu yeterli saymaz.
33D FIXMinimum kabul seviyesi. ARM öncesi GPS kontrolü buradan geçer.
4DGPSDüzeltme servisi devrede, yatay hata birkaç metreye iner.
6RTK FIXEDSantimetre seviyesi. Baz istasyonu / RTCM gerektirir.

5 uydu ile 3D fix görünmesi de konumun uçuşa yetecek kadar doğru olduğu anlamına gelmez. Bunun için ikinci bir sayıya bakman gerekir.

Uydu sayısı yeterli ama drone yine kalkmıyor

Uydu sayısı tek başına bir şey söylemez; önemli olan o uyduların gökyüzünde nasıl dağıldığıdır. Hepsi tepende tek bir kümede toplanmışsa çözüm geometrisi bozulur ve bu bozulmanın adı HDOP'tur.

Aşağıdaki şekilde iki gökyüzü haritası var. Sekiz uydu ve HDOP 2.6, altı uydu ve HDOP 1.1'den daha kötüdür: soldaki küme eşiğin üstünde kalıyor, sağdaki yayılmış uydular eşiğin altında.

Uyduların dağılımı HDOP'u belirler

İki gökyüzü haritası: soldaki 8 uydu tepede tek kümede toplanmış, HDOP 2.6 ile 1.40 eşiğinin üstünde kalıyor; sağdaki 6 uydu gökyüzüne yayılmış, HDOP 1.1 ile eşiğin altında
Nereye bak: alttaki eşik çizgisi. Daha çok uydusu olan sol harita, uyduları tek tarafta toplandığı için çizginin sağına, ret bölgesine düşüyor.

ArduPilot'ta eşik GPS_HDOP_GOOD parametresiyle belirlenir ve varsayılanı 140'tır, yani HDOP 1.40. Bunun üstüne çıktığında otopilot “PreArm: High GPS HDOP” der. EKF'in GPS'i konum için kullanması ise AHRS_GPS_MINSATS'a bağlıdır ve varsayılanı 6 uydudur.

Kod
GPS_HDOP_GOOD     140    # 1.40 ustu HDOP -> "PreArm: High GPS HDOP"
AHRS_GPS_MINSATS    6    # EKF'in GPS'i kullanmasi icin gereken uydu
ARMING_CHECK        1    # butun on kontroller acik

Yani “8 uydu var, daha ne istiyor” dediğin anda bakman gereken ikinci sayı HDOP'tur.

En sık yapılan hata, uydu sayısına bakıp HDOP'u görmezden gelmek. İkinci en sık hata, HDOP yüksek diye GPS_HDOP_GOOD'u büyütüp eşiği gevşetmek. Eşiği büyütünce sorun gitmez, yalnızca görünmez olur ve uçuş sırasında konum kayması olarak geri gelir.

60 saniyede kendi kartından oku

Mission Planner'ın HUD'una bakmak yerine sayıyı doğrudan kartın kendisinden almak en hızlı teşhistir. Aşağıdaki kod karta bağlanır, GPS_RAW_INT mesajını dinler ve iki saniyede bir fix seviyesini, uydu sayısını ve HDOP'u yazar.

request_data_stream_send satırını silme. O satır olmazsa kart telemetri göndermez ve ekran boş kalır; en çok vakit kaybettiren tuzak budur.

Python
from pymavlink import mavutil
import time

# Pixhawk: '/dev/ttyACM0' veya 'COM5' ; SITL: 'tcp:127.0.0.1:5760'
BAGLANTI = 'tcp:127.0.0.1:5760'

usta = mavutil.mavlink_connection(BAGLANTI)
usta.wait_heartbeat()
print("Baglandi. sysid=%d compid=%d" % (usta.target_system, usta.target_component))

# Bu satir olmazsa GPS_RAW_INT hic gelmez, ekran bos kalir.
usta.mav.request_data_stream_send(
    usta.target_system, usta.target_component,
    mavutil.mavlink.MAV_DATA_STREAM_ALL, 2, 1)

FIX = {0: "GPS YOK", 1: "FIX YOK", 2: "2D FIX", 3: "3D FIX",
       4: "DGPS", 5: "RTK Float", 6: "RTK Fixed"}

print("%6s %10s %5s %7s %9s" % ("sn", "fix", "uydu", "HDOP", "ARM?"))
baslangic = time.time()
son = 0.0
while time.time() - baslangic < 60:
    m = usta.recv_match(type='GPS_RAW_INT', blocking=True, timeout=5)
    if m is None:
        continue
    t = time.time() - baslangic
    if t - son < 2.0:
        continue
    son = t
    hdop = m.eph / 100.0            # eph santimetre-esdegeri; 100 = 1.00 HDOP
    uydu = m.satellites_visible
    uygun = (m.fix_type >= 3) and (uydu >= 6) and (hdop <= 1.4)
    print("%6.1f %10s %5d %7.2f %9s" % (
        t, FIX.get(m.fix_type, "?"), uydu, hdop, "EVET" if uygun else "HAYIR"))
    if uygun:
        print("--> 3D fix saglandi. Kalkis oncesi kosullar tamam.")
        break

Çıktı nasıl okunur

Kodu sağlıklı bir bağlantıda çalıştırırsan şuna benzer bir çıktı alırsın:

Kod
$ python3 gps_teshis.py
Baglandi. sysid=1 compid=0
    sn        fix  uydu    HDOP      ARM?
   2.1  RTK Fixed    10    1.21      EVET
--> 3D fix saglandi. Kalkis oncesi kosullar tamam.

Kodu ArduCopter SITL'e bağlarsan fix sütununda “RTK Fixed” görürsün, çünkü simülasyon RTK seviyesinde konum üretir. Kartındaki bir u-blox modülünde aynı satırda “3D FIX” görmen normaldir.

GPS bağlantısı kesildiğinde otopilot şu mesajları basar. Bunlar ArduPilot'un kendi metinleridir:

Kod
PreArm: GPS 1: Bad fix
EKF3 IMU0 stopped aiding
EKF3 IMU1 stopped aiding
PreArm: GPS 1: Bad fix
Arm: GPS 1: Bad fix

Son satıra dikkat et: ARM komutunu gönderdiğinde mesaj “PreArm” değil “Arm” önekiyle gelir ve komutun COMMAND_ACK cevabı 4 (FAILED) döner. ACK'in 0 gelmesi ise komutun kabul edildiğini gösterir, motorların döndüğünü değil.

Hata Mesajları ve Anlamları

PreArm: GPS 1: Bad fix

Birinci GPS'in fix seviyesi 3D'nin altında. Modül ya hiç konum çözemiyor ya da yalnızca 2D fix var. Önce kablo ve seri port ayarına, sonra antenin gökyüzünü görüp görmediğine bak.

PreArm: High GPS HDOP

Fix var ama konum geometrisi kötü: HDOP, GPS_HDOP_GOOD eşiğinin üstünde. Açık alana çık ve birkaç dakika bekle. Eşiği büyüterek geçmeye çalışma.

PreArm: GPS 1: not healthy

Modül konum döndürüyor ama beklenen hızda veri gelmiyor. Genelde düşük baud, kötü kablo ya da besleme sorunudur. Modülün 5V hattını ve konnektör lehimlerini kontrol et.

PreArm: AHRS: waiting for home

Otopilot henüz home konumunu belirlememiş. Fix oturunca kendiliğinden geçer; birkaç saniye bekle.

PreArm: GPS positions differ by 57.3m

İki GPS modülü birbirinden 50 metreden fazla farklı konum bildiriyor ya da blending sağlıklı değil. Çift GPS kullanıyorsan ikisinin de fix'ini ayrı ayrı doğrula.

PreArm: GPS and AHRS differ by 11.4m

GPS'in bildirdiği konumla EKF'in tahmini arasında 10 metreden fazla fark var. Genelde yeni oturmuş bir fix ya da pusula kaynaklı yön hatası işaret eder.

PreArm: Need Position Estimate

Seçtiğin uçuş modu konum istiyor ama EKF konum üretemiyor. LOITER ya da AUTO yerine Stabilize'da test ediyorsan bu mesajı görmezsin; mod değiştirince geri gelir.

GPS Glitch or Compass error

EKF, GPS konumunda ani bir sıçrama gördü. Uçuş sırasında gelirse konum atlaması yaşanıyor demektir. Düzeldiğinde otopilot “Glitch cleared” yazar.

Sahada kartında neye bakacaksın

Bu konunun tamamı saha işidir. HDOP bozulması, antenin görüş açısı, elektromanyetik girişim ve bina gölgesi ancak kendi kartında, dışarıda ve gerçek antenle ortaya çıkar. Teşhisi şu sırayla yap:

  • Kart ile GPS arasındaki kabloyu ve konnektörü elle oynatarak kontrol et; temassızlık en sık sebep.
  • GPS modülünü güç dağıtım kartından ve video vericisinden mümkün olduğunca uzağa, tercihen bir mast üzerine al.
  • İlk açılışta soğuk başlangıç için açık alanda 2-5 dakika bekle; bina kenarında beklerken okuduğun HDOP seni yanıltır.
  • Yalnızca uydu sayısını değil, uydu sayısı ile HDOP'u birlikte not et; aynı noktada iki gün üst üste ölç.
  • Hâlâ düzelmiyorsa modülü başka bir karta takıp dene. Sorunun modülde mi kartta mı olduğunu ancak böyle ayırırsın.

Örnek: Yarışma sabahı pit çadırının altında karta güç verdin, HUD'da uydu sayısı sekizin üstünde ama ARM'da yüksek HDOP uyarısı geliyor. Çadırın yanındaki konteyner ve tribün gökyüzünün bir yarısını kapatıyor, görünen uydular tek tarafta toplanıyor. Aracı çadırdan çıkarıp açık zemine koy, birkaç dakika bekle ve uydu sayısıyla birlikte HDOP'un düştüğünü gör; kalkış hazırlığını ondan sonra bitir.

Bu konunun devamı

GPS ve diğer sensörlerin uçuşa hazırlanması Sensörlerden Uçuşa Temel İHA Eğitimi içinde.

Bu yazı işinize yaradı mı?

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