FIG. 01
KAYIT KÜNYESİ
Kategori
Yazılım
TARİH
Bir saha test günü şöyle geçiyor: sabah 7'de kalkıyorsunuz, iki saat yol gidiyorsunuz ve batarya paketlerini şarj etmeyi unutmadıysanız kurulum 40 dakika sürüyor. Sonra daha ilk AUTO görevinde hava aracı ikinci waypoint'e gitmek yerine RTL'e (Return To Launch) geçiyor. Sebep? Görev dosyasındaki irtifa referansı yanlış. Bunu çözmek 20 dakikanıza, düzeltip yeniden denemek bir bataryanıza mal oluyor.
Bu aksaklıkların ortak yanı şu: hiçbirini bulmak için uçmak gerekmiyordu. Görev planlama mantığı, mod geçişleri, failsafe (güvenli-mod) eşikleri, parametre setleri; hepsi masa başında yakalanabilir. Bunları önceden temizlemek, saha gününü gerçekten uçulması gereken işlere bırakıyor.
Bu yazıda ArduPilot SITL'i, onu Gazebo ile nasıl birleştirdiğimizi ve masa başında hangi testleri koştuğumuzu anlatıyoruz. Sonda da en az bunlar kadar önemli olan bölüm var: simülasyonun test edemediği şeyler.
SITL nedir, HITL'den farkı ne?
SITL (Software In The Loop), ArduPilot uçuş yazılımının sıradan bir C++ derleyicisiyle PC için derlenmiş hâli; hiç donanım olmadan kodun nasıl davrandığını test etmenizi sağlayan yerel (native) bir çalıştırılabilir dosya. Sensör verisi gerçek sensörler yerine bir uçuş dinamiği modelinden geliyor; kodun geri kalanı gerçek uçuşta koşanın birebir aynısı.
HITL (Hardware In The Loop) ise gerçek uçuş kontrolcüsünü kullanıyor: Pixhawk üzerinde normal firmware koşuyor, sensör verisi simülatörden kabloyla besleniyor. Teoride daha gerçekçi ama ArduPilot tarafında bu yol pratikte artık önerilen yol değil.
SITL | HITL | |
|---|---|---|
Ne koşuyor | PC için derlenmiş ArduPilot | Gerçek FC üzerindeki firmware |
Donanım gerekiyor mu | Hayır | Evet (FC + kablo) |
Zaman ölçekleme | Hızlandırılabilir: | Yalnızca gerçek zamanlı |
Debugger, statik analiz | Var | Zor |
ArduPilot desteği | Aktif, birincil yol | X-Plane ve FlightGear üzerinden, yalnızca Plane; dokümantasyon bunu arşivlenmiş ve artık desteklenmiyor olarak işaretliyor |
Ne zaman tercih edilir | Neredeyse her zaman | FC'ye özgü bir sürücü ya da donanım zamanlama sorunundan şüphelendiğinizde (onun için bile ArduPilot artık "Simulation on Hardware" yolunu işaret ediyor) |
Kısacası: SITL ile başlayın. Biz de öyle yaptık.
SITL kurulumu ve çalıştırılması
Kurulum, normal bir ArduPilot geliştirme ortamı kurmaktan farksız. Depoyu alt modülleriyle birlikte klonluyor ve ön koşul betiğini çalıştırıyorsunuz:
Not: bu betik, standart destek süresi dolmuş Ubuntu sürümlerinde (örneğin 20.04 LTS) çalışmıyor. Güncel bir LTS kullanın.
Derleme ve çalıştırma:
Buradaki bayraklar önemli:
Bayrak | Ne işe yarar |
|---|---|
| Araç tipi |
| Gövde (frame) tipi |
| MAVProxy durum konsolu |
| Harita penceresi |
| Sanal EEPROM'u siler, varsayılan parametrelerden başlar |
| Başlangıç konumu; kaynak: |
| MAVProxy olmadan başlatır (kendi istemcinizi bağlayacaksanız) |
-w bayrağını yalnızca ilk çalıştırmada ya da parametreleri gerçekten sıfırlamak istediğinizde kullanın; her seferinde geçerseniz kurduğunuz her şey uçar.
Gazebo'yu döngüye dahil etmek
SITL'in kendi yerleşik fizik modeli, görev mantığı testlerinin çoğu için yeterli. Gazebo'yu, ortamı görsel olarak görmek ve bir kameradan video akıtmak istediğimizde ekliyoruz.
ardupilot_gazebo eklentisi ikisi arasında köprü kuruyor. 2026 itibarıyla eklenti Gazebo Garden, Harmonic (LTS), Ionic ve Jetty (LTS) sürümlerini destekliyor; deponun önerisi Harmonic.
Ardından iki ortam değişkeni:
Sonra da iki terminalde:
Kritik ayrıntı şu: --model JSON. SITL ile Gazebo arasındaki veri alışverişi JSON arayüzü üzerinden yürüyor ve gövde adının şununla başlaması gerekiyor: gazebo-. Eklentinin gimbal kamerası videoyu varsayılan olarak GStreamer üzerinden şu UDP adresine akıtıyor: 127.0.0.1:5600. Bu da SIYI A8 mini'den aldığımız RTSP akışı için yedek test kaynağımız oldu.
Bağlantı katmanı: hangi port nereye gidiyor
SITL seri portlarını TCP portlarına eşliyor: seri 0–3 sırasıyla 5760–5763 oluyor. Yer kontrol istasyonu bağlantısı için varsayılan port 5760. sim_vehicle.py aynı zamanda MAVProxy'yi de başlattığında, MAVProxy bu bağlantıyı alıp yerel UDP portlarına dağıtıyor.
İstemci | Bağlantı | Notlar |
|---|---|---|
Mission Planner | TCP | MAVProxy çalışmıyorsa doğrudan bu porta bağlanın |
Mission Planner (MAVProxy çalışırken) | UDP | MAVProxy'nin varsayılan yerel çıkışlarından biri |
pymavlink betiği | UDP | İkinci yerel çıkış; GCS ile çakışmıyor |
Uzak makine |
| Ağ üzerinden ikinci bir istasyon |
MAVProxy konsolundan tipik bir kalkış ve görev dizisi:
pymavlink tarafında bağlantı kalıbı gayet sade:
Bizde bu betik, FastMosaic'in telemetri girişini besleyen kodun ta kendisi. Yani SITL ile konuşan kodla gerçek hava aracıyla konuşan kod arasındaki tek fark, bağlantı dizesi.
Neleri test ediyoruz
Senaryo | Nasıl tetiklenir | Bize ne söyler |
|---|---|---|
Waypoint sırası ve irtifa referansı |
| Görev dosyası doğru mu, hava aracı beklenen sırayı izliyor mu |
RC kaybı failsafe'i |
| Failsafe eylemi doğru mu, devreye girmesi ne kadar sürüyor |
GPS kaybı |
| EKF davranışı, mod geri düşüşü |
Rüzgâr |
| Konum tutma hatası, görev süresi |
Sensör gürültüsü |
| Titreşime yatkın bir hava aracında filtre davranışı |
PID ayarı | Kazanç parametrelerini değiştirip aynı görevi tekrarlayın | Kararlılığın hangi yöne gittiğine dair kaba bir fikir |
Zaman hızlandırma |
| Gerçek zamanın 5 katı; uzun görevleri hızla tüketmek için |
Bir uyarı: SIM_SPEEDUP için dokümantasyon, yüksek hızlandırma değerlerinde MAVProxy'nin ağ trafiğine yetişemeyebileceğini ve "Set RC override timeout" gibi hatalar ya da GCS failsafe'i görebileceğinizi belirtiyor. Çözüm basit: çarpanı düşürün.
Simülasyonun test EDEMEDİĞİ şeyler
Bu bölümü atlamayın; SITL'e fazla güvenmek, en az onu hiç kullanmamak kadar pahalıya mal olur.
Tespit başarımı. Gazebo kamerası sentetik görüntü üretiyor. Yalnızca havadan görüntülerden oluşan doğrulama setindeki 0.950'lik mAP50 değerimiz gerçek uçuş karelerinden geldi; sentetik görüntü üzerinde ölçülen bir skor sahada hiçbir şey ifade etmez. Model doğrulaması gerçek veriyle yapılır.
Companion computer yükü. Jetson Orin NX üzerindeki 15-20 FPS'lik çıkarım hızı, termal throttling ve RTSP gecikmesi masaüstünde ölçülemez.
Titreşim, EMI, gerçek sensör kusurları.
SIM_ACC_RNDgürültü ekliyor ama gövdenizin rezonans frekansı hakkında hiçbir şey bilmiyor.Mekanik. Bırakma servosu, gimbal bağlantısı, kablo gerilimi: hiçbiri simülasyonda yok. Sahada ~20 m'den yaptığımız otonom airdrop testinden simülasyonun yeniden üretebildiği tek şey, "servo komutu doğru anda çıktı mı" sorusu.
Telsiz menzili ve gerçek link kalitesi. localhost'ta paket kaybı olmaz.
Sık düşülen tuzaklar
Parametreleri sahaya taşımayı unutmak. SITL'de bulduğunuz iyi failsafe ayarı kendi kendine gerçek hava aracına geçmiyor. Parametre dosyasını sürüm kontrolünde tutun.
-w'yi her çalıştırmada geçmek. Sanal EEPROM siliniyor ve bir önceki oturumda kurduğunuz her şey gidiyor.Yanlış gövde adı. Gazebo ile birlikte gövde adının şununla başlaması gerekiyor:
gazebo-ve--model JSONgeçmeniz şart; aksi hâlde SITL kendi iç modeliyle uçuyor, Gazebo'daki araç hiç kıpırdamıyor ve neden hiçbir şeyin çalışmadığını uzun uzun arıyorsunuz.Ortam değişkenlerini kalıcı hâle getirmemek.
GZ_SIM_SYSTEM_PLUGIN_PATHveGZ_SIM_RESOURCE_PATHyeni bir terminalde kayboluyor. Bunları şuraya yazın:.bashrc.Port çakışmaları. Aynı makinede hem Mission Planner'ı hem de kendi betiğinizi 14550'ye bağlamaya çalışmak. İkincisini 14551'e alın.
Simülasyonda geçen bir testi "doğrulandı" saymak. SITL'de geçmek uçmaya hazır olduğunuz anlamına gelmiyor; sahaya çıkmaya hazır olduğunuz anlamına geliyor.
Pratik özet
Önce düz SITL, sonra Gazebo. Görev mantığı, mod geçişi ve failsafe testlerinin çoğu Gazebo'ya ihtiyaç duymuyor; kurulum yükünü boşuna sırtlamayın.
Bağlantı dizesi dışında hiçbir şeyi değiştirmeyin. Yer yazılımınız SITL'e
udpin:localhost:14551ile bağlanıyorsa, gerçek hava aracına da aynı kodla bağlanmalı. Birbirinden ayrışan iki kod yolu sahada sürpriz üretir.Failsafe senaryolarını kontrol listesi olarak yazın. Her firmware güncellemesinden sonra
SIM_RC_FAIL, GPS kapalı ve rüzgâr testlerini tekrarlayın. Beş dakikalık iş.Parametre setini tek bir kaynaktan yönetin. SITL'de ayarlayıp sahada uçtuğunuz değerler aynı dosyadan çıkmalı.
Simülasyonun sınırlarını yazılı tutun. "Bu test SITL'de yapılamaz" listesi, saha günü vaktinizin nereye gideceğine gerçekten karar veren belgedir.
