Python kodu konum alamıyor (bağlantı kurulu görünüyor)
Kodu çalıştırıyorsun, ekrana bağlantı kuruldu yazısı düşüyor, sonra enlem boş, boylam boş, yükseklik boş. Kabloyu oynatıyorsun, baud oranını değiştiriyorsun, yer kontrol istasyonunu açıp bakıyorsun; orada her şey yerli yerinde duruyor.
Bu tabloda hat kopuk değil. Otopilot o veriyi hiç üretmiyor.
Bağlı sinyali başka, veri başka
Otopilot iki ayrı iş yapıyor. Birincisi, hattın ucunda birinin durduğunu bildiren sabit aralıklı bir sinyal. İkincisi, konum, duruş ve uydu bilgisi gibi mesaj gruplarını akıtmak. Birinci iş her koşulda yapılıyor, ikincisi yapılmıyor.
Kod yalnızca birinci işi görüyor ve bağlantının kurulduğuna karar veriyor. İkinci iş için otopilotun bir akış tablosu var ve o tabloda çok rotorlu araçlar için bütün satırlar sıfır.
Sıfır olan bir satır, o grubun hiç doğmayacağı anlamına geliyor. Doğmayan mesaj hatta çıkmıyor, koda ulaşmıyor, öznitelik de dolmuyor. Beklemekle geçmiyor; ertesi gün beklesen yine gelmez.
Aynı bağlantıda dört farklı durum
Tek bir simülasyon oturumunda dört durumu arka arkaya ölçtük. Bağlantı hiç kopmadı, araç hiç yeniden başlamadı, değişen tek şey kodun ne istediği oldu.
Birinci sütun ilk tabloyu gösteriyor: bağlı sinyali akıyor, konum mesajı sıfırda. İstek gönderildiği anda aynı hat üzerinden konum mesajı gelmeye başlıyor.
Çalışan istek
İstek göndermek yetmiyor, gönderdiğinin karşılık bulduğunu görmek gerekiyor. Otopilot isteği kabul ettiğini bildirebilir ve yine de tek bir mesaj yollamayabilir. Aşağıdaki kısa parça isteği gönderiyor, sonra mesajın kendisini bekliyor ve gelmezse tekrar deniyor.
Buradaki kritik satır, onay yerine mesajın kendisini bekleyen satır. Onay yalnızca isteğin işlendiğini gösterir; akışın başladığını ancak gelen ilk mesajdan anlarsın.
Açılışın ilk saniyelerinde sıfır görürsen
Akışı açtıktan hemen sonra ikinci bir yanılgı bekliyor: mesaj gelmeye başlar ama içindeki sayılar sıfır çıkabilir. Bu, mesajın gelmediği anlamına gelmiyor; otopilot henüz konum başlangıcını oturtmamış demek. Aynı kodu yarım dakika sonra çalıştırdığımızda sayılar yerine oturdu.
# hemen açılıştan sonra
bağlı: 1 0
akış açıldı, deneme: 1
enlem 0.0000000 boylam 0.0000000 yerden yükseklik 0.00 m
enlem 0.0000000 boylam 0.0000000 yerden yükseklik 0.00 m
enlem 0.0000000 boylam 0.0000000 yerden yükseklik 0.00 m
enlem 0.0000000 boylam 0.0000000 yerden yükseklik 0.00 m
enlem 0.0000000 boylam 0.0000000 yerden yükseklik 0.00 m
# yarım dakika sonra, aynı kod
bağlı: 1 0
akış açıldı, deneme: 1
enlem 37.1590998 boylam 38.7969001 yerden yükseklik -0.01 m
enlem 37.1590998 boylam 38.7969001 yerden yükseklik -0.01 m
enlem 37.1590998 boylam 38.7969001 yerden yükseklik -0.01 m
enlem 37.1590998 boylam 38.7969001 yerden yükseklik -0.01 m
enlem 37.1590998 boylam 38.7969001 yerden yükseklik -0.01 mBoş öznitelik ile sıfır değer aynı şey değil. Birincisinde mesaj hiç yok, ikincisinde mesaj var ama içi henüz dolmamış. Kodda bu ikisini ayırmazsan yanlış yerde arama yaparsın.
En sık yapılan hata
Akış hızını bir kere ayarlayıp unutmak. Çok rotorlu araçta akış isteğiyle gelen hız kalıcı değil; otopilot kapanıp açıldığında değer sıfıra dönüyor. Kod her açılışta isteği yeniden göndermek zorunda.
Hata Mesajları ve Anlamları
dronekit.TimeoutError: wait_ready experienced a timeout after 30 seconds.
Kod öznitelikler dolsun diye bekliyor, mesajlar hiç gelmediği için bekleme süresi doluyor. Hattın kopuk olduğu anlamına gelmiyor; akış hızı sıfırken de bu satır çıkar.
Link timeout, no heartbeat in last 5 seconds
Bu satır bir uyarı, hata değil. Burada eksik olan bağlı sinyalinin kendisi, yani sorun akış hızında değil hatta. Kablo, baud ve seri port protokolüne bak.
No ap_message for mavlink id (141)
İstediğin mesajı otopilot hiç üretmiyor. Akış hızını yükseltmek bir şey değiştirmez, çünkü ortada bir akış yok. Bu satırın kendisi yalnızca simülasyonda basılıyor; gerçek kartta yalnızca isteğin reddedildiğini görürsün.
Sahada ne değişir
Ölçümü simülasyonda yaptık ama akış tablosunu işleten kod, gerçek kartta çalışan kodun aynısı. Sahada fark hatta çıkıyor: telemetri modülünde paket kaybı varsa mesaj doğuyor ama sana ulaşmıyor. İki tabloyu ayırt etmek için otopilotun mesajı ürettiğini önce kısa kabloyla doğrula, menzil sorununa sonra bak.
Bu konuyu uçtan uca çalışmak istersen
Akış hızları, öznitelik dinleyicileri ve otonom komutların tamamı Python ile Sıfırdan İHA Kontrolü eğitiminde adım adım işleniyor. Bu yazıdaki tabloyu derste karar zinciri, kaynak kod kanıtı ve log imzası tablolarıyla birlikte bulacaksın.
İNDİRİM KUPONU
Kupon kodu: SOFTIVATION15
Eğitimi alırken ödeme ekranındaki "Kupon kodu" kutusuna bu kodu yaz, %15 iner.




Yorumlar