Skip to content

Latest commit

 

History

3 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ROS 2 Humble PX4 Autopilot YOLOv8 Python 3.10+ Visual Servoing License

🛩️ VTOL Autonomy Stack

High-Assurance Autonomous Flight Control & Visual Servoing for Tactical Loitering Munitions

Taktik Dikey Kalkışlı Sabit Kanat (VTOL) Dolanan Mühimmat Tam Otonom Görev ve Güdüm Sistemi
ROS 2 Humble · PX4 Offboard Control · YOLOv8 Computer Vision · Circular Orbit Tracking · Visual Servoing Precision Dive

Overview • Architecture • State Machine • Mission Sequence • Guidance Theory • GCS Terminal • Installation • Quickstart • Configuration


🔭 System Overview / Genel Bakış

VTOL Autonomy Stack, dikey kalkış-iniş (VTOL) yapabilen hibrit sabit kanatlı taktik İHA'lar ve dolanan mühimmatlar (loitering munitions / kamikaze İHA) için geliştirilmiş, endüstriyel standartlarda bir ROS 2 otonomi yazılımıdır.

Sistem; pist gerektirmeyen dikey kalkıştan başlayarak, döner kanattan sabit kanada geçişi, yüksek hızlı intikali, hedef alanı üzerinde aerodinamik olarak ölçeklenen dairesel devriyeyi (orbit loiter), yapay zeka tabanlı hedef tespitini ve hedefe kilitlenip terminal görsel servo dalışını (precision kamikaze dive) Human-in-the-Loop (HITL) güvenlik mimarisiyle icra eder.

🌟 Key Engineering Highlights / Mühendislik Özellikleri

Yetenek Teknik Karşılığı Avantajı
Pist Bağımsız Operasyon Multikopter VTOL Modu ($Z$-hız kontrollü tırmanış) Zorlu arazi şartlarında fırlatıcı/katapult gerektirmeden görev icrası
Tam Otonom Geçiş PX4 Native Transition State senkronizasyonu Aerodinamik kaldırma kuvveti oluşana kadar güvenli geçiş
Yüksek Hızlı İntikal 3D Hibrit Pozisyon + Hız Vektörü ($200\text{ km/h}$) Rüzgar sürüklenmelerini kompanse eden hassas hedef intikali
Dinamik Yörünge (Orbit) $R = \frac{V^2}{g \cdot \tan(\phi)}$ Aerodinamik Model Yapısal g-limitlerini aşmadan hıza göre otomatik yarıçap ölçekleme
AI Optik Kilitlenme Ultralytics YOLOv8 ($30\text{ FPS}$, $<30\text{ ms}$ gecikme) Gerçek zamanlı zırhlı araç / hedef tespiti ve piksel hata kestirimi
HITL Güvenlik Doktrini Operatör Yetkilendirme Protokolü (ENGAGE_AUTH) İstenmeyen sivil/dost unsurlara taarruzu engelleyen nihai insan onayı
Görsel Güdüm (Dive) Gain-Scheduled $P$-Controller ($50\text{ Hz}$ servo döngüsü) Yüksek hızda kontrol yüzeyi aşırı tepkilerini engelleyen dinamik kazanç

🏗 System Architecture / Sistem Mimarisi

Sistem, Companion Computer (Görev Bilgisayarı), PX4 Otopilot (Uçuş Kontrolcüsü) ve Yer Kontrol İstasyonu (GCS) olmak üzere üç katmanlı dağıtık bir topolojiye sahiptir:

