Python kodu durunca drone RTL yapmıyor
Python kodun durunca drone RTL yapmıyor, FAILSAFE açık görünüyor. Otopilot yer istasyonunu hiç görmediği için GCS failsafe sayacı çalışmıyor; çözüm burada.
Yardımcı bilgisayardan GUIDED modda uçarken Python kodun durdu ya da bağlantı koptu. Beklentin drone'un eve dönmesiydi; oysa drone olduğu yerde asılı kaldı ve ekrana tek bir uyarı bile düşmedi.
Parametrelere bakınca her şey yerinde görünür: FAILSAFE açık, süre ayarlı. Asıl mesele otopilotun bir yer istasyonunu ne zaman gördüğünü saydığıdır.
Otopilot kodunu yer istasyonu saymıyor
ArduCopter, GCS failsafe'i son heartbeat'in üzerinden geçen süreye bakarak işletir. Bu sayaç ancak otopilot en az bir kez kendi yer istasyonundan heartbeat gördüyse başlar.
Hiç görmediyse sayaç sıfırda kalır ve failsafe kontrolü daha başında sessizce sonlanır. Şekilde ikinci soruya bak: senin kodun tam olarak orada düşüyor.
Otopilot GCS failsafe'e karar verirken hangi sırayla bakıyor
pymavlink ile bağlanan çoğu Python kodu komut gönderir ama heartbeat göndermez. Otopilotun gözünde böyle bir program yer istasyonu sayılmaz. Kod çalışırken de çökerken de failsafe sayacı hiç dönmez.
Aynı ayar, iki farklı son
İki durumda da FS_GCS_ENABLE, FS_GCS_TIMEOUT ve MAV_GCS_SYSID birebir aynı. Tek fark, kodun saniyede bir heartbeat gönderip göndermediği.
Kod durduğunda iki durumda otopilotun modu
Şekildeki üst şeride bak: heartbeat hiç gönderilmezse drone 15 metrede GUIDED'da asılı kalır, yarım dakika geçse de bir şey değişmez. Alt şeritte heartbeat gönderilip sonra kesilir; otopilot yaklaşık beş saniye içinde RTL'e geçer ve alçalmaya başlar.
Koduna heartbeat ekle
Çözüm, kodun doğru kimlikle heartbeat göndermesi. Bağlantıyı açarken source_system değerini yer istasyonu numaranla eşle, sonra ayrı bir iş parçacığında saniyede bir heartbeat yolla.
from pymavlink import mavutil
import threading, time
master = mavutil.mavlink_connection('udpout:127.0.0.1:14550', source_system=255)
master.wait_heartbeat()
def kalp_at():
while True:
master.mav.heartbeat_send(mavutil.mavlink.MAV_TYPE_GCS,
mavutil.mavlink.MAV_AUTOPILOT_INVALID, 0, 0, 0)
time.sleep(1)
# Ayri bir is parcaciginda saniyede bir heartbeat: kod canliyken
# otopilot bir yer istasyonu gorur, kod durunca sayac islemeye baslar.
threading.Thread(target=kalp_at, daemon=True).start()Bu haldeyken otopilot kodunu yer istasyonu olarak sayar. Kod çökerse heartbeat kesilir, FS_GCS_TIMEOUT dolar ve FS_GCS_ENABLE'da seçtiğin eylem devreye girer.
Uçuştan önce üç parametreyi bir kez kontrol et. MAV_GCS_SYSID, kodun source_system değerini kapsamıyorsa otopilot senin heartbeat'ini yer istasyonu saymaz. MAVProxy'de şu komutla bakabilirsin:
param show FS_GCS_ENABLE FS_GCS_TIMEOUT MAV_GCS_SYSIDÖrnek: Yarışmadan önceki provada bunu bilerek dene. Drone GUIDED'da birkaç metre yüksekte, kumanda pilotun elinde ve kodundan başka bir yer istasyonu bağlı değilken kodu Ctrl+C ile durdur, kronometre tut. Yaklaşık beş saniye içinde drone eve dönmeye başlıyorsa otopilot kodunu yer istasyonu sayıyor demektir; olduğu yerde asılı kalıyorsa heartbeat gitmiyor ya da MAV_GCS_SYSID ile source_system uyuşmuyor.
Hata Mesajları ve Anlamları
Bu konuda ekranda gördüğün ya da hiç göremediğin birkaç satır:
GCS Failsafe
Otopilot yer istasyonunu FS_GCS_TIMEOUT boyunca göremedi ve failsafe başladı. Bu satırı görüyorsan sayaç çalışıyor demektir; hiç görmüyorsan otopilot bir yer istasyonu hiç saymamış olabilir.
GCS Failsafe Cleared
Bağlantı geri geldi ve failsafe koşulu kalktı. Otopilot yine de failsafe moduna kilitli kalır, önceki moduna kendiliğinden dönmez. Geri almak için modu elle değiştirmen gerekir.
PreArm: GCS failsafe on
Yerde, failsafe etkinken ARM etmeye çalıştın. Önce bağlantıyı ve heartbeat akışını düzelt, sonra ARM et.
Bu konuyu uçtan uca öğren
Python ile Sıfırdan İHA Kontrolü eğitiminde pymavlink ve DroneKit ile bağlantı kurmayı, GUIDED görevlerini ve yardımcı bilgisayardan otonom kontrolü adım adım işliyoruz.
Bu yazı işinize yaradı mı?
Bu konuyu baştan sona öğrenin
Sezon: altı eğitimin hepsi 9 ay, ayda ₺790. Lise ve üniversite öğrencisine ayda ₺390, üye kodunuzla ilk ay ₺351. İstediğiniz ay bırakırsınız. Sezon'a başlayın · Öğrenciyim