Raspberry Pi bağlıyken telemetri gelmiyor, hattı çoğalt
Raspberry Pi'yi otopilota bağladın, kendi Python betiğin telemetriyi okuyor. Sonra yer kontrol istasyonunu da aynı hatta bağlamak istiyorsun ve ekran boş kalıyor.
Kablo yerinde, baud doğru, betik hâlâ veri basıyor. Bu tabloda kablo aramak zaman kaybı: bir MAVLink hattını iki program aynı anda okuyamaz.
Bir seri hattı iki program neden bölüşemez
Seri hat noktadan noktaya çalışır. Otopilot baytları sırayla gönderir, karşı taraftaki okuyucu onları toplayıp MAVLink çerçevesine dönüştürür.
İşletim sistemi aynı seri aygıtı ikinci kez açmaya izin verir ve bunu sana söylemez. İki proses aynı akıştan sırayla okur, her biri çerçevenin bir parçasını alır. Sağlaması tutmayan çerçeve sessizce atılır.
Ağ tarafında tablo daha nettir. Tek istemci kabul eden bir uca ikinci bağlantı kurulur, bağlantı açık görünür, içinden tek bayt akmaz.
Tek okuyucu kur, akışı çoğalt
Çözüm, hattın önüne bir çoğaltıcı koymak. Seri portu tek bir proses açar; yer kontrol istasyonu, görev betiği ve kayıt aracı o prosesin açtığı ağ uçlarına bağlanır.
Otopilotta iki ayrı telemetri portu varsa ikisini birden kullanabilirsin. TELEM1 telemetri radyosuna, TELEM2 yardımcı bilgisayara ayrılır; bunlar farklı seri portlardır ve birbirini engellemez. Çoğaltma ihtiyacı, tek portu birden çok programın paylaşması gerektiğinde çıkar.
Yapılandırma
Yardımcı bilgisayarda mavlink-router çalıştır. Seri ucu bir kez tanımla, her tüketici için ayrı bir UDP ucu aç.
Python tarafında tek değişiklik bağlantı adresi. Betik artık seri porta değil, çoğaltılmış uca bağlanır.
Aynı işi MAVProxy ile de yapabilirsin: bir tane --master ve istediğin kadar --out verirsin. MAVProxy zayıf bir Raspberry Pi'de işlemciyi yorabilir; ArduPilot dokümanı bu durumda mavlink-router'a geçmeyi öneriyor.
Ölçümü nereden aldık
Aşağıdaki sayılar bizim yayın öncesi doğrulama koşumuzdan geliyor. Yazıdaki iddianın kanıtı olarak duruyor; senin tekrarlaman gereken bir adım olarak değil.
Aynı uca bağlanan ikinci istemci altı saniye boyunca tek bayt almadı. Çoğaltıcı arkasındaki iki istemci ise aynı akışı eş zamanlı aldı ve aralarındaki fark bir mesaj oldu.
Doğru kurulumda ekranda gördüğün ilk satırlar şöyle olmalı; heartbeat gelmiyorsa çıktı burada takılır.
Connect /dev/serial0 source_system=255Log Directory:Telemetry log: mav.tlogWaiting for heartbeat from /dev/serial0MAV> link 1 downHata Mesajları ve Anlamları
Aşağıdaki satırlar araçların kendi kaynak kodunda geçen dizelerdir. Hangisini görüyorsan bakacağın yer değişir.
MAV> link 1 down
MAVProxy belirlenen süre boyunca tek paket almadığında bu satırı basar. Hat hiç akmıyor ya da başka bir proses aynı portu paylaşıyor demektir. Önce portu kimin açtığına bak.
Waiting for heartbeat from /dev/serial0
İlk heartbeat hiç gelmemiş. Burada paylaşım değil, temel bağlantı sorunu vardır: TX ile RX ters bağlanmış, baud uyuşmuyor ya da açtığın aygıt yolu yanlış olabilir.
Link timeout, no heartbeat in last 5 seconds
Akış başlamış, sonra kesilmiş. Paylaşılan hatta tipik görüntü budur: çerçeveler bir süre toplanır, sonra iki okuyucu birbirinin baytını alır ve sağlama tutmaz.
Timeout in initializing connection.
DroneKit bağlantıyı kurdu, ama başlangıç parametre akışını tamamlayamadı. Bant genişliği yetmiyor olabilir; hattı ikinci bir programla paylaşıyorsan sebep de budur.
WARNING: You should uninstall ModemManager as it conflicts with APM and Pixhawk
Sistemde ModemManager kurulu. Bu servis USB seri aygıtları kendiliğinden açar ve hattı üçüncü bir taraf olarak tutar. Yardımcı bilgisayarda bu servisi kaldır.
Bu konuyu derinleştirmek istersen
Yardımcı bilgisayar ile yer kontrol istasyonu arasındaki hattı baştan sona kuran ders anlatımı ve uygulamalar İHA Haberleşme Teknolojileri eğitimi içinde. Kaynak kod kanıtları, log imzası tabloları ve saha vakaları da orada.
İNDİRİM KUPONU
Kupon kodu: SOFTIVATION15
Eğitimi alırken ödeme ekranındaki "Kupon kodu" kutusuna bu kodu yaz, %15 iner.




Yorumlar