Giriş

"RTOS kullandın mı?" sorusu, gömülü yazılım mülakatlarının klasiği. Ama bu soruya gerçekten anlamlı bir cevap verebilmek için önce şunu anlamak gerekiyor: RTOS'u neden kullanıyorsunuz?

Drone otopilot yazılımı aynı anda onlarca farklı görevi yönetmek zorunda. IMU'dan saniyede 400 kez veri okumak, bu veriden anlık PID hesabı yapmak, ESC'lere motor komutları göndermek, GPS ve barometre verilerini EKF filtresinden geçirmek, DroneCAN üzerindeki sensörlerle konuşmak, yer istasyonuna MAVLink telemetri paketleri atmak... Ve tüm bunları deterministik, öngörülebilir zamanlama ile yapmak.

İşte bu noktada RTOS devreye girer: görevler arasındaki zamanlamayı ve önceliklendirmeyi çözer. Kritik döngüler her zaman önce koşar; düşük öncelikli işler ancak işlemci boşta kaldığında çalışır.

RTOS Olmadan Ne Olur? Süperloop Yaklaşımı

FPV racing sistemlerini düşünün. Betaflight, KISS — bunların neredeyse tamamı RTOS kullanmaz. Bunun yerine main loop içinde her şeyi sırayla çalıştıran bir süperloop mantığı var:

while (true) {
    scheduler();  // hangi task'ın sırası geldi?
}

Bu yaklaşım FPV için yeterli çünkü sistem tek bir şey yapıyor: mümkün olduğunca hızlı PID döngüsü koşturmak. 8 kHz döngü frekansı = 125 mikrosaniye — bütün döngü bu süreye sığmak zorunda.

Ama multirotor otopilotta bu yaklaşım çöküyor. Bir görevi bloklayan işlem (yavaş bir SD kart yazımı gibi), IMU okumasını geciktirebilir. Bu da tutarsız PID hesaplamasına, titreyen uçuşa ya da en kötü senaryoda kazaya yol açar.

Multirotor Otopilotta Görev Öncelik Haritası

Gerçek bir uçuş kontrol yazılımındaki görev hiyerarşisi aşağıdaki gibidir. Her görevin farklı bir frekansı ve önceliği var; RTOS bu önceliklere göre işlemci zamanını dağıtır:

ÖncelikGörevAçıklamaFrekans
P1 — KritikIMU okumaHam ivme/gyro verisi400 Hz
P2PID / attitude ctrlRoll, pitch, yaw döngüsü400 Hz
P3ESC / motor outputPWM / DSHOT komutları400 Hz
P4EKF / GPS füzyonKonum tahmini, navigasyon50 Hz
P5DroneCAN pollingGPS, manyetometre, ESC10–50 Hz
P6MAVLink telemetriGCS'e heartbeat, durum10 Hz
P7 — DüşükLogging / sprayUçuş kaydı, ilaçlama1–5 Hz
Preemptive Scheduler

Yüksek öncelikli bir görev uyanırsa, düşük öncelikli görev yarıda kesilir ve işlemci hemen yüksek öncelikliyi çalıştırır. Bu sayede P1 (IMU) her zaman zamanında çalışır.

FreeRTOS

2003'ten bu yana gömülü yazılımın en yaygın RTOS'u. Amazon tarafından geliştirilen ve MIT lisansıyla dağıtılan FreeRTOS, minimalist tasarımıyla öne çıkıyor.

Güçlü yanları

Zayıf yanları

Not

ArduPilot, FreeRTOS değil ChibiOS kullanıyor — ama mimari olarak çok benzer. STM32 için optimize edilmiş, hafif preemptive kernel. SITL'de ise native Linux scheduler devreye giriyor.

NuttX

PX4 Autopilot'un resmi çekirdeği. Apache 2.0 lisansıyla dağıtılan NuttX, gerçek bir POSIX-compliant RTOS olmasıyla diğerlerinden ayrılıyor.

Güçlü yanları

Neden PX4 NuttX seçti?

POSIX API sayesinde bir PX4 modülünü Linux üzerinde geliştirip test edebilir, ardından minimal değişiklikle Pixhawk'a taşıyabilirsiniz. Bu, özellikle büyük açık kaynak projelerinde contributor sayısını ciddi ölçüde artırıyor.

Zephyr

Linux Foundation çatısı altında geliştirilen Zephyr, 2016'dan bu yana hızla büyüyen modern bir RTOS. IoT ve gömülü dünyada "bir sonraki FreeRTOS" olma iddiasıyla ilerliyor.

Güçlü yanları

UAV ekosistemindeki durumu

FPV'lerde Gerçekten RTOS Yok mu?

Teknik olarak doğru — ama biraz nüanslı. Betaflight'ta bir scheduler var, ama bu bir RTOS scheduler'ı değil. Elle yazılmış, öncelik tabanlı bir görev sıralaması.

// Betaflight scheduler mantığı (sadeleştirilmiş)
while (true) {
    scheduler();  // hangi task'ın sırası geldi?
}

Asıl kritik nokta: IMU okuma ve PID hesabı scheduler'dan bile bağımsız. Bu iki görev doğrudan gyro interrupt handler (ISR) içinde koşuyor.

Neden RTOS almıyor?

Özet

FPV'de RTOS yok ama "hiçbir şey yok" da değil. Özel bir scheduler ve interrupt-driven mimari mevcut. Genel amaçlı RTOS abstraksiyon katmanından bilinçli olarak kaçınılmış — performans ve sadelik adına yapılmış bir tasarım tercihidir.

Karşılaştırma

KriterFreeRTOSNuttXZephyr
Kernel boyutu~6–12 KB~50–200 KB~8–512 KB
POSIX uyumuKısmiTamKısmi+
Öğrenme eğrisiDüşükDikOrta
RAM kullanımıÇok azFazlaOrta
Uçuşta olgunlukYaygınStandartBüyüyor
UAV kullanımıArduPilot/ChibiOSPX4 resmiELRS / araştırma

Sonuç

RTOS seçimi çoğu zaman teknik performanstan çok ekosistem uyumluluğu ve geliştirici deneyimi tarafından belirleniyor. PX4 ile çalışıyorsanız NuttX zaten sizi bekliyor. ArduPilot ile çalışıyorsanız ChibiOS/FreeRTOS paradigması. Yeni bir şey inşa ediyorsanız Zephyr ciddi bir alternatif.

Ama şunu unutmayın: hangi RTOS'u seçerseniz seçin, deterministik zamanlama ve görev önceliklendirmesi konusundaki temel anlayışı edinmeden sadece araç bilmek yeterli değil. RTOS'u anlamak, uçuş yazılımının nasıl nefes aldığını anlamak demek.

#RTOS#FreeRTOS#NuttX#Zephyr#PX4#ArduPilot#GömülüYazılım#UAV#STM32