top of page
Eğitim Paneli

Python kodu konum alamıyor (bağlantı kurulu görünüyor)

26 Ağu
3 dakikada okunur

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 m

Boş ö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


bottom of page