top of page
Eğitim Paneli

Pixhawk konumu Python'da yavaş geliyor (bağlantı sağlam)

8 Eki
3 dakikada okunur

Güncelleme tarihi: 14 Eki

Python kodun Pixhawk'a bağlanıyor ve heartbeat düzenli geliyor, ama konum ya hiç gelmiyor ya da saniyede bir kez geliyor. Hız komutu gönderiyorsun, ekrandaki konum ise hâlâ iki saniye öncesini gösteriyor.

Kablo ve hat sağlam, yine de veri yavaş. Yavaşlık üç ayrı yerden gelebilir ve hangisinde olduğunu bir dakikada ayırabilirsin.

Konum neden bu kadar seyrek geliyor

ArduCopter konumu kendiliğinden göndermez. Konum, Python ya da yer istasyonu gibi bir program istediğinde akmaya başlar; isteyen düşük hız istemişse düşük hızı alırsın.

İkinci olasılık Python tarafında. Okuma döngün her turda yarım saniye başka iş yapıyorsa gelen mesajlar kuyrukta birikir ve sen eski konumu okursun.

Üçüncüsü radyo. Telemetri radyosu dolduğunu bildirirse otopilot akışı kendisi yavaşlatır. Üç sebep de aynı belirtiyi verir, ekranda eski ya da seyrek konum görürsün; bu yüzden her birini ayrı ölç.



Hangisinde olduğunu bir dakikada ayır

On saniye boyunca gelen konum mesajlarını say. Aşağıdaki şekilde saydığın sayının seni hangi sebebe götürdüğünü görebilirsin.



Hiç gelmiyorsa kimse istememiş demektir. Yaklaşık saniyede bir geliyorsa düşük hızla istenmiş ya da radyo doluyor.

İstediğin hızla geliyor ama konum eskiyse sorun senin döngündedir. Sayı doğruysa ve konum yine de geride kalıyorsa mesajların zamanını yerel saatle karşılaştır.



En sık yapılan hata


COMMAND_ACK "kabul edildi" dediğinde hızın tuttuğunu varsayma. Onay yalnızca komutun alındığını bildirir. Hızı mesajları sayarak kontrol et.


Konumu istediğin hızda iste ve say

Konum mesajının hızını doğrudan iste, sonra gerçek hızı say. Aşağıdaki kod on saniye boyunca mesajları sayar ve ölçülen hızı yazar.



Aynı bağlantıya başka bir program da hız isterse aralık yeniden yazılır. Bu yüzden sayımı kendi kodunun içinde tut.

Örnek: Sürü provasında kodun saniyede 10 konum mesajı istiyor ve sayaç 10 Hz yazıyor. Takım arkadaşın aynı hattı paylaşan yer istasyonundan araca bağlanınca sayaç birkaç saniye sonra düşüyor; şekildeki ortadaki yol bu. Araçta bir şey bozulmadı, aynı bağlantıya başka bir program kendi hızını yazdı. Sayımı kendi kodunun içinde tuttuğun için düşüşü anında görürsün ve hızı yeniden istersin.



Çıktıyı oku

Kodu bu hâliyle, saniyede 10 mesaj isteyerek çalıştırırsan şunu alırsın:


COMMAND_ACK {command : 511, result : 0, progress : 0, result_param2 : 0, target_system : 255, target_component : 0}
ölçülen hız: 10.0 Hz
37.1590999 38.7969 0.0

İlk satır komutun alındığını, ikinci satır gerçek hızı gösterir. Üçüncü satırda enlem, boylam ve yerden yükseklik var.

İstediğin hızı değiştirirsen ikinci satır aşağı yukarı şöyle değişir:


İstediğin hız

Kodun yazdığı hız

istek yok

0 Hz (konum gelmiyor)

1 Hz

0.93 Hz

10 Hz

10 Hz

20 Hz

20 Hz


İstek işleme mantığı otopilotun içinde çalışır. Radyonun doluluğu ise yalnızca gerçek hatta ortaya çıkar; aynı sayma kodunu kendi radyo hattında çalıştırıp hızı orada da ölç.



Hata Mesajları



AttributeError: 'NoneType' object has no attribute 'lat'

Okuma süresi doldu ve recv_match mesaj yerine None döndürdü. Konum hiç istenmediğinde ya da hız çok düşükken bu hatayı alırsın. Mesajı kullanmadan önce None olup olmadığına bak.



Requested rate for message ID 33 too fast. Increase SCHED_LOOP_RATE

İstediğin aralık otopilotun döngü periyodundan kısa. Otopilot komutu DENIED ile reddeder ve bu metni STATUSTEXT olarak gönderir. Aralığı uzat, örneğin 100000 mikrosaniye ile başla.



EOF on TCP socket

TCP bağlantısı karşı taraftan kapandı. Bağlandığın programı, örneğin SITL'i, yeniden başlattıysan Python kodunu da yeniden başlat.



Python ile İHA kontrolünün devamı

Karar zincirini, firmware kaynak kodundan satır satır kanıtları ve log imzalarını Python ile Sıfırdan İHA Kontrolü eğitiminde işliyoruz. Eğitimde bu konunun bir dersi var.


İ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