Softivation

ArduPilot uçuş ortasında RTL moduna geçiyor

Drone kendi kendine RTL moduna geçiyorsa mod değişimini bir failsafe istemiştir. Hangi failsafe olduğunu ekrandaki tek satırlık uyarıdan ayırt edersin.

Furkan IŞIKAY 9 dk okuma

Havada duruyorsun, drone bir noktayı tutuyor. Kumandaya elini sürmedin, yer istasyonunda da bir düğmeye basmadın. Ekranda mod bir anda RTL oluyor ve araç burnunu eve çevirip gidiyor.

İlk refleks kumandaya yapışmak oluyor. Oysa o saniyede sana lazım olan şey ekranın üstünden akıp giden tek satırlık uyarı. Otopilot mod değiştirdiğinde bunu sessizce yapmaz, sebebini de yazar.

Aşağıda önce o satırı okumayı, sonra satırı kaçırdıysan aynı bilgiyi uçuş kaydından çıkarmayı bulacaksın.

Mod değişimini kim istedi

Otopilot uçuş modunu iki sebeple değiştirir. Ya sen istersin, ya da bir failsafe koşulu oluşur. İkincisinde ekrana kısa bir uyarı düşer ve o uyarının ilk kelimesi kaynağı söyler.

Dört kaynak var: kumanda hattı, batarya, yer istasyonu bağlantısı ve konum kestirimi. Mesajın başındaki kelime bunlardan hangisi olduğunu tek başına belirler.

Bazen mesajın sonuna tire ile ikinci bir parça eklenir. O parça, otopilotun ayarındaki davranıştan neden saptığını anlatır; örneğin araç zaten inişteyse dönüş yerine inişi sürdürür.

Radyo failsafe'i iki ayrı yoldan gelir

Kumanda hattı koptuğunda alıcının yapabileceği iki şey var ve hangisini yaptığını alıcının kendi ayarı belirler.

  • Alıcı otopilota veri göndermeyi tamamen keser. Otopilot belli bir süre hiç kare gelmezse hattı kopmuş sayar. Varsayılan süre bir saniye.
  • Alıcı hattı kaybedince gaz kanalını normal aralığın altına çeker. Otopilot bu değeri bir eşikle karşılaştırır ve art arda üç kare eşiğin altında kalırsa failsafe başlatır.

İki yolu ayıran şey karar ölçütü: birincide otopilot geçen süreye bakıyor, ikincide eşiğe. Alıcın hangisini yapıyorsa ayarı da ona göre yapman gerekiyor.

Eşiği gelişigüzel bir sayıya çekmek en sık düşülen tuzak. Eşik fazla yukarıdaysa hat hiç kopmadan, sen sadece gaz kolunu dibe indirdiğin için failsafe başlar.

Gaz kanalı eşiği nereye oturmalı

Doğru eşik, verici kapalıyken okunan değer ile gaz kolu dipteyken okunan değerin arasındadır; eşik gaz kolu dip değerinin üstündeyse hat kopmadan failsafe başlar
Nereye bak: kırmızı bölgenin hangi noktaları içine aldığı. Altta gaz kolu dipteki değer de bölgenin içinde kaldığı için hat sağlamken failsafe başlıyor. Ölçek şematik.

Şekildeki alt satıra bak: eşik gaz kolunun dip değerinin üstüne çıkınca kırmızı bölge o noktayı da içine alıyor. Doğru yer, üst satırdaki gibi iki noktanın arası.

Eşiği belirlerken tek bir ölçüm yetmez. Vericiyi kapatıp gaz kanalının kaça düştüğüne, sonra vericiyi açıp gaz kolu dipteyken kaç geldiğine ayrı ayrı bakman gerekiyor. Eşik bu ikisinin arasında bir yere oturur.

Batarya failsafe'i neden geç gelir

Radyo failsafe'i neredeyse anında gelir: ArduCopter 4.7.0'da gaz kanalı eşiği geçtikten 0,13 saniye sonra uyarı ekrandadır. Batarya tarafında araya bir sayaç girer; gerilimin eşiğin altına inmesi yetmez, orada bir süre kalması gerekir.

Varsayılan bekleme on saniye. Gerilim eşiğin altına indikten sonra uyarı 10,61 saniye sonra gelir; sert bir manevrada anlık düşen gerilim failsafe başlatmaz, paket gerçekten bittiyse başlatır.

