Drone GUIDED modda duruyor, ArduPilot zaman aşımına bak
Kodu çalıştırıyorsun, drone iki üç saniye ilerliyor, sonra havada asılı kalıyor. Bağlantı kopmuş değil, uçuş modu GUIDED'da duruyor, kod hâlâ dönüyor. Ekranda seni uyaran tek bir satır bile yok.
Aynı kodu tekrar çalıştırınca aynı şey oluyor: kısa bir hareket, sonra duruş. Bu yazı o duruşun nereden geldiğini ve kodun hangi tek satırla düzeldiğini anlatıyor.
Kod çalışıyor, araç duruyor
Otopilot burada tasarlandığı gibi davranıyor. Senin gönderdiğin hız komutunu kalıcı bir emir saymıyor; üzerinden belli bir süre geçer ve yeni komut gelmezse hedefi kendiliğinden sıfırlıyor.
Gerekçesi güvenlik. Yardımcı bilgisayar çökerse, kod hata verip kapanırsa ya da kablo yerinden oynarsa, araç son duyduğu hızla ufka doğru gitmeye devam etmemeli. Otopilot sessizce yavaşlayıp bekliyor.
Dikkat edilecek yer dördüncü adım. Sayaç her yeni komutta başa dönüyor, yani komut akışı sürdüğü müddetçe araç gitmeye devam ediyor.
Otopilot komutu ne kadar süre tutuyor
Bu süre sabit değil, bir parametreye bağlı. ArduCopter 4.7 üzerinde varsayılanı 3 saniye; ayarlanabilir aralığı 0.1 ile 5 saniye arası.
Ölçmek için SITL'e bağlandık ve aynı hız komutunu iki farklı düzende gönderdik. Birincisinde komutu bir kez yollayıp bıraktık. İkincisinde yarım saniyede bir aynısını tazeledik.
Kırmızı eğride araç hedef hıza neredeyse ulaşıyor, sonra ivme sınırı içinde sıfıra iniyor. Düşüş ani değil, çünkü otopilot hedefi sıfırlarken aracı fren yapar gibi durduruyor. Mavi eğride hız dokuz saniye boyunca yerinde kalıyor.
Komutu döngüye al
Çözüm, komutu bir kez göndermek yerine hareket sürdüğü sürece yenilemek. Gönderim aralığını GUID_TIMEOUT değerinin belirgin altında tut; yarım saniye rahat bir seçim ve telemetri hattını da yormaz.
Aşağıdaki kod SITL'e bağlanıyor, on iki saniye boyunca yarım saniyede bir aynı hız komutunu gönderiyor ve o sırada ölçtüğü yatay hızı ekrana yazıyor. Araç GUIDED modda ve havadayken çalıştır.
Çıktının ilk saniyeleri hızlanmayı, gerisi sabit hızı gösteriyor:
t+ 0.0 s yatay hız 0.00 m/s
t+ 1.0 s yatay hız 1.96 m/s
t+ 2.0 s yatay hız 4.32 m/s
t+ 3.0 s yatay hız 4.83 m/s
t+ 4.0 s yatay hız 5.02 m/s
t+ 5.0 s yatay hız 5.09 m/s
t+ 6.0 s yatay hız 5.06 m/s
t+ 7.0 s yatay hız 5.02 m/s
t+ 8.0 s yatay hız 5.01 m/s
t+ 9.0 s yatay hız 5.02 m/s
t+10.0 s yatay hız 5.02 m/s
t+11.0 s yatay hız 4.99 m/s
t+12.0 s yatay hız 4.99 m/sHız üçüncü saniyeden sonra da yerinde kaldıysa tazeleme çalışıyor demektir. Aynı kodu tazeleme satırı olmadan çalıştırırsan kırmızı eğriyi kendi ekranında görürsün.
Hata Mesajları ve Anlamları
Bu konuyu ararken karşına çıkan üç satır ve gerçekte ne anlattıkları.
Mode change to GUIDED failed: requires position
GUIDED moda geçiş reddedildi. Otopilotun güvendiği bir konum kestirimi yok; GPS fix'i ya da EKF durumu henüz yerine gelmemiş. Kodun hız komutuna sıra bile gelmiyor. Önce konum kestiriminin oturmasını bekle.
PreArm: Need Position Estimate
Bir öncekinin ARM adımındaki karşılığı. Otopilot konumunu bilmeden ARM izni vermiyor. GUIDED modda çalışacaksan bu satır geçmeden hiçbir hareket komutu sonuç vermez.
target not received last 3.0 secs, stopping
Bu uyarıyı ArduPilot'un Rover yazılımı basar ve tam olarak burada anlatılan duruşu bildirir. Copter tarafında aynı durumda hiçbir metin gönderilmez, araç sessizce durur. Aynı kodu Rover'da denediğinde uyarıyı görüp Copter'da görmemenin sebebi bu.
Bu konu hangi kursta işleniyor
Yardımcı bilgisayardan otonom uçuş yazarken bu tür tuzaklar tek tek karşına çıkar. Komut tazeleme, GUIDED mod komutları, görev yükleme ve MAVLink tarafını sırayla işlediğimiz eğitim Python ile Sıfırdan İHA Kontrolü sayfasında duruyor.
Aynı konunun ders sürümünde otopilotun karar sırasını kaynak kod üzerinden takip ediyor, log imzalarını çıkarıyor ve kart bazlı farkları ele alıyoruz.
İNDİRİM KUPONU
Kupon kodu: SOFTIVATION15
Eğitimi alırken ödeme ekranındaki "Kupon kodu" kutusuna bu kodu yaz, %15 iner.




Yorumlar