Softivation

Pixhawk telemetrisi neden kalabalık sahada kopuyor

Telemetri tek başına sorunsuzken kalabalık sahada kopuyor. RSSI okuması dBm değildir; varsayılan NETID paylaşan radyolar frekans atlamada çakışabilir.

Furkan IŞIKAY 5 dk okuma

Telemetri evde, atölyede, masada sorunsuz çalışıyor. Sahaya çıkıp beş altı takım aynı anda uçurmaya başlayınca Mission Planner'daki bağlantı kopuyor, ekrandaki veri donuyor ya da link kaybı uyarısı geliyor. Bunun nedeni genelde drone ya da kablo değil, sahadaki ortamdır.

Bağlantı tek başına sorunsuzsa önce sahadaki diğer radyolara bak. Telemetri radyon kendi sinyal gücünü ve hata sayısını MAVLink akışına kendisi ekler; tahmin yürütmek yerine bu sayılara güven.

Aynı sahadaki radyolar birbirine nasıl karışır

SiK telemetri radyosu tek bir kanalda durmaz, kanaldan kanala atlar. Atlama sırasını radyonun ağ numarası belirler ve fabrikadan çıkan her radyoda bu numara aynıdır.

Aynı sahada uçan iki takım da numarayı değiştirmemişse iki çift radyo birebir aynı atlama sırasını üretir ve düzenli aralıklarla aynı kanalda çakışır. Şekilde iki takımın sırasının nasıl üst üste bindiğine, numara değişince nasıl ayrıldığına bak.

Atlama sırasını NETID belirler: aynı numara, aynı sıra

İki panel. Solda iki takım da NETID 25 kullanıyor ve on adımlık kanal sıraları birebir üst üste biniyor. Sağda B takımı NETID 43 kullanıyor ve sırası A takımından tamamen farklı.
Nereye bak: soldaki halkalar her adımda var, sağda hiç yok. Sıralar SiK kaynağındaki karıştırma koduyla 433 MHz'in 10 kanalı için hesaplandı.

Bu çakışmayı kablo ya da anten arızası sanma. Numarayı sahaya girmeden kendine göre ayarla, çakışma biter.

Ağ numarası atlama sırasını nasıl belirler

Bu numaranın adı NETID ve fabrika varsayılanı NETID=25'tir. SiK radyo firmware kaynağında (ArduPilot/SiK deposu, Firmware/radio/freq_hopping.c) shuffleRand() fonksiyonu frekans atlama sırasını doğrudan NETID parametresiyle tohumluyor.

Yani NETID'i değiştirmeyen her takım aynı sırayla atlar. Sahaya girmeden önce takımına özel bir NETID seç.

Örnek: Sürü yarışmasında kendi iki aracını da aynı yer istasyonundan izliyorsan ve iki telemetri çifti de fabrikadan çıktığı gibi NETID 25'te kaldıysa, rakip takımı beklemene gerek yok; kendi iki çiftin şekildeki soldaki panel gibi aynı sırayla atlar ve birbirini bozar. Her araca ayrı bir NETID ver, yanındaki takımların kullandığı numaralardan da uzak dur.

Sinyal sayısını doğru oku

Mission Planner'ın gösterdiği ham RSSI ve REMRSSI değerleri 0-255 arasında bir sayıdır, dBm değildir. Resmî dönüşüm formülü: sinyal(dBm) = (RSSI_ham / 1.9) − 127.

Formülle birkaç tanıdık değerin karşılığı:

Ham değerSinyal (dBm)Not
0−127aralığın alt ucu
190yaklaşık −27resmî 1 metre testinin beklediği alt sınır
255yaklaşık +7,2aralığın üst ucu

Resmî "1 metre testi" bu ham değerin 190'ın üzerinde olmasını bekler. Sahadaki gerçek okumanı aynı formülle kendin çevirip referansla karşılaştır; tek bir sabit eşiğe göre karar verme.

Kendi ölçümünü nasıl alırsın

Radyo kendi durumunu akışa RADIO_STATUS mesajıyla ekler: rssi, remrssi, rxerrors ve fixed alanları. Aşağıdaki kod bağlı olduğun telemetri hattından bu mesajı okur ve RSSI/REMRSSI değerlerini dBm'e çevirir. PORT satırını kendi seri portuna ya da UDP adresine göre değiştir.

Python
from pymavlink import mavutil

# Kendi telemetri bağlantına göre değiştir: '/dev/ttyUSB0', 'COM5' ya da 'udp:127.0.0.1:14550'
PORT = "udp:127.0.0.1:15552"
BAUD = 57600

m = mavutil.mavlink_connection(PORT, baud=BAUD)
m.wait_heartbeat(timeout=15)
print("baglanti kuruldu, sysid", m.target_system)

msg = m.recv_match(type="RADIO_STATUS", blocking=True, timeout=10)
if msg is None:
    print("RADIO_STATUS gelmedi: kablo, baud ya da MAVLink parametresine bak")
else:
    yerel = (msg.rssi / 1.9) - 127
    uzak = (msg.remrssi / 1.9) - 127
    print(f"yerel={yerel:.1f}dBm uzak={uzak:.1f}dBm rxerrors={msg.rxerrors} fixed={msg.fixed}")

Kod çalışınca şuna benzer iki satır yazar. Buradaki sayılar örnektir; kendi radyonda çalıştırdığında göreceğin sayılar farklı olacak.

Kod
baglanti kuruldu, sysid 1
yerel=-23.8dBm uzak=-68.1dBm rxerrors=310 fixed=41

Hata Mesajları

Yukarıdaki kod 10 saniye içinde RADIO_STATUS mesajı alamazsa "RADIO_STATUS gelmedi: kablo, baud ya da MAVLink parametresine bak" satırını yazar. Mesajın söylediği sırayla kabloya, baud hızına ve MAVLink parametresine bak.

Konunun devamı kursta

NETID seçimi, frekans atlama çakışması ve saha vakalarının tamamı İHA Haberleşme Teknolojileri eğitiminde yeni bir derste.

Bu yazı işinize yaradı mı?

Ücretsiz kaynakTEKNOFEST İHA yazılım hazırlık kontrol listesiTakımınızın yazılım hazırlığını aşama aşama işaretleyin; yazdırılabilir liste.