Tarih: 9 Mayıs 2026
Özellik: Real-time Enemy UAV (UAV6) tracking with Slave 2 autonomous pursuit
-
Tüm Uçakları Havalandır
- Terminal 1'de
bash baslat.shile Gazebo + tüm SITL instance'ları başlat
- Terminal 1'de
-
Master Controller Çalıştır
- Terminal 2'de
python3 uavs/uav1/scripts/swarm_master_controller.pyçalıştır
- Terminal 2'de
-
Formation Kurulması
- Master controller'da
armkomutu gir (tüm uçaklar ARMED) takeoffkomutu gir (50m'ye kalk)- Tüm slave'ler master'i takip etmeye başlar
- Master controller'da
-
Enemy Tracking Başlat ⭐
- Master controller'da
enemy_track onkomutu gir - Slave 2, enemy UAV'nin 20m arkasında otonom olarak takip etmeye başlar
- Master controller'da
-
İzleme Durdurmak
enemy_track offkomutu gir
>>> arm # Tüm uçakları ARM et
>>> takeoff # 50m'ye kalk (formation başlat)
>>> enemy_track on # 🎯 Slave 2 enemy tracking (20m arkada)
>>> enemy_track off # Tracking'i durdur
>>> mission status # Tüm uçakların durumunu göster
>>> status # Detaylı status
>>> exit # Çık
Artırıldı (daha geniş formation):
2: (-4.0, -2.0) # Sol arka: 4m south, 2m west
3: (-4.0, 2.0) # Sağ arka: 4m south, 2m east
4: (-6.0, -2.0) # Sol flanş: 6m south, 2m west
5: (-6.0, 2.0) # Sağ flanş: 6m south, 2m eastEski (daha yakın):
2: (-1.5, -0.8)
3: (-1.5, 0.8)
4: (-3.0, -0.8)
5: (-3.0, 0.8)
def track_enemy_slave2(self):
"""Slave 2'yi enemy'nin 20m arkasında sürekli takip etmesini sağla"""
# - Enemy konumunu sürekli oku
# - Slave 2'nin hedef konumunu hesapla (20m behind)
# - Her 2 saniyede bir güncelle
# - Mesafeyi logla (5 güncellede bir)Algoritma:
- Enemy UAV'nin konumunu al
- 20m arkasında takip konumunu hesapla:
enemy_position - 20m (north) - Slave 2'ye
simple_goto(target_location)komutu gönder - 2 saniye bekle
- Tekrarla
Haversine formülü kullanarak GPS mesafeleri hesaplanır:
distance = earth_radius * central_angle
Master Controller (UAV1)
↓
└─→ arm_all() [Tüm uçak ARMED]
↓
└─→ takeoff_all() [50m yüksek, tüm slave'ler master takip]
↓
└─→ enemy_track on 🎯 [Slave 2 enemy tracking START]
↓
track_enemy_slave2()
↓
while enemy_tracking_active:
├─→ enemy_position = get_enemy_location()
├─→ target_location = 20m_behind_enemy
├─→ slave2.simple_goto(target_location)
└─→ sleep(2)
↓
└─→ enemy_track off 🛑 [Slave 2 enemy tracking STOP]
- Enemy: Lat=-35.365, Lon=149.166, Alt=50m
- Slave 2: Lat=-35.360, Lon=149.160, Alt=50m (Master'in sol arkasında)
- Her 2 saniyede: Enemy'nin
20m güneypozisyonunu hesapla - Slave 2'ye
simple_goto()komutu gönder → ArduPilot autopilot alır - Slave 2 otomatik olarak target pozisyonuna yönelir
Zaman │ Enemy Pos │ Slave 2 Target Pos │ Mesafe
────────┼────────────────────────┼──────────────────────────┼─────────
0s │ (35.365, 149.166) │ (35.365-0.0002, 149.166) │ 20m
2s │ (35.364, 149.167) │ (35.364-0.0002, 149.167) │ ~20m
4s │ (35.363, 149.168) │ (35.363-0.0002, 149.168) │ ~20m
... │ ... │ ... │ ~20m
- Formation Takip: Diğer slave'ler (3,4,5) her zaman master'i takip etmeye devam eder
- Slave 2 Dual Mode:
- Normal durum: Master'i (-4, -2) offsetinde takip
- Enemy tracking aktif: Enemy'nin 20m arkasında takip
- Autonomous Pursuit: Slave 2, ArduPilot autopilot sayesinde otonom olarak takip eder
- Mesafe Loglama: Her 10 saniyede bir mesafe yazdırılır (5 güncelleme × 2 saniye)
# Enemy bağlı değilse
❌ Enemy vehicle veya Slave 2 bağlı değil
# Telemetri hazır değilse (GPS/altitude bilgisi yok)
→ 1 saniye bekle, tekrar dene
# Exception oluşursa
❌ Tracking hatası: [exception details]
→ Gracefully exit, cleanup
# User Ctrl+C basarsa
🛑 Slave 2 tracking durdurulduEğer farklı bir offset kullanmak istersen (örn. 30m arkada, 5m solda):
# track_enemy_slave2() fonksiyonunda satır 687'yi değiştir:
# Şu anki (20m arkada, center):
target_loc = self.get_location_metres(
LocationGlobalRelative(enemy_loc.lat, enemy_loc.lon, enemy_alt),
-20, # 20m behind
0, # Center
enemy_alt
)
# Yeni örnek (30m arkada, 5m solda):
target_loc = self.get_location_metres(
LocationGlobalRelative(enemy_loc.lat, enemy_loc.lon, enemy_alt),
-30, # 30m behind
-5, # 5m west (left)
enemy_alt
)# Terminal 1: Gazebo + SITL başlat
bash baslat.sh
# Terminal 2: Master controller
python3 uavs/uav1/scripts/swarm_master_controller.py
# Master controller'da:
>>> arm
>>> takeoff
>>> mission status
>>> enemy_track on # 🎯 Slave 2 enemy tracking START!
# Biraz bekle, tracking durumunu gör
[SLAVE2_TRACK] Enemy: (-35.365, 149.166) | Slave2 distance: 19.8m
[SLAVE2_TRACK] Enemy: (-35.364, 149.167) | Slave2 distance: 20.1m
>>> enemy_track off # Tracking STOP
>>> exit- Formation offsets artırıldı (1.5→4, 3→6 metre)
-
track_enemy_slave2()fonksiyonu eklendi -
_calculate_distance()(Haversine) eklendi -
enemy_track on/offkomutları interaktif menu'ye eklendi - Continuous 20m tracking loop implemente edildi
- Distance loglama her 10 saniyede yapılıyor
- Error handling ve cleanup eklendi
- Syntax check passed ✓
Teknoloji Stack:
- DroneKit: Vehicle kontrol API
- ArduPilot: Autopilot ve flight control
- Gazebo: Physics simulation
- GPS/Haversine: Konumlar arası mesafe
Key Components:
swarm_master_controller.py- Ana swarm koordinatörütrack_enemy_slave2()- Real-time enemy tracking loopsimple_goto()- ArduPilot autopilot komut gönderme- Continuous update loop (2 saniye interval)
Hazırsın! Senaryo'yu dene! 🚀