Softivation

Mission Planner hep aynı uçuş modunu gösteriyor

Switch çevriliyor, uçuş modu değişmiyor. Mod kanalının hangi PWM penceresine düştüğünü, iki uçtaki okunmayan bölgeyi ve 200 ms oturma süresini anlatıyoruz.

Furkan IŞIKAY 7 dk okuma

Switch'i çeviriyorsun. Kumandadan onay sesi geliyor, radyo kalibrasyon ekranındaki çubuk yer değiştiriyor. Ekrandaki mod yazısı ise olduğu yerde duruyor.

Ne bir uyarı satırı beliriyor ne de bir hata sesi var, çünkü otopilot çoğu durumda switch'i hiç okumamıştır.

Otopilot switch'i değil bir sayıyı görür

Kumandadaki üç kademeli kolun otopilot tarafında bir karşılığı yok. Alıcıdan gelen çerçevede kanal başına yalnızca bir mikrosaniye değeri var.

Hangi kanalın mod kanalı olduğunu bir ayar belirler, varsayılanı 5. kanal. Otopilot o kanalın ham değerini alır ve altı pencereden hangisine düştüğüne bakar.

Pencereler eşit genişlikte değil. Ortadaki dördü 130 mikrosaniyelik dar dilimler, uçtakiler ise çok daha geniş. Aşağıdaki şekilde dar dilimlere bak: iki pozisyonun aynı dilime düşmesi bu yüzden kolay.

Mod kanalının değeri hangi pozisyona düşüyor

Mod kanalının ham değerine göre altı pozisyon penceresi: 801-1230 poz 1, 1231-1360 poz 2, 1361-1490 poz 3, 1491-1620 poz 4, 1621-1749 poz 5, 1750-2199 poz 6; 800 ve altı ile 2200 ve üstü okunmaz
Nereye bak: ortadaki dört dilim dar, iki kumanda kademesi kolayca aynı dilime düşer. Taralı uçlarda pozisyon hiç hesaplanmaz, mod son değerinde kalır.

İki uçta hiç okunmayan bir bölge var

Pencerelerin dışında, dokümanda anlatılmayan bir davranış var. Kanal 800 ve altına ya da 2200 ve üstüne çıktığında pozisyon hesaplanmaz. Şekildeki taralı uçlar bu bölge.

800 ve 2200 sınırın kendisidir, dışarıda sayılır. 801 pozisyon 1, 2199 pozisyon 6 olarak okunur; 800 ve 2200'de mod olduğu yerde donar.

Bu bir mod reddi değil. Okuma işlemi hata koşuluyla biter, karar zinciri orada durur ve mod son değerinde kalır. Ekranda hiçbir şey belirmez, kayıtta hiçbir satır oluşmaz.

Yanlış ayarlanmış kumanda mixer'lerinin ya da uç noktası genişletilmiş kanalların 2200'ü aşması sandığından sık.

Pozisyonun oturması 200 milisaniye sürer

Yeni pozisyon hemen kabul edilmez. Değerin 200 milisaniye boyunca aynı pencerede kalması gerekir, ancak ondan sonra mod isteği üretilir.

Temiz bir switch'te bu süre fark edilmez. Oksitlenmiş bir kontakta ya da gürültülü bir hatta değer iki pencere arasında zıplar ve süre hiç dolmaz. Aşağıdaki şekilde iki durumdaki sayacı karşılaştır.

Yeni pozisyon 200 ms aynı pencerede kalmalı

Switch poz 3'ten poz 4'e geçerken değer 200 ms aynı pencerede kalırsa mod isteği üretilir; iki pencere arasında zıplayan değerde sayaç her seferinde baştan başlar
Nereye bak: sarı sayaç rampaları. Değer yeni pencereye her girdiğinde sayaç sıfırdan başlar, eski pencereye dönünce durur; alt şeritte hiçbir rampa kırmızı 200 ms çizgisine ulaşmıyor.

En sık yapılan hata, mod kanalını dinlemeden parametre değiştirmeye başlamak. Ham değeri görmeden yapılan her düzeltme, hangi değişikliğin işe yaradığını da gizler.

Kendi kanalını oku

Tahmin yerine ham değere bakmak en kısa yol. Aşağıdaki Python kodu mod kanalının numarasını FLTMODE_CH parametresinden okur, kanalı yer istasyonu üzerinden dinler ve her pencere değişiminde tek satır basar.