Eşik geçildikten uyarıya kadar: kumanda hattı ve batarya

Gaz kanalı eşiği geçince Radio Failsafe 0,13 saniyede gelir; gerilim eşiğin altına inince Battery Failsafe 10 saniyelik beklemeden sonra 10,61 saniyede gelir
Nereye bak: iki noktanın arasındaki mesafe. Batarya uyarısı geldiğinde gerilim çoktan on saniyedir eşiğin altında; kayıtta o kadar geriye git.

Şekilde iki noktanın arasındaki mesafeye bak. Batarya failsafe'inde "birden oldu" dediğin an, tetikleyicinin oluşmasından yaklaşık on saniye sonradır; kayda bakarken on saniye geriye gitmen gerekiyor.

Örnek: Görev uçuşunun ortasında araç eve dönüyor ve yer istasyonundaki takım arkadaşın şeritte Battery Failsafe yazdığını söylüyor. Son baktığında gerilim sağlamdı; ama uyarı, gerilimin eşiğin altına inmesinden on saniye sonra gelir ve o on saniyede ekrana bakmamıştın. Kayıtta mod değişimi satırından on saniye geriye gidince gerilimin eşiğin altına indiği anı bulursun; uyarı "birden" gelmemiştir.

Aynı olayı masanın üstünde görebilirsin

Bunu gerçek araçta denemek, kumandayı kapatıp aracın hakikaten eve dönmesini beklemek demek. Riski yüksek, tekrarı zor ve bir şey ters giderse elinde kumanda da yok.

Simülasyonda aynı zincir aynı yazılımla, hiçbir şeyi riske atmadan çalışıyor. Kendi bilgisayarında şu komutla bir araç ayağa kaldırıyorsun:

Kod
./arducopter -S -I0 --model + --speedup 1 --defaults copter.parm --home 37.1591,38.7969,500,0

Sonra ikinci bir terminalde aşağıdaki izleyiciyi çalıştırıyorsun. Bu kod yalnızca dinliyor: mod değişimlerini ve failsafe mesajlarını zaman damgasıyla yazıyor. Sahada telemetri portunu verirsen gerçek uçuşta da aynı işi görüyor.

Python
# Failsafe izleyici: mod degisimini ve failsafe mesajlarini zaman damgasiyla yazar.
# SITL icin tcp:127.0.0.1:5762, sahada telemetri icin /dev/ttyUSB0 gibi bir port ver.
import sys, time
from pymavlink import mavutil

PORT = sys.argv[1] if len(sys.argv) > 1 else 'tcp:127.0.0.1:5762'
m = mavutil.mavlink_connection(PORT, baud=57600)
m.wait_heartbeat()
print("baglandi:", PORT, "sysid", m.target_system)

# Istemeden mesaj gelmez; akisi acikca istemek gerekir.
m.mav.request_data_stream_send(m.target_system, m.target_component,
                               mavutil.mavlink.MAV_DATA_STREAM_ALL, 4, 1)

MOD = {v: k for k, v in m.mode_mapping().items()}
onceki_mod = None
onceki_arm = None
t0 = time.time()

while True:
    msg = m.recv_match(blocking=True, timeout=5)
    if msg is None:
        continue
    t = time.time() - t0
    tur = msg.get_type()

    if tur == 'HEARTBEAT':
        mod = MOD.get(msg.custom_mode, str(msg.custom_mode))
        armli = bool(msg.base_mode & mavutil.mavlink.MAV_MODE_FLAG_SAFETY_ARMED)
        if mod != onceki_mod:
            print("[%7.2f] MOD  %-9s -> %s" % (t, onceki_mod or "-", mod))
            onceki_mod = mod
        if armli != onceki_arm:
            print("[%7.2f] %s" % (t, "ARM edildi" if armli else "DISARM edildi"))
            onceki_arm = armli

    elif tur == 'STATUSTEXT':
        yazi = msg.text.strip('\x00')
        if 'Failsafe' in yazi or 'failsafe' in yazi or msg.severity <= 4:
            print("[%7.2f] MESAJ sev=%d  %s" % (t, msg.severity, yazi))

Araç yirmi metrede asılı dururken gaz kanalını eşiğin altına indirirsen ekrana şu satırlar düşer:

Kod
baglandi: tcp:127.0.0.1:5762 sysid 1
[   0.00] MOD  -         -> GUIDED
[   0.00] DISARM edildi
[  20.98] ARM edildi
[  32.90] MOD  GUIDED    -> LOITER
[  47.95] MOD  LOITER    -> RTL
[  47.95] MESAJ sev=4  Radio Failsafe
[  85.99] DISARM edildi
[  86.27] MESAJ sev=2  PreArm: Throttle below failsafe
[  86.27] MESAJ sev=2  PreArm: Radio failsafe on

Asıl bilgi ortadaki iki satırda. Mod değişimi ile failsafe uyarısı aynı saniye damgasını taşıyor. Mod değişiminin sebebi işte o uyarı.

Mesajdan ayara

Uyarının ilk kelimesini bulduktan sonra bakacağın parametreler bu tabloda.

Ekrandaki mesajNe olduBakacağın parametreUyarıya kadar
Radio Failsafekumanda sinyali kesildi ya da gaz kanalı FS_THR_VALUE altına düştüFS_THR_ENABLE / FS_THR_VALUE0,13 s
Battery Failsafegerilim BATT_LOW_VOLT altında BATT_LOW_TIMER kadar kaldıBATT_LOW_VOLT / BATT_FS_LOW_ACT10,61 s
GCS Failsafeyer istasyonundan heartbeat gelmiyorFS_GCS_ENABLE / FS_GCS_TIMEOUT5 s
EKF Failsafekonum ya da hız varyansı eşiği aştıFS_EKF_THRESH / FS_EKF_ACTION1 s

Son sütunda radyo ve batarya satırları ArduCopter 4.7.0'da eşik geçildikten uyarıya kadar geçen süre; GCS ve EKF satırları parametre varsayılanı.

Hata Mesajları ve Anlamları

Radio Failsafe

Kumanda hattı koptu ya da gaz kanalı eşiğin altına indi. Otopilot ayarındaki davranışa geçti; varsayılan davranış RTL.

Radio Failsafe - Disarming

Aynı olay araç yerdeyken oldu. Havada olmadığı için dönüş yerine motorlar durduruldu.

Radio Failsafe Cleared

Kumanda hattı geri geldi. Dikkat: araç kendiliğinden eski moduna dönmez, modu sen geri almalısın.

Battery Failsafe

Gerilim ya da tüketilen kapasite eşiği aştı ve bekleme süresi doldu. Ölçüm hattın bozuksa bu mesaj dolu pakette de gelir.

GCS Failsafe

Yer istasyonundan gelen düzenli sinyal kesildi. Telemetri menzilinden çıkmak ya da yer istasyonu programının donması bunu tetikler.

EKF Failsafe

Konum, hız ya da pusula kestirimindeki güvensizlik eşiği aştı. Arkasında çoğunlukla titreşim ya da GPS kalitesi vardır.

PreArm: Throttle below failsafe

Henüz kalkmadan geliyor. Gaz kanalının o anki değeri eşiğin altında; ya eşik fazla yukarıda ya kumanda kapalı.

PreArm: Radio failsafe on

Radyo failsafe'i hâlâ etkin. Önce hattı geri getir, mesaj temizlenmeden ARM izni çıkmaz.

Sahada ilk üç hamle

  • Mesaj şeridini kapatma. Failsafe uyarısı bir kez geçer ve mod değişiminin tek açıklaması odur.
  • İndikten sonra uçuş kaydını indir, mod değişimi satırının sebebine bak. Sebep alanı pilot komutu ile failsafe'i birbirinden ayırır.
  • Kaynağı bulduktan sonra o kaynağın eşiğini ve bekleme süresini kendi aracında ölç. Varsayılan değerler senin kurulumun için doğru olmak zorunda değil.

Bu konu hangi eğitimde var

Failsafe zincirinin firmware içindeki karar sırası, hangi parametrenin nerede kullanıldığı, log imzaları ve saha vakaları eğitimin Sorun Giderme bölümünde adım adım işleniyor.

Eğitim: Sensörlerden Uçuşa Temel İHA.

Bu yazı işinize yaradı mı?

Ücretsiz kaynakPixhawk ve ArduPilot hata mesajları sözlüğüBu yazıdaki 5 mesaj ve benzerleri sözlükte: ne demek, neden çıkar, ilk neye bakılır.