flowchart TB
    subgraph GCS[" 🖥️ YER KONTROL İSTASYONU (GCS) "]
        direction TB
        GCS_UI["gcs_panel.py<br/>(Curses Taktik Arayüz / HUD)"]
        GCS_BRIDGE["gcs_listener.py<br/>(Watchdog & Koordinat Doğrulama)"]
        GCS_UI <-->|"ROS 2 IPC"| GCS_BRIDGE
    end

    subgraph TELEMETRY[" 📡 TELEMETRİ / DATA LINK (WiFi / RF) "]
        LINK["ROS 2 DDS Network Layer (FastDDS / CycloneDDS)"]
    end

    subgraph UAV[" 🛩️ UÇAK COMPANION COMPUTER (Jetson / RPi) "]
        direction TB
        CAM[("Kamera Sensörü<br/>(CSI / USB / RTSP)")] --> STREAM["stream_node.py<br/>(Lazy-Init Video Publisher)"]
        STREAM -->|"/camera/image_raw/compressed"| VISION["vision_node.py<br/>(YOLOv8 AI Inference & Tracker)"]
        
        VISION -->|"/vision/target_error (dx, dy, lock)"| FSM["state_machine.py<br/>(Ana Görev Beyni / 9-State FSM)"]
        VISION -->|"/vision/target_error"| SERVO["visual_servo.py<br/>(Görsel Servo Dalış Pilotajı)"]
        
        FSM -.->|"Aktif Et (ENGAGE)"| SERVO
        
        FSM -->|"/fmu/in/trajectory_setpoint"| UXRCEDDS["uXRCE-DDS Client Agent"]
        SERVO -->|"/fmu/in/trajectory_setpoint"| UXRCEDDS
        FSM -->|"/fmu/in/vehicle_command"| UXRCEDDS
    end

    subgraph PX4_LAYER[" 🕹️ FLIGHT CONTROLLER (PX4 Autopilot) "]
        UXRCEDDS <-->|"UART / Ethernet Link"| PX4["PX4 Firmware v1.14+<br/>(EKF2, Rate Controller, Mixer)"]
        PX4 --> ACTUATORS["Motorlar & Kontrol Yüzeyleri (Aileron, Elevator, Rudder)"]
        SENSORS["Sensörler (IMU, GPS, Pitot Tube, Baro)"] --> PX4
        PX4 -->|"/fmu/out/vehicle_local_position_v1"| FSM
    end

    GCS_BRIDGE <-->|"Telemetri & Komutlar"| LINK
    LINK <-->|"/control/operator_cmd & /vtol/mission_log"| FSM
Loading

🔄 Flight State Machine (FSM)

Görev yöneticisi (state_machine.py), uçağın kalkıştan dalışa kadar olan tüm uçuş fazlarını hata toleranslı bir durum makinesiyle denetler:

stateDiagram-v2
    [*] --> IDLE: Sistem Başlatma & GPS Kilidi
    
    IDLE --> PREFLIGHT: Home & Hedef Koordinat Girişi
    PREFLIGHT --> TAKEOFF: Offboard Mod Aktif + Motorlar ARM
    
    TAKEOFF --> TRANSITION: İrtifa >= 30m (Dikey Tırmanış Tamamlandı)
    TRANSITION --> SLANTED_CLIMB: Sabit Kanat Geçişi Tamamlandı (5s Hover)
    
    SLANTED_CLIMB --> CRUISE: İrtifa >= 150m & Hız >= 120 km/h
    CRUISE --> APPROACH: Hedefe Kalan Mesafe <= 950m
    
    APPROACH --> SEARCH_ORBIT: Hedefe Kalan Mesafe <= 100m & Hız <= 60 km/h
    
    state SEARCH {
        [*] --> SEARCH_ORBIT: 70m Dairesel Arama (60 km/h)
        SEARCH_ORBIT --> TARGET_LOCKED: YOLOv8 Tespit (Conf >= 0.60)
        TARGET_LOCKED --> SEARCH_ORBIT: Kilit Kaybı (Timeout > Eşik)
        TARGET_LOCKED --> ENGAGE_AUTHORIZED: Operatörden ENGAGE Onayı Geldi
    }
    
    SEARCH_ORBIT --> RTL: Acil Durum / Yakıt Kritik / Sinyal Kesilmesi
    ENGAGE_AUTHORIZED --> ENGAGE: visual_servo Kontrolü Devralır
    
    state ENGAGE {
        [*] --> TERMINAL_DIVE: 150 km/h Görsel Güdümlü Balistik Dalış
        TERMINAL_DIVE --> WAVE_OFF: İrtifa < Eşik VEYA Kilit Kaybı (Pull-up)
    }
    
    WAVE_OFF --> SEARCH_ORBIT: Acil Tırmanışla Yeniden Arama Moduna Geç
    TERMINAL_DIVE --> [*]: Hedef Etkileşimi / Görev Sonu
Loading

⏱️ Mission Sequence Diagram / Görev Zaman Akışı

Aşağıdaki sıra diyagramı; hedef arama, hedef kilitleme, operatör etkileşimi ve terminal dalış safhalarındaki veri akışını özetlemektedir:

sequenceDiagram
    autonumber
    actor Operator as 👤 Operatör (GCS)
    participant FSM as 🧠 Mission Manager (state_machine)
    participant Vision as 👁️ YOLOv8 (vision_node)
    participant Servo as 🎯 Visual Servo (visual_servo)
    participant PX4 as 🕹️ PX4 Autopilot

    Note over FSM,PX4: Uçak hedef üzerinde 70m dairesel arama (SEARCH_ORBIT) yapıyor
    FSM->>PX4: TrajectorySetpoint (Dairesel lookahead teğet hız)
    
    Vision->>Vision: Hedef Algılandı (Confidence > 0.60)
    Vision->>FSM: /vision/target_error (dx, dy, z_lock=1.0)
    
    Note over FSM: Hedef Kilitlendi! Dönüş durdurulur, sabit pozisyona geçilir
    FSM->>PX4: TrajectorySetpoint (Hover + Yaw hedefe çevrilir)
    FSM->>Operator: ⚠️ "HEDEF KİLİTLENDİ - ENGAGE ONAYI BEKLENİYOR"
    
    alt Operatör Onay Verir
        Operator->>FSM: Komut: [E] -> ENGAGE_AUTH
        FSM->>Servo: Dalış Modunu Aktif Et (Engage Trigger)
        Note over Servo,PX4: Kontrol visual_servo düğümüne geçti
        loop 50 Hz Görsel Servo Döngüsü
            Vision->>Servo: Anlık Piksel Hatası (dx, dy)
            Servo->>Servo: Gain Scheduling ile Hız-Açı Vektörü Hesapla
            Servo->>PX4: TrajectorySetpoint (Vx, Vy, Vz=45m/s Dalış Hızı)
        end
    else Operatör İptal Eder veya Hedef Kaybolur
        Operator->>FSM: Komut: [A] -> ABORT / Kilit Kaybı
        FSM->>PX4: Tekrar Dairesel Aramaya (SEARCH_ORBIT) Başla
    end
Loading

📐 Guidance & Control Theory / Kontrol ve Güdüm Teorisi

1. Dinamik Aerodinamik Dönüş Yarıçapı (Coordinated Turn Model)

Arama yarıçapı ($R$), sabit bir değer yerine uçağın hızına ($V$) ve izin verilen maksimum yatış açısına ($\phi_{\text{max}}$) göre kanat yükü sınırları dahilinde otomatik türetilir:

$$R = \frac{V^2}{g \cdot \tan(\phi_{\text{max}})}$$

  • $g$: Yerçekimi ivmesi ($9.81\text{ m/s}^2$)
  • $\phi_{\text{max}}$: Maksimum bank açısı ($30^\circ$)
  • $V$: Teğet arama hızı ($16.67\text{ m/s} \approx 60\text{ km/h}$)
  • Elde edilen teorik yarıçap: $R \approx 49\text{ m}$. Sistem güvenlik katsayısıyla bunu $70\text{ m}$'ye sınırlar.

2. Görsel Güdümde Kazanç Çizelgeleme (Gain Scheduling)

Görsel servo algoritması, hedefin optik eksenden olan piksel kaçıklığını ($e_x, e_y$) açısal hız ve yanal hız komutlarına çevirir. Yüksek hızlarda kontrol yüzeylerinin (kanatçık/irtifa dümeni) aerodinamik etkinliği arttığı için sabit kazanç kullanmak yüksek hızlı dalışta tehlikeli salınımlara (flutter/oscillation) neden olur. Bu sebeple kazanç, referans hıza göre ters orantılı ölçeklenir:

$$K_p(V) = K_{p,\text{base}} \cdot \left(\frac{V_{\text{ref}}}{V_{\text{current}}}\right)$$

$$\omega_{\text{yaw}} = K_{p,\text{yaw}}(V) \cdot e_x$$ $$v_{\text{lateral}} = K_{p,\text{lateral}}(V) \cdot e_x$$

graph LR
    IMG[Kamera Görüntüsü] --> YOLO[YOLOv8 Hedef Tespiti]
    YOLO --> ERR[Piksel Hatası Hesabı: dx, dy]
    ERR --> GS[Gain Scheduling: Kp = Kp_base * V_ref / V]
    GS --> CMD[Hız & Yaw Rate Vektörü]
    CMD --> PX4_TRJ[PX4 TrajectorySetpoint]
    PX4_TRJ --> MIXER[Kontrol Yüzeyleri & İtme]
Loading

🖥 Ground Control Station (GCS)

Yer İstasyonu (gcs_panel.py), harici ağır GUI bağımlılıkları olmadan saf Python curses motoru ile doğrudan terminalde çalışan ultra-hafif bir C2 (Command & Control) taktik arayüzüdür:

╔═══════════════════════════════════════════════════════════════════════╗
║       ██╗   ██╗████████╗ ██████╗ ██╗          ██████╗  ██████╗███████ ║
║       ██║   ██║╚══██╔══╝██╔═══██╗██║         ██╔════╝ ██╔════╝██╔════ ║
║       ██║   ██║   ██║   ██║   ██║██║         ██║  ███╗██║     ███████ ║
║       ╚██╗ ██╔╝   ██║   ██║   ██║██║         ██║   ██║██║     ╚════██ ║
║        ╚████╔╝    ██║   ╚██████╔╝███████╗    ╚██████╔╝╚██████╗███████ ║
║         ╚═══╝     ╚═╝    ╚═════╝ ╚══════╝     ╚═════╝  ╚═════╝╚══════ ║
║              GROUND  CONTROL  STATION  —  TACTICAL  TERMINAL          ║
╚═══════════════════════════════════════════════════════════════════════╝
═══════════════════════════════════════════════════════════════════════
  ◆ VTOL GCS v2.0  │  İRTİFA: 70.0m  │  HIZ: 16.7 m/s  │  LINK: ONLINE
  ╔════════════════════════════════════════════════════════════════╗
  ║      SEARCH       —  Dairesel Arama Aktif (70m Yarıçap)      ║
  ╚════════════════════════════════════════════════════════════════╝
  ⚡ ████ HEDEF KİTLİ ████  |  MOD: SABİT/HOVER  |  ENGAGE EMRİ BEKLENİYOR

Klavye Operatör Kısayolları (HOTKEYS)

  • T : TAKEOFF — Motorları arm eder ve dikey kalkışı başlatır (Sadece IDLE modunda).
  • G : TARGET GPS — Görev hedef enlem/boylam koordinatlarını ayarlar.
  • H : HOME GPS — Kalkış / üs koordinatlarını manüel tanımlar.
  • E : ENGAGE — Kilitlenilen hedefe dalış için nihai ateş yetkisi verir.
  • R : RTL — Return to Launch (Üsse acil otonom dönüş).
  • A : ABORT — Görevi iptal et ve güvenli bekleme orbitine geç.
  • Q : Panelden güvenli çıkış.

🔧 Installation & Build / Kurulum

Sistem Gereksinimleri

  • İşletim Sistemi: Ubuntu 22.04 LTS (Jammy Jellyfish)
  • Middleware: ROS 2 Humble Hawksbill
  • Otopilot Firmware: PX4 Autopilot v1.14+
  • Donanım Uyumluluğu: NVIDIA Jetson (Orin / Xavier / Nano), Raspberry Pi 4/5 veya x86-64 Companion PC

1. Sistem Bağımlılıkları

sudo apt update && sudo apt install -y \
  python3-pip \
  python3-colcon-common-extensions \
  ros-humble-cv-bridge \
  ros-humble-image-transport

2. Python Kütüphaneleri

pip install ultralytics opencv-python-headless torch torchvision numpy pyyaml

3. Derleme (Build)

# Workspace kök dizinine geçin
cd vtol-autonomy-stack

# ROS 2 ortamını kaynak edin
source /opt/ros/humble/setup.bash

# Derleyin (veya bash rebuild_clean.sh çalıştırın)
colcon build --symlink-install

# Ortamı aktif edin
source install/setup.bash

🚀 Quickstart & Simulation / Çalıştırma

A) SITL Simülasyonu (Gazebo + PX4)

Tüm sistemi donanımsız olarak test etmek için 3 ayrı terminal açın:

# Terminal 1: PX4 Gazebo Standart VTOL Simülasyonu
cd ~/PX4-Autopilot
make px4_sitl gz_standard_vtol

# Terminal 2: Otonomi Stack ve uXRCE-DDS Köprüsü
ros2 launch vtol_bringup simulation.launch.py

# Terminal 3: Taktik Operatör Paneli (GCS)
ros2 launch vtol_bringup gcs.launch.py

B) Gerçek Uçuş Konfigürasyonu (Donanım Üzerinde)

# 1. Companion Computer (Jetson): uXRCE Agent'ı başlatın
MicroXRCEAgent udp4 -p 8888

# 2. Uçak Otonomi Düğümlerini Başlatın
ros2 launch vtol_bringup uav.launch.py

# 3. Yer İstasyonundan Bağlanın
ros2 launch vtol_bringup gcs.launch.py

⚙️ Configuration / Konfigürasyon Dosyaları

Sistem, kod derlemesi gerektirmeden saha koşullarına göre YAML dosyaları üzerinden dinamik olarak ayarlanabilir:

  • config/mission_params.yaml:

    • takeoff_altitude_m: Multikopter dikey kalkış tırmanış tavanı ($150.0\text{ m}$).
    • loiter_altitude_m: Optik arama ve devriye irtifası ($50.0\text{ m}$).
    • max_bank_angle_deg: İzin verilen maksimum aerodinamik yatış açısı ($30.0^\circ$).
    • search_speed_kmh: Dairesel arama hızı ($60.0\text{ km/h}$).
    • cruise_speed_ratio: Seyir hızı katsayısı ($3.33 \to 200\text{ km/h}$).
    • engage_speed_ratio: Dalış hızı katsayısı ($2.5 \to 150\text{ km/h}$).
    • kp_yaw / kp_lateral: Görsel servo referans kazanç değerleri.
  • config/camera_params.yaml:

    • confidence_threshold: YOLOv8 hedef tespit kilitlenme eşiği ($0.60$).
    • image_width / image_height: Kamera giriş çözünürlüğü ($640 \times 480$).
    • fps: Yayın frekansı ($30\text{ FPS}$).

🛡️ Fail-Safe Matrix / Güvenlik Mimarisi

Hata Senaryosu Algılama Mekanizması Otonom Eylem
Data Link Kopması gcs_listener Watchdog ($&gt;2\text{ sn}$ sessizlik) Güvenli Loiter moduna geçiş, süre aşımında otonom RTL (Eve Dönüş)
Görüntü Akışı Donması vision_node Stale Frame Checker ENGAGE dalışını durdur, $10\text{ m/s}$ acil tırmanış ile pas geç (Wave-off)
Hedef Kilit Kaybı $z_{\text{lock}} = 0$ Sinyali Sabit hover pozisyonundan dairesel arama yörüngesine (SEARCH) geri dönüş
Kritik İrtifa İhlali EKF2 Z-Pozisyon Eşiği ($&lt;5\text{ m}$ yer irtifası) Acil motor kesme / çarpma emniyeti

📜 Lisans & Katkı

Bu proje MIT lisansı altında sunulmaktadır. Savunma sanayii, otonom hava araçları ve robotik araştırmaları için modüler bir referans mimarisi sağlar.

About

Autonomous VTOL Loitering Munition flight control system built with ROS 2 Humble, PX4 Offboard, YOLOv8 target acquisition, and visual servo terminal guidance.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages