13. hafta / 14
Hava robotları: uçuş denetimi, otonomi ve sürüler
Araçlar: Bu platform, PX4 SITL + Gazebo, MAVSDK
Bu haftanın sonunda
- Dört rotorun itki, yuvarlanma (roll), yunuslama (pitch) ve sapma (yaw) hareketlerini nasıl ürettiğini açıklamak
- Motor karıştırmayı (motor mixing) ve kademeli (cascaded) uçuş kontrolünü açıklamak
- Simülasyonda bir konum ve yönelim (attitude) denetleyicisini ayarlamak
- Döngüde yazılım (software-in-the-loop) simülasyonunda otonom bir görev çalıştırmak
- Bir dronu MAVLink üzerinden koddan kontrol etmek
- Merkeziyetsiz sürü davranışını açıklamak
Ders notları
Dört rotorlu bir hava aracında dört adet sabit hatveli pervane bulunur: reaksiyon torklarının birbirini sıfırlaması için ikisi saat yönünde, ikisi saat yönünün tersine döner. Her biri T = kf ω² itkisi üretir.
Dört motordan dört komuta
- Gaz (throttle): tüm motorlar hızlanır, dron yükselir.
- Yuvarlanma / yunuslama (roll / pitch): bir taraf diğerinden hızlı döner, dron eğilir.
- Sapma (yaw): saat yönündeki çift, saat yönünün tersindeki çiftten hızlı döner, dron kendi ekseni etrafında döner.
Dron eksik eyleyicili (underactuated) bir sistemdir: 6 serbestlik derecesi vardır ama yalnızca 4 girişi vardır. Yana hareket etmek için önce eğilmesi gerekir; bu yüzden konum kontrolü yönelim kontrolü üzerinden çalışmak zorundadır.
Kademeli kontrol
Her döngü, içindeki döngüye bir referans değer (setpoint) gönderir. İç döngüler, dış döngülerden çok daha hızlı (tipik olarak 5 ila 10 kat) olmalıdır; uçuş denetleyicileri açısal hız döngüsünü 1 kHz veya daha yüksek frekansta çalıştırır. Simülatörde yönelim kazançlarını düşürmek iç döngüyü fazla yavaşlatır ve tüm dron salınıma girer.
Donanım ve yazılım
Bir uçuş denetleyicisi (Pixhawk, Matek ve benzerleri) IMU, barometre, GPS ve pusulayı okur, bunları bir EKF ile birleştirir ve kontrol döngülerini çalıştırır. İki ana açık kaynak donanım yazılımı (firmware) PX4 ve ArduPilot'tur. Yaygın uçuş modları: Stabilize (pilot açıları kontrol eder), Altitude hold (irtifa tutma), Position hold / Loiter (konum tutma) ve Auto (görevler).
Güvenlik: tezgâh testlerinde pervaneleri sökün, arıza emniyetlerini (failsafe) her zaman yapılandırın ve yerel mevzuata uyun (Türkiye'de SHGM).
Otonomi ve sürüler
Otonom dronlar işi genellikle bir uçuş denetleyicisi (dengeleme, gerçek zamanlı) ile Raspberry Pi veya Jetson gibi bir yardımcı bilgisayar (companion computer) (görü, planlama, yapay zekâ) arasında paylaştırır. Bunlar hafif bir mesaj protokolü olan MAVLink üzerinden haberleşir.
Döngüde yazılım (SITL)
PX4 ve ArduPilot, Gazebo'daki simüle edilmiş bir araçla dizüstü bilgisayarınızda çalışabilir. Kodunuz gerçek bir drona bağlanır gibi bağlanır; böylece görevleri donanım olmadan ve risk almadan test edebilirsiniz. Kütüphaneler: MAVSDK (basit, Python ve C++), pymavlink (düşük seviye), MAVROS (ROS köprüsü).
Görevler ve güvenlik
- Kalkış, hedefe gitme (goto), bekleme (loiter) ve iniş öğelerinden oluşan ara nokta (waypoint) görevleri
- Dronun geçmeyeceği sanal çitler (geofence)
- Arıza emniyetleri (failsafe): düşük pilde veya bağlantı kaybında kalkış noktasına dönüş
- Offboard modu: programınız konum veya hız referans değerlerini sürekli gönderir
Sürüler
Çok sayıda dronun merkezi kontrolü ölçeklenmez ve tek bir hata noktası barındırır. Merkeziyetsiz sürülerde her ajan, yalnızca komşularını kullanarak yerel kurallara uyar. Reynolds'ın boids modeli üç kural kullanır:
- Ayrılma (separation): çok yakındaki komşulardan uzaklaş.
- Hizalanma (alignment): komşuların ortalama yönelimine uy.
- Birlik (cohesion): komşuların merkezine doğru hareket et.
Kol uçuşu (formation flying) ve uzlaşı (consensus) algoritmaları da aynı fikir üzerine kuruludur.
Derinlemesine
Çözümlü örnek: askıda kalma itkisi ve rotor hızı
1,5 kg'lık bir quadrotor askıda kalmak (hover) için mg = 1,5 × 9,81 = 14,7 N üretmelidir; yani her motor 3,68 N, yaklaşık 375 gram-kuvvet verir. Yaygın bir tasarım kuralı en az 2 itki/ağırlık oranıdır; bu yüzden her motor ve pervane yaklaşık 750 gf'ye ulaşmalıdır. Böylece askıda kalma yaklaşık yarım itkiye denk gelir ve kontrol ile rüzgâr için pay kalır. İtki katsayısı kf = 1,5 × 10−5 N·s²/rad² ile:
T, ω² ile büyüdüğü için itkiyi iki katına çıkarmak rotor hızının yalnızca √2 ≈ 1,41 katını gerektirir. Bu doğrusalsızlık, karıştırıcının (mixer) itki cinsinden çalışmasının ve PX4'ün ESC komutundan önce bir itki eğrisi uygulamasının nedenidir.
Çözümlü örnek: ivmelenmek için eğim
İrtifayı korurken yatayda ax ile ivmelenmek için drone φ kadar eğilir; böylece itkinin yatay bileşeni m ax'i sağlar, düşey bileşeni ise hâlâ mg'yi taşır:
ax = 2 m/s² için φ = atan(2 / 9,81) ≈ 11,5° olur ve toplam itki 14,7 N'den 15,0 N'ye çıkar. Konum denetleyicisinin çıktısı tam olarak budur: istenen bir ivme, bir yönelim referansına ve bir toplam itkiye dönüşür.
X tipi quad karıştırıcısı
| Motor (PX4) | Konum, dönüş | Sağa yatış | Burun yukarı | Saat yönünde sapma |
|---|---|---|---|---|
| 1 | ön sağ, saat yönü tersi | − | + | + |
| 2 | arka sol, saat yönü tersi | + | − | + |
| 3 | ön sol, saat yönü | + | + | − |
| 4 | arka sağ, saat yönü | − | − | − |
Her motor komutu, toplam itki artı işaretli yatış (roll), yunuslama (pitch) ve sapma (yaw) terimlerinden oluşur. Sapma tepki torkundan gelir: saat yönü tersine dönen pervaneleri hızlandırmak gövdeyi saat yönünde büker. Bir motor doyuma ulaştığında genellikle önce sapma yetkisinden vazgeçilir, çünkü yatış veya yunuslamayı kaybetmek aracı düşürür.
Uçuş süresi ve zamanlama bütçeleri
20 A askıda kalma akımına sahip 4S 5000 mAh bir paket, kapasitenin %80'i kullanılırsa 0,8 × 5 Ah / 20 A = 0,2 saat = 12 dakika verir. Tipik PX4 döngü hızları açısal hız döngüsü için yaklaşık 1 kHz, yönelim için 250 Hz, hız ve konum için 50 Hz'dir. Offboard modunda PX4, modu kabul etmeden önce ve modda kaldığı sürece 2 Hz'den hızlı bir referans akışı ister; akış durursa offboard modundan çıkar ve yapılandırılmış güvenlik davranışını (failsafe) çalıştırır.
Sürüler neden yereldir?
Her drone diğer her drone ile konuşursa bağlantı sayısı N(N − 1) olur: 10 drone için 90, 100 drone için 9 900. Her ajanı en yakın k komşusuyla sınırlamak yükü N·k düzeyinde tutar; boids ve uzlaşı (consensus) algoritmalarının yaptığı budur.
Simülasyonlar
Quadrotor uçuş denetimi (2B)
Kaskad denetleyicili düzlemsel quadrotor: dışta konum PID, içte yönelim PD. Hedef koymak için gökyüzüne tıkla, ya da görev kipine geçip ara noktaları yerleştir ve görevi başlat.
Sürü davranışı (boids)
Her drone yalnız yakın komşularına bakarak üç yerel kurala uyar: uzak dur (ayrılma), yönünü eşle (hizalanma) ve grupla kal (birlik). Sürünün hedefini taşımak için tıkla.
Kod
// M1 sağ ön (CCW), M2 sol arka (CCW), M3 sol ön (CW), M4 sağ arka (CW)
// roll > 0: sağa yuvarlanma, pitch > 0: burun yukarı, yaw > 0: yukarıdan bakıldığında saat yönünde
float m1 = thrust - roll + pitch + yaw;
float m2 = thrust + roll - pitch + yaw;
float m3 = thrust + roll + pitch - yaw;
float m4 = thrust - roll - pitch - yaw;
// İşaret kuralları firmware'ler arasında farklılık gösterir; uçuş denetleyicinizin dokümantasyonunu mutlaka kontrol edin.import asyncio
from mavsdk import System
async def main():
drone = System()
await drone.connect(system_address="udp://:14540") # PX4 SITL varsayılanı
async for state in drone.core.connection_state():
if state.is_connected:
break
await drone.action.arm()
await drone.action.set_takeoff_altitude(5.0)
await drone.action.takeoff()
await asyncio.sleep(8)
# enlem, boylam, mutlak irtifa (m AMSL), yaw (derece)
await drone.action.goto_location(47.3980, 8.5460, 500.0, 0)
await asyncio.sleep(15)
await drone.action.return_to_launch()
asyncio.run(main())Sık yapılan hatalar
- NED (PX4, MAVLink) ve ENU (ROS) çerçevelerini karıştırmak; irtifanın işareti ters çıkar, x ve y yer değiştirir.
- Offboard referans akışını durdurmak; PX4 offboard modundan çıkar ve bir güvenlik davranışı tetikler.
- Açısal hız ve yönelim döngüleri kararlı hâle gelmeden konum döngüsünü ayarlamak.
- İtkinin motor hızıyla veya gazla doğrusal olduğunu varsaymak; oysa rotor hızının karesiyle büyür.
- Güvenlik davranışlarını (bağlantı kaybı, düşük batarya, coğrafi sınır) ilk kez SITL yerine gerçek bir araçta test etmek.
- Uçuş süresini bataryanın %100 kapasitesinden tahmin etmek ve gerilim çökmesini yok saymak.
Yazılım mühendisliği bağlantısı
Hava robotları test piramidini somutlaştırır: karıştırıcı ve görev mantığı için birim testleri, entegrasyon için döngüde yazılım (software-in-the-loop, Gazebo ile PX4 SITL), gerçek uçuş denetleyicisi için döngüde donanım ve ancak bundan sonra gerçek uçuşlar. Her seviye bir sonrakinden daha ucuz ve güvenlidir, bu yüzden hataların çoğu en altta ölmelidir.
- Bir tehlike analiziyle başlayın: neyin ters gidebileceğini listeleyin (bağlantı kaybı, GPS kaybı, düşük batarya, alandan çıkma), ardından her tehlikeyi bir güvenlik davranışı ve bir testi olan bir güvenlik gereksinimine dönüştürün.
- SITL arayüzsüz ve simülatörle adım kilitli (lockstep) çalışır; böylece aynı görev testi her çekme isteğinde CI'da çalışır.
- Uçuş kayıtları (ULog) test kanıtıdır: onları otomatik olarak analiz edin ve grafikleri çekme isteğine ekleyin.
Dönem projesi uygulaması: kalkış yapan, üç ara noktadan geçen, görevin ortasında bağlantı kaybını simüle eden ve drone'un eve dönüp evin 2 m yakınına indiğini doğrulayan bir MAVSDK betiği yazın; onu CI'da arayüzsüz çalıştırın.
Laboratuvar görevi
(1) Varsayılan kazançlarla birkaç hedefe uçun. (2) Konum Ki = 0 iken rüzgârı 2 N'a ayarlayın ve kalıcı sapmayı ölçün; ardından Ki'yi artırın. (3) Dron salınıma girene kadar yönelim Kd ve Kp değerlerini düşürün ve nedenini açıklayın. Dron simülatöründe beş ara noktalı bir görev planlayın (görev moduna geçin) ve bunu rüzgârlı ve rüzgârsız olarak uçurun. Sürü simülatöründe sıkı bir sürü oluşumu sağlayan ağırlıkları ve sürünün dağılmasına yol açan ağırlıkları bulun. İsteğe bağlı: PX4 SITL'i Docker'da çalıştırın ve MAVSDK betiğiyle uçuş yapın.
Kendini sına
2 kg'lık bir quadrotor askıda duruyor. Dört motorunun her biri ne kadar itki üretir?
Bir quadrotor 20° eğikken irtifasını koruyor. Bu ne kadar yatay ivme üretir?
Rotor itkisi T = k_f ω² bağıntısına uyar. İtkiyi iki katına çıkarmak için rotor hızı hangi katsayıyla artmalıdır?
MAVSDK betiğiniz offboard referansları göndermeyi bırakıyor. PX4 ne yapar?
Bu hafta dönem projesinde
- Otonom kara aracı: Bütünleştirme ve SIL testleri. Tüm kabul ölçütleri otomatik senaryolarla (Webots --batch) ölçülüyor.
- Otonom drone görevi: Rüzgâr ve failsafe testleri. Rüzgâr ve bağlantı kesilmesi senaryoları otomatik çalışıyor.
- Görsel kılavuzlu robot kol: Bütünleştirme ve ölçüm. 10 küplük otomatik deneme; başarı oranı ve konum hatası grafiği.
Ödev
Simülatörde kullanılan düzlemsel dört rotor denklemlerini (x, z, φ) Newton yasalarından türetin ve denetleyicinin istenen ivmeden istenen eğim açısını nasıl hesapladığını gösterin. Boids modelini Python'da (Matplotlib veya pygame) uygulayın ve dördüncü bir kural ekleyin: dairesel engellerden kaçınma. Kısa bir video veya GIF teslim edin.