Mission Planner paket kaybı gösteriyor, telemetri akıyor
Mission Planner paket kaybı gösterirken telemetri akmaya devam ediyorsa o yüzdeyi kimin hesapladığına bak, otopilot neden sıfır diyor, hattı kendin ölç.
Uçuş sürüyor. Harita akıyor, irtifa geliyor, mod değiştirdiğinde araç dinliyor. Ama Mission Planner'ın köşesindeki kayıp yüzdesi tırmanmış ve bir türlü inmiyor.
O yüzdeyi hesaplayan tek yer Mission Planner; otopilota sorsan sana sıfır der. İkisi de doğru söylüyor, çünkü aynı şeyi saymıyorlar.
Ekranda görünen tablo
Komutlar gidiyor, uyarı sesi yok. Buna rağmen link kalitesi yüzde yüzün altında geziyor ve arada bir aşağı iniyor.
Çoğu kişi ilk iş anteni çeviriyor ya da telsizi değiştiriyor. Değiştirmeden önce o sayının neyi ölçtüğüne bakmak daha ucuz.
O yüzdeyi kim hesaplıyor
MAVLink her mesaja bir sıra numarası koyar. Sayaç sıfırdan iki yüz elli beşe kadar gider, sonra başa döner. Numarayı damgalayan taraf otopilottur.
Mission Planner gelen her kaynak için ayrı bir sayaç tutuyor ve beklediği numarayla gelen numara arasındaki farkı kayıp hanesine yazıyor. Kaynak, aracın kimliğiyle bileşen kimliğinin ikilisidir; iki ayrı bileşen aynı hattan yayın yapıyorsa sayaçları da ayrıdır.
Gördüğün yüzde toplam kayıp değil. Beş saniyede bir hem kayıp hem sağlam sayacı sıfır virgül sekizle çarpılıyor, yani eski kayıplar zamanla siliniyor. Son geçerli paketten on saniye sonra link kalitesi doğrudan sıfıra düşüyor.
Otopilot neden sıfır gösteriyor
Otopilotun durum mesajında iletişim için iki alan var. Bunlardan biri kaynak kodda sabit sıfır olarak gönderiliyor, hiç hesaplanmıyor.
İkincisi hesaplanıyor ama saydığı şey sıra boşluğu değil, ayrıştırma hatası: bozuk başlık, yanlış uzunluk, tutmayan sağlama. Hattan sağlam çerçeveler geliyor da arada mesaj eksikse bu sayaç kıpırdamaz.
Bu yüzden otopilotun sıfır demesi hattın temiz olduğu anlamına gelmiyor. O sayaç aradığın boşluğu zaten görmüyor.
Kendi hattını ölç
Emin olmanın yolu kendi sayacını kurmak. Aşağıdaki kod bağlanıyor, üç akışı dört hertzde istiyor, otuz saniye dinliyor ve her kaynak için kaç numara atlandığını sayıyor.
# Telemetri hattindaki seq bosluklarini olcer.
# Kullanim: python3 hat_olc.py tcp:127.0.0.1:5760
import sys, time
from pymavlink import mavutil
adres = sys.argv[1] if len(sys.argv) > 1 else 'tcp:127.0.0.1:5760'
sure = 30
baglanti = mavutil.mavlink_connection(adres, source_system=255)
baglanti.wait_heartbeat()
print("bagli: sysid=%d" % baglanti.target_system)
for akis in (mavutil.mavlink.MAV_DATA_STREAM_EXTENDED_STATUS,
mavutil.mavlink.MAV_DATA_STREAM_POSITION,
mavutil.mavlink.MAV_DATA_STREAM_EXTRA1):
baglanti.mav.request_data_stream_send(
baglanti.target_system, baglanti.target_component, akis, 4, 1)
son_seq, bosluk, alinan, bozuk = {}, {}, {}, 0
baslangic = time.time()
while time.time() - baslangic < sure:
mesaj = baglanti.recv_match(blocking=True, timeout=1)
if mesaj is None:
continue
if mesaj.get_type() == 'BAD_DATA':
bozuk += 1
continue
kaynak = (mesaj.get_srcSystem(), mesaj.get_srcComponent())
seq = mesaj.get_seq()
alinan[kaynak] = alinan.get(kaynak, 0) + 1
if kaynak in son_seq:
atlanan = (seq - son_seq[kaynak] - 1) % 256
if atlanan:
bosluk[kaynak] = bosluk.get(kaynak, 0) + atlanan
son_seq[kaynak] = seq
gecen = time.time() - baslangic
print("sure %.1f sn, bozuk cerceve %d" % (gecen, bozuk))
for kaynak in sorted(alinan):
gelen = alinan[kaynak]
kayip = bosluk.get(kaynak, 0)
oran = 100.0 * kayip / (gelen + kayip)
print("sysid=%d compid=%-3d alinan=%-6d bosluk=%-5d kayip=%%%.2f (%.1f paket/s)"
% (kaynak[0], kaynak[1], gelen, kayip, oran, gelen / gecen))Aracına bağlanan adresi kendi kurulumuna göre değiştir. Yardımcı bilgisayardan seri porta bağlanıyorsan adres yerine port yolunu ve baud değerini vereceksin.
Kayıpsız bir hatta çalıştırırsan şuna benzer bir çıktı alırsın; bosluk sütunu sıfırdır:
bagli: sysid=1
sure 30.0 sn, bozuk cerceve 4
sysid=1 compid=1 alinan=1307 bosluk=0 kayip=%0.00 (43.6 paket/s)Kendi hattında bu sayı sıfırdan büyük çıkıyorsa aradaki fark gerçek. Sıfır çıkıyorsa ekrandaki yüzde kayan ortalamanın kendisidir, arıza değil.
Örnek: Provada link kalitesi yüzde yüzün altında geziyor ve takım arkadaşın telsizi değiştirmek istiyor. Telsize dokunmadan önce Mission Planner'ın bağlantısını kesip bu kodu aynı hatta otuz saniye çalıştır. bosluk sütunu sıfırsa ekrandaki yüzde kayan ortalamanın izidir, telsiz suçlu değildir; sıfırdan büyükse akış hızlarını düşürüp sayacı bir kez daha çalıştır, boşluk kapanıyorsa fark telsizden değil otopilotun tamponundan geliyordur.
Sahada ne değişir
Sıfır çıktısı kablolu ve sıkışmayan bir hatta beklenen sonuçtur. Telsizle uçarken üç şey devreye giriyor: menzil, gürültü ve telsizin kendi tamponu.
Telsiz boş tampon yüzdesini otopilota bildiriyor, otopilot da bu yüzde düşünce yayın aralığını kaydırıyor. Yavaşlatma devredeyken veri seyrelir ama sıra numarası boşluğu oluşmaz. Veri geç geliyor diye kayıp aramaya başlama.
Otopilot bir mesajı kendi çıkış tamponuna sığdıramazsa o mesajın baytlarını atıyor ve sıra numarasını geri almıyor. Şekilde 43 numaralı mesajın izini sür: telsize hiç ulaşmadan atılıyor, Mission Planner ise onu kayıp sayıyor.
Sıra numarası hatta çıkmadan önce verilir
Bu durumda boşluk telsizden değil otopilotun kendisinden gelir. Akış hızlarını düşürmek antenle uğraşmaktan daha çok işe yarar.
Hata Mesajları ve Anlamları
Aşağıdakiler Mission Planner kaynak kodunda geçen dizelerin aynısı.
No Heartbeat Packets Received
Bağlanma denemesi sırasında hiç kalp atışı okunamadı. Port yanlış, baud yanlış ya da hattı başka bir program tutuyor. Bu mesaj kayıpla ilgili değil, bağlantı hiç kurulmamış demektir.
Only 1 Heatbeat Received
Yazım kaynakta böyle. Mission Planner bağlanmak için iki geçerli kalp atışı bekliyor, yalnızca biri gelmiş. Hat açık ama zayıf ya da araya karışan veri var.
WARNING No Data for ... Seconds
Araç ARM durumdayken üç saniyeden uzun süre geçerli paket gelmezse çıkıyor. Bağlantıdan sonraki ilk otuz saniyede bastırılıyor ve beş saniyede birden sık tekrarlamıyor. Nokta yerine geçen sayı sessiz geçen saniyedir.
Mavlink Bad Packet (crc fail)
Kayıt dosyasına düşen satır. Çerçeve geldi ama sağlaması tutmadı. Bunu görüyorsan baytlar gerçekten bozuluyor; menzil, gürültü ya da baud uyuşmazlığına bak.
mav ... seqno ... exp ... pkts lost ...
Kayıp anında kayıt dosyasına yazılan satır. Hangi kaynakta, hangi numarada, kaç paketlik boşluk olduğunu buradan çıkarırsın. Ekrandaki yüzdeyi bu satırlarla doğrulamak tahmin yürütmekten iyidir.
Bu konunun devamı
Telemetri hattını kurmayı, çoğaltmayı ve ölçmeyi baştan sona anlatan eğitimi İHA Haberleşme Teknolojileri sayfasında bulabilirsin. Bu yazının derinleştirilmiş hâli de o kursta duruyor.
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