Gazebo + PX4 SITLDönem projesi
Otonom drone görevi
PX4 uçuş yazılımıyla simülasyonda kalkış, ara nokta görevi, aşağı bakan kamerayla işaretçi (ArUco) bulup üzerine hassas iniş.
Senaryo
Drone kalkar, dört ara noktadan geçer, iniş bölgesine gelince aşağı bakan kamerayla ArUco işaretçisini arar, görsel servo ile üzerine hizalanıp iner. Bağlantı kesilirse ya da batarya düşerse geri döner (failsafe).
Kabul ölçütleri
- Görev 5 denemede 5 kez tamamlanıyor; her ara noktaya 1 m içinde varılıyor.
- İniş noktası işaretçi merkezine 0,3 m'den yakın (5 denemenin ortalaması).
- Rüzgâr eklenince (Gazebo wind plugin, 3 m/s) görev yine tamamlanıyor.
- Bağlantı kesilmesi senaryosunda drone 10 sn içinde geri dönüş kipine geçiyor.
Simülasyonu kurmak
- Ubuntu 22.04/24.04 (ya da WSL2) üzerinde PX4-Autopilot deposunu klonla ve Tools/setup/ubuntu.sh betiğini çalıştır.
- `make px4_sitl gz_x500_mono_cam_down` ile aşağı bakan kameralı x500'ü Gazebo Harmonic'te başlat.
- Python ortamına mavsdk, opencv-contrib-python kur; QGroundControl ile aracı izle.
- Kamera görüntüsünü ros_gz_bridge (ROS 2 Jazzy) ya da gz-transport Python bağlamasıyla al.
- Görev mantığını durum makinesi olarak yaz: KALKIS, ROTA, ARAMA, HIZALAMA, INIS, GERI_DONUS.
Başlangıç kodu
# PX4 SITL: make px4_sitl gz_x500_mono_cam_down (Gazebo Harmonic)
import asyncio
from mavsdk import System
WAYPOINTS = [(0.0001, 0.0), (0.0001, 0.0001), (0.0, 0.0001), (0.0, 0.0)] # ev noktasına göre derece farkı
async def main():
drone = System()
await drone.connect(system_address="udpin://0.0.0.0:14540")
async for s in drone.core.connection_state():
if s.is_connected:
break
async for h in drone.telemetry.health():
if h.is_global_position_ok and h.is_home_position_ok:
break
home = await anext(drone.telemetry.home())
await drone.action.set_takeoff_altitude(10)
await drone.action.arm()
await drone.action.takeoff()
await asyncio.sleep(8)
for dlat, dlon in WAYPOINTS: # ROTA durumu
await drone.action.goto_location(home.latitude_deg + dlat, home.longitude_deg + dlon,
home.absolute_altitude_m + 10, 0)
await asyncio.sleep(10) # TODO: mesafe 1 m'nin altına inene kadar bekle
# TODO: ARAMA ve HIZALAMA: ArUco hatasından offboard hız komutları
await drone.action.land()
asyncio.run(main())Ara teslimler
- 8. haftaÖneri ve gereksinimler
İki sayfalık öneri: test edilebilir kabul ölçütleri, ilk mimari (durum makinesi ya da ROS 2 grafiği), risk listesi, haftalık plan. Depo açıldı, CI ilk testi çalıştırıyor.
Ara sınav - 9. haftaSITL çalışıyor
PX4 SITL + Gazebo kuruldu; MAVSDK ile kalkış ve iniş betiği.
Yol planlama ve konum belirleme - 10. haftaİşaretçi tespiti
Kamera görüntüsünden ArUco pozu; piksel hatası ve tahmini mesafe kaydı.
Robotlar için bilgisayarlı görü - 11. haftaAra kontrol: ara nokta görevi
Dört ara noktalı görev ve durum makinesi; kayıt ve harita görüntüsü.
Robotlarda derin öğrenme ve uçta yapay zekâ - 12. haftaGörsel servo
Offboard kipinde hız komutlarıyla işaretçi üzerine hizalanma; ROS 2 ya da MAVSDK mimarisi belgelendi.
ROS 2 ve simülasyon - 13. haftaRüzgâr ve failsafe testleri
Rüzgâr ve bağlantı kesilmesi senaryoları otomatik çalışıyor.
Hava robotları: uçuş denetimi, otonomi ve sürüler - 14. haftaSunum ve rapor
10 dakikalık sunum, canlı ya da kayıtlı simülasyon, kabul ölçütlerinin her biri için kanıt (grafik, kayıt, test), final raporu ve depo.
Proje sunumları