SITL çalışıyor, Mission Planner bağlanmıyor
Terminalde SITL dönüyor, araç ayakta. Mission Planner'da TCP'yi seçiyorsun, adres 127.0.0.1, port 5760, Connect. Bir süre bekliyor, sonra vazgeçip No Heartbeat Packets Received yazıyor.
Ortada kablo da radyo da yok; bozulacak bir şey kalmamış gibi duruyor. Çoğu kişi bu noktada baud hızıyla, güvenlik duvarıyla, hatta Mission Planner sürümüyle oynamaya başlıyor.
Ayıklanacak tek bir soru var oysa: soket açılmıyor mu, yoksa açılıyor da içinden bayt mı geçmiyor. Bunlar bambaşka iki arıza.
Bağlandı diyor, tek bayt yok
SITL açılışta tek satır basar: Waiting for connection .... İlk istemci gelince satır Connection on serial port 5760 olur ve akış başlar. Buraya kadar normal.
İkinci istemcide iş değişiyor. Python betiğin 5760'ta duruyorken Mission Planner'ı da aynı porta yolluyorsan, Mission Planner'ın bağlantı çağrısı başarıyla dönüyor. TCP el sıkışmasını işletim sisteminin çekirdeği tamamlıyor çünkü.
SITL o soketi hiç teslim almıyor. Ekranda bağlantı kurulmuş gibi duruyor, saniyeler geçiyor, heartbeat gelmiyor.
Neden böyle davranıyor
SITL'in seri port sürücüsü aynı anda tek bağlantı tutar. Kaynak koddaki karşılığı libraries/AP_HAL_SITL/UARTDriver.cpp içindeki _check_connection fonksiyonu; bağlantı zaten varsa accept çağrılmadan geri dönülüyor ve hemen üstünde "we only want 1 connection at a time" yorumu duruyor.
Bekleyen ikinci istemci dinleme kuyruğunda kalıyor. Kuyruk taşmadığı için istemciye hata da dönmüyor; hat sessiz kalıyor.
En sık yapılan hata, bağlantı kurulmuş göründüğü için ayarlarla oynamaya başlamak. Bakılacak tek şey var: o soketten kaç bayt geldi.
Aynı SITL'in üç kapısı var
Tek bir arducopter örneği üç ayrı TCP portu açar: 5760 SERIAL0, 5762 SERIAL1, 5763 SERIAL2. Üçü de bağımsız birer MAVLink uç noktası ve her biri kendi tek istemcisini kabul ediyor.
Betiği 5760'ta bırakıp Mission Planner'ı 5762'ye bağlayabilirsin. İkinci bir yer kontrol istasyonu için MAVProxy kurmak zorunda değilsin.
Bir ayrıntı daha: bu portlar 0.0.0.0 üzerinde dinleniyor, yalnızca 127.0.0.1'de değil. SITL sanal makinede, Mission Planner ana makinedeyse ve ağ köprü modundaysa doğrudan sanal makinenin adresine TCP açabilirsin.
Aynı anda ikinci bir örnek başlattıysan taban port kayar. -I 1 bütün port numaralarına 10 ekliyor, yani o örnekte SERIAL0 5770 oluyor.
Kapıyı ölçen küçük betik
Tahmin yerine ölçüm. Şu betik tek bir porta bağlanıyor, altı saniye dinliyor ve üç sonuçtan birini söylüyor: kapı dolu, yanlış port, ya da akış sağlıklı.
Doğrulama
Bu bölümde kendi koşumuzun çıktısını gösteriyoruz; adımları uygulaman gerekmiyor. Aynı SITL örneği üzerinde dört durumu arka arkaya ölçtük.
$ python3 sitl_kisa.py 127.0.0.1 5760 # tek istemci varkenconnect : tamamalınan : 116546 bayt, 36 heartbeatteşhis : akış sağlıklı
$ python3 sitl_kisa.py 127.0.0.1 5760 # betik zaten bağlıykenconnect : tamamalınan : 0 bayt, 0 heartbeatteşhis : soket açık, tek bayt yok -> kapı dolu
$ python3 sitl_kisa.py 127.0.0.1 5762 # aynı anda ikinci kapıconnect : tamamalınan : 776 bayt, 32 heartbeatteşhis : akış sağlıklı
$ python3 sitl_kisa.py 127.0.0.1 5799 # hiç açılmamış portconnect : olmadı -> [Errno 111] Connection refusedİkinci koşuda connect başarıyla döndü ama tek bayt gelmedi. Aynı anda 5762 sorunsuz veri veriyor.
Bir de zaman içindeki hâline baktık. İkinci istemci 10. saniyede bağlandı, 25. saniyeye kadar tek bayt almadı, ilk istemci kapanır kapanmaz akış ona geçti.
Hata Mesajları ve Anlamları
No Heartbeat Packets Received
Mission Planner porta bağlandı ama geçerli heartbeat okuyamadı. Kaynak koddaki metin bunu açıkça söylüyor: bağlanmadan önce iki geçerli heartbeat bekleniyor. Yani bu mesaj, kurulmuş bağlantının içinden veri geçmediğini anlatır.
[Errno 111] Connection refused
Bu farklı bir arıza. O adreste dinleyen kimse yok. SITL kapalı, port yanlış ya da sanal makinenin adresi başka. Yukarıdaki betik bunu ilk saniyede ayırt ediyor.
Waiting for connection ....
SITL kendi çıktısına basar. Anlamı, SERIAL0'ın boş olduğu ve ilk istemcinin beklendiğidir. Bu satır ekranda duruyorken bağlanamıyorsan sorun ağ tarafındadır, SITL tarafında değil.
Closed connection on SERIAL0
Bağlıydın, düştün. Betiğin kapandıysa ya da Mission Planner'da Disconnect'e bastıysan normal. Kendiliğinden çıkıyorsa iki istemcinin sırayla aynı kapıya girdiğine bak.
Simülasyonu derinleştirmek istersen
Buradaki teşhis, SITL ve Gazebo tarafında karşına çıkacak ağ sorunlarının yalnızca ilki. Kurulumdan kamera görüntüsüne, oradan sürü senaryolarına kadar olan yolu Yapay Zeka ve İHA Simülasyon eğitimi boyunca adım adım kuruyoruz.
İNDİRİM KUPONU
Kupon kodu: SOFTIVATION15
Eğitimi alırken ödeme ekranındaki "Kupon kodu" kutusuna bu kodu yaz, %15 iner.




Yorumlar