top of page
Eğitim Paneli

Telemetri gelmiyor, önce mesaj aralığına bak

Güncelleme tarihi: 19 saat önce

Problem: kod doğru, telemetri yok

pymavlink ile bağlanıyorsun, heartbeat geliyor, recv_match(type='GLOBAL_POSITION_INT') yazıyorsun ve sonsuza kadar bekliyor. Kabloyu değiştiriyorsun, baud'u kurcalıyorsun, firmware'i yeniden yüklüyorsun. Hiçbiri sorunu çözmüyor çünkü sorun orada değil: ArduPilot, sen açıkça istemeden çoğu MAVLink mesajını yayınlamaz.

Savaşan İHA'da bunun bedeli ağır. 20 m/s uçan bir rakibi 1 Hz konum verisiyle takip edemezsin: iki örnek arasında 20 metre yol gider, kilitlenme algoritman havayı kovalar. Aşağıda mesaj bazında frekans kontrolünü ve bu işi öğrenirken herkesin düştüğü iki tuzağı ArduCopter V4.7.0 SITL üzerinde ölçerek göstereceğim.




SITL'i 2 dakikada kur




Tuzak 1: parametre Hz değil, mikrosaniye


MAV_CMD_SET_MESSAGE_INTERVAL komutunun param2 alanı aralık, yani mikrosaniyedir. 10 Hz istiyorsan 1000000/10 = 100000 yazmalısın. Buraya 10 yazarsan 10 mikrosaniyelik aralık, yani 100.000 Hz istemiş olursun. Özel değerler: 0 varsayılana döner, -1 mesajı tamamen kapatır.


Tuzak 2: ölçümün sana yalan söyler

Bu yazıyı hazırlarken ilk denemede 10 Hz istedim ve 12.2 Hz ölçtüm. Firmware'i suçlamadan önce şunu fark ettim: istek ile ölçüm arasındaki time.sleep(1) boyunca soket kuyruğunda ~10 mesaj birikmişti. Ölçüm penceresi açılır açılmaz bu birikmiş yığın anında sayıldı ve 5 saniyede 50 yerine 60 mesaj çıktı. Ölçmeden önce kuyruğu boşaltmazsan aldığın sayı gerçek frekans değildir.

Ayrıca SITL'i --speedup 5 ile çalıştırırsan aralık simülasyon zamanına göre işler; 10 Hz isteyip duvar saatinde 60 Hz ölçersin. Frekans ölçerken --speedup 1 kullan.



Minimal kod




SITL kanıtı

Yukarıdaki kodun ArduCopter V4.7.0 SITL üzerinde ürettiği gerçek çıktı:


$ python3 telemetri_hizi.py
Once : 0.0 Hz
ACK  : result=0  (0 = ACCEPTED)
Sonra: 10.0 Hz

İlk satıra dikkat: 0.0 Hz. Mesaj yavaşlamış değil, hiç akmıyor. İstek sonrası hedefe oturuyor.



Peki yarışma kodunda bu yeterli mi? Hayır.

Bu yazıdaki kod tek bir mesajı açar ve ölçer. Yarışma gününde eksik kalan kısımlar şunlar: hangi mesajı hangi frekansta isteyeceğine karar vermek (SiK telemetri 57600 baud'da 50 Hz'i taşımaz, link doyar ve komutların gitmez), Pixhawk / Cube Orange / Matek kartlarında UART ve DMA farkları, ACK'in DENIED veya FAILED döndüğü durumların teşhisi, ve ArduPilot'un ayarı kanal bazında tuttuğu için script yeniden başladığında eski hızın devam etmesi. Bunların tam çözümü, kart bazlı pinout tablosu ve yarışma seviyesi kod ile İHA Haberleşme Teknolojileri Eğitimi içinde işleniyor.

Bu yazıyı okuyanlara: İHA Haberleşme Teknolojileri Eğitimi — indirim kodu SOFTIVATION15 ile %15 indirimli: https://www.softivation.com/egitim/iha-haberlesme-teknolojileri-egitimi

Yorumlar


bottom of page