Tarayıcı + PX4 SITL + GazeboBitirme
Bitirme projesi: otonom görev ve hassas iniş
Önce tarayıcıda, sonra PX4 SITL + Gazebo'da: kalkış, dört ara nokta, aşağı bakan kamerayla ArUco işaretçisi üzerine hassas iniş; bağlantı kaybı, düşük batarya ve rüzgâr senaryoları.
Senaryo
Drone 10 m'ye kalkar, dört ara noktadan geçer, iniş bölgesinde ArUco işaretçisini arar, görsel servo ile hizalanıp iner. Görev bir durum makinesiyle yönetilir: KALKIS, ROTA, ARAMA, HIZALAMA, INIS, GERI_DONUS. Bağlantı kesilirse ya da batarya kritik eşiğe inerse drone eve döner; işaretçi 20 s içinde bulunmazsa GPS'le iner.
Gereksinimler (test edilebilir)
- G1: Görev 5 denemenin 5'inde tamamlanır; her ara noktaya kestirime göre 1 m içinde varılır.
- G2: İniş noktası işaretçi merkezine 0,3 m'den yakındır (5 denemenin ortalaması).
- G3: 3 m/s rüzgârda görev yine tamamlanır.
- G4: Telemetri kesilirse drone 10 s içinde Return kipine geçer.
- G5: Batarya kalan oranı kritik eşiğin altına inerse görev bırakılır ve eve dönülür.
- G6: İşaretçi 20 s içinde bulunamazsa GPS'le güvenli iniş yapılır.
Mimari
- Algılama düğümü: kamera görüntüsü → ArUco pozu (solvePnP) → /landing_target.
- Görev düğümü: saf geçiş fonksiyonlu durum makinesi; olaylar telemetriden ve algılamadan gelir.
- Denetim düğümü: ROTA'da MAVSDK görevi ya da offboard konum hedefi, HIZALAMA'da hız komutu.
- Arayüzler: ROS 2 konuları (px4_msgs) ya da MAVSDK; mesaj sözleşmeleri belgelenir.
- Parametreler (kazançlar, eşikler, failsafe) tek bir YAML dosyasında, sürüm denetiminde.
Doğrulama: birim testinden SIL'e
- Birim: durum makinesinin her geçişi, karıştırıcı, PID ve basamak yanıtı ölçütleri (bu dersin testleri gibi).
- Tarayıcı: görev simülasyonunda GPS ve kamera inişinin karşılaştırması; rüzgâr ve GPS hatası taraması.
- SIL: HEADLESS=1 ile Gazebo'da otomatik görev; ULog'dan G1–G6 ölçülür.
- Senaryolar kod olarak: rüzgâr eklentisi, telemetri kesme, batarya eşiğini düşürme.
- CI: birim testleri her itmede, SIL testleri gecelik.
Başlangıç kodu
from enum import Enum, auto
class S(Enum):
TAKEOFF = auto(); ROUTE = auto(); SEARCH = auto(); ALIGN = auto(); LAND = auto(); RETURN = auto(); DONE = auto()
def next_state(s, ev):
"""Saf geçiş fonksiyonu: birim testle her geçiş doğrulanır. ev: o adımın olayları (dict)"""
if ev.get("link_lost") or ev.get("battery") == "CRITICAL": # failsafe her durumdan önce gelir
return S.RETURN if s not in (S.LAND, S.DONE) else s
if s is S.TAKEOFF and ev.get("alt_reached"):
return S.ROUTE
if s is S.ROUTE and ev.get("last_wp_reached"):
return S.SEARCH
if s is S.SEARCH:
if ev.get("marker_seen"):
return S.ALIGN
if ev.get("search_timeout"): # işaretçi yoksa GPS'le in
return S.LAND
if s is S.ALIGN:
if not ev.get("marker_seen"):
return S.SEARCH
if ev.get("aligned"):
return S.LAND
if s in (S.LAND, S.RETURN) and ev.get("landed"):
return S.DONE
return s
assert next_state(S.ROUTE, {"link_lost": True}) is S.RETURN
assert next_state(S.SEARCH, {"marker_seen": True}) is S.ALIGN
assert next_state(S.ALIGN, {}) is S.SEARCH
assert next_state(S.LAND, {"battery": "CRITICAL"}) is S.LAND # inişi bölmeTeslimler
- 3. üniteden sonraÖneri ve gereksinimler
İki sayfa: G1–G6'yı kendi cümlelerinle test edilebilir yaz, parça listesi ve itki/ağırlık, uçuş süresi hesabı (simülasyonlardan), risk ve tehlike listesi. Depo açıldı, CI ilk testi çalıştırıyor.
Güç: LiPo, PDB/BEC ve uçuş süresi - 6. üniteden sonraDenetim ve kestirim
PID ve tamamlayıcı süzgeç kodun birim testli; basamak yanıtı ölçütleri için eşik testleri; ayar raporu (simülasyon ekran görüntüleriyle).
PID II: kaskad yönelim denetimi, gürültü ve süzgeçler - 8. üniteden sonraAra kontrol: görev
Mimari belgesi (düğümler, konular, durum makinesi); MAVSDK ya da offboard ile SITL'de dört ara noktalı görev; kayıt ve harita görüntüsü.
PX4 mimarisi, uçuş kipleri, MAVLink ve MAVSDK - 9. üniteden sonraHassas iniş
ArUco algılama düğümü ve görsel servo; iniş hatası 5 denemede ölçüldü (G2).
ROS 2 + PX4, SITL ve görüyle hassas iniş - 10. üniteden sonraSIL testleri, sunum ve rapor
Rüzgâr, telemetri kesilmesi ve batarya senaryoları otomatik; G1–G6 için kanıt tablosu; 10 dakikalık sunum ve canlı ya da kayıtlı demo; final raporu ve depo.
Güvenlik, failsafe, mevzuat ve bitirme projesi