Ne yapıyor
MAVLink v1/v2 UDP üzerinden telemetri alır. Soket ve ayrıştırıcı ayrı bir QThread’de çalışır; çözülen çerçeveler kuyruklu sinyalle ana iş parçacığına geçer. Görev, haritaya tıklanarak kurulur ve QGroundControl .plan biçiminin SimpleItem alt kümesiyle kaydedilir. Yükleme MISSION_COUNT → MISSION_REQUEST_INT → MISSION_ITEM_INT → MISSION_ACK ile gider, zaman aşımında yeniden gönderir.
Video, GStreamer ile ayrı iş parçacığında RTP/H.264 veya RTSP olarak alınır. Arayüz yetişemezse eski kare atılır; kuyruk birikmez. Gimbal ve kamera komutları kaydırıcı sürüklenirken 10 Hz’e birleştirilir.
Protokol durum makineleri zamanı dışarıdan alır ve soket görmez. Kayıp, zaman aşımı ve yeniden deneme gerçek saat beklemeden test edilir. Kullanılan MAVLink alt kümesi elle yazıldı; pymavlink 2.4.49 ile üretilen çerçevelerle bayt bayt karşılaştırılıyor.
Hedef takibi
Termal videoda İHA arayan iha-takip her kare için UDP üzerinden 54 baytlık, CRC’li bir hedef mesajı yollar: takip numarası, azimut ve elevasyon hatası, skor, hat gecikmesi ve hedef kutusu. İşlenen kare aynı anda normal video girdisi olarak gelir. İki depo, ayrı bir Python gerçeklemesiyle üretilmiş aynı bayt dizisini test eder; çözücü gönderenin koduna bağlı değil.
Otomatik takip iki kipte çalışır. Kamera gimbalin üstündeyse kapalı döngü: yeni açı, gimbal açısına hatanın yarısı eklenerek bulunur. Kamera sabitse, istenen mutlak yön kamera bakışından hesaplanır ve gimbal oraya yaklaştırılır. İkisinde de adım en fazla 5°; skoru 0,3’ün altındaki ya da sırası bozulmuş mesaj gimbali sürmez.
RTX 2080’de iha-takip, Docker’da SITL ve yer istasyonuyla 1489 karelik dizide video 30 fps, hedef mesajı 30 Hz geldi. Görüntüden mesaja gecikme p50 ~7 ms, 1250 mesajda kayıp ve red 0. Kayıtlı video kullanıldığı için kamera gerçekte dönmüyor; demo sabit kamera kipinde.
Ölçüm
ctest 80 test çalıştırıyor: 74 çekirdek testi ve 6 QtTest programı. Ubuntu 24.04 üzerinde -Werror ile geçiyorlar. İş parçacığı testleri beş kez arka arkaya koşuldu, dalgalanma çıkmadı. Çekirdek testleri ThreadSanitizer ve AddressSanitizer altında da temiz.
Uçtan uca test, ayrı süreçteki SITL’e gerçek UDP ile görev yüklüyor; her iki yönde %20 paket kaybıyla 15 öğelik görev de toparlanıyor.
Sınır
Harita çevrimdışı bir metre ızgarası. Uydu karosu yok; birkaç kilometrelik görev alanında yeter, büyük alanda değil. Uçuş kipi adları yalnız bu depodaki SITL için çözülüyor; ArduPilot veya PX4’te kip numarası olarak görünür. .plan dosyasını QGroundControl ile karşılıklı açmadım. SITL uçuş modeli kinematik: rüzgâr, dinamik ve sensör gürültüsü yok.