Python
from pymavlink import mavutil

BAGLANTI = "udp:127.0.0.1:14550"
SINIRLAR = ((1231, 1), (1361, 2), (1491, 3), (1621, 4), (1750, 5))


def pencere(pwm):
    if pwm <= 800 or pwm >= 2200:
        return None
    for esik, poz in SINIRLAR:
        if pwm < esik:
            return poz
    return 6


arac = mavutil.mavlink_connection(BAGLANTI)
arac.wait_heartbeat()
arac.mav.param_request_read_send(arac.target_system, arac.target_component,
                                 b"FLTMODE_CH", -1)
kanal = int(arac.recv_match(type="PARAM_VALUE", blocking=True, timeout=5).param_value)
arac.mav.request_data_stream_send(arac.target_system, arac.target_component,
                                  mavutil.mavlink.MAV_DATA_STREAM_RC_CHANNELS, 5, 1)

son = -1
while True:
    msg = arac.recv_match(type="RC_CHANNELS", blocking=True)
    pwm = getattr(msg, "chan%d_raw" % kanal)
    poz = pencere(pwm)
    if poz != son:
        son = poz
        print("kanal %d  pwm %4d  ->  %s"
              % (kanal, pwm, "pozisyon %d" % poz if poz else "OKUNMUYOR"))

Kanalı uçtan uca gezdirirsen şuna benzer satırlar alırsın:

Kod
kanal 5  pwm  700  ->  OKUNMUYOR
kanal 5  pwm 1150  ->  pozisyon 1
kanal 5  pwm 1300  ->  pozisyon 2
kanal 5  pwm 1450  ->  pozisyon 3
kanal 5  pwm 1550  ->  pozisyon 4
kanal 5  pwm 1700  ->  pozisyon 5
kanal 5  pwm 1900  ->  pozisyon 6
kanal 5  pwm 2250  ->  OKUNMUYOR

Switch'i her kademede birkaç saniye tut. Altı kademede altı farklı pozisyon numarası görmüyorsan sorun parametrede değil, kumandanın ürettiği aralıkta.

Örnek: Kumandanın üç kademeli kolunu AUTO için ayırdın. Kolu üst kademeye alınca ekranda mod hâlâ LOITER yazıyor, uyarı da yok. Kodu çalıştırıp kolu üç kademede gezdirince üst iki kademenin aynı pozisyon numarasını bastığını görürsün: iki kademe şekildeki aynı dar dilime düşüyor. Parametreye dokunmadan önce kumandada o kademenin uç noktasını değiştirip satırın değişmesini bekle.

Hata Mesajları ve Anlamları

Bir mesaj görüyorsan durum aslında daha iyi. Karar zinciri sonuna kadar gelmiş, mod okunmuş ve reddedilmiş demektir. Mesajın ikinci yarısı red sebebini verir.

Mode change to LOITER failed: requires position

Modun konum tahminine ihtiyacı var, otopilotun elinde sağlıklı bir konum yok. Uydu sayısı tek başına yetmez; yatay konum tahmininin kabul edilmiş olması gerekir.

Mode change to ALT_HOLD failed: need alt estimate

İrtifa tahmini geçerli değil. Bu kontrol yalnızca gaz kolunun doğrudan sende olduğu bir moddan otomatik gazlı bir moda geçerken çalışır.

Mode change to STABILIZE failed: throttle too high

Araç yerdeyken gaz kolun yukarıdayken doğrudan gazlı bir moda geçmeye çalıştın. Gaz kolunu tabana çekmeden aynı geçiş bir daha kabul edilmez.

Mode change to AUTO failed: GCS entry disabled (FLTMODE_GCSBLOCK)

Bu mod yer istasyonu komutlarına kapatılmış. FLTMODE_GCSBLOCK bit maskesi yalnızca yer istasyonundan gelen istekleri süzer; aynı mod kumandadaki switch'ten sorunsuz açılır.

Bir adım öteye

Uçuş modları, kumanda kalibrasyonu ve prearm zinciri Sensörlerden Uçuşa Temel İHA eğitiminde baştan sona işleniyor. Bu yazının devamı olan ders de aynı eğitimin sorun giderme bölümüne eklendi.

Bu yazı işinize yaradı mı?

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