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
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.
| Yetenek | Teknik Karşılığı | Avantajı |
|---|---|---|
| Pist Bağımsız Operasyon | Multikopter VTOL Modu ( |
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ü ( |
Rüzgar sürüklenmelerini kompanse eden hassas hedef intikali |
| Dinamik Yörünge (Orbit) |
|
Yapısal g-limitlerini aşmadan hıza göre otomatik yarıçap ölçekleme |
| AI Optik Kilitlenme | Ultralytics YOLOv8 ( |
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 |
Yüksek hızda kontrol yüzeyi aşırı tepkilerini engelleyen dinamik kazanç |
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
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
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
Arama yarıçapı (
-
$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.
Görsel servo algoritması, hedefin optik eksenden olan piksel kaçıklığını (
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]
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
- T : TAKEOFF — Motorları arm eder ve dikey kalkışı başlatır (Sadece
IDLEmodunda). - 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ış.
- İş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
sudo apt update && sudo apt install -y \
python3-pip \
python3-colcon-common-extensions \
ros-humble-cv-bridge \
ros-humble-image-transportpip install ultralytics opencv-python-headless torch torchvision numpy pyyaml# 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.bashTü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# 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.pySistem, 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}$ ).
-
| Hata Senaryosu | Algılama Mekanizması | Otonom Eylem |
|---|---|---|
| Data Link Kopması |
gcs_listener Watchdog ( |
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, |
| Hedef Kilit Kaybı |
|
Sabit hover pozisyonundan dairesel arama yörüngesine (SEARCH) geri dönüş |
| Kritik İrtifa İhlali | EKF2 Z-Pozisyon Eşiği ( |
Acil motor kesme / çarpma emniyeti |
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.