top of page
Eğitim Paneli

Python'dan RC override yolluyorum, Pixhawk drone kalkmıyor

6 Eki
3 dakikada okunur

Güncelleme tarihi: 14 Eki

Python'dan gaz paketini yolluyorsun, kodda hata yok, drone ARM oldu. Gaz değerini 1550 yapıyorsun ama drone yerinden kımıldamıyor.

Paketin otopilota ulaşıp ulaşmadığını bilemiyorsun, çünkü otopilot paketi reddederken sana bir hata mesajı göndermiyor. Önce bunu görünür yapalım, sonra sebebi bulalım.

Otopilot paketi gerçekten kabul etti mi

Otopilot, kanalları nasıl gördüğünü düzenli olarak geri yollar. Gönderdiğin 1550 orada gaz kanalının değeri olarak görünüyorsa paket kabul edilmiştir.

Görünmüyorsa gaz değerine ve ARM'a bakmayı bırak. Paket daha otopilotun kapısında takılmıştır.



Paket nerede düşüyor

Paketin önünde dört engel var: kimin gönderdiği, ne sıklıkla yenilendiği, gaz değerinin ne kadar düşük olduğu ve drone'un hangi modda olduğu. İlk ikisi hata mesajı üretmeden paketi düşürdüğü için en çok vakit kaybettiren onlardır.

Aşağıdaki şemada her engelin ekranda nasıl bir iz bıraktığını görüyorsun. Üstteki iki dalda tek iz, gaz kanalının yerinden oynamamasıdır.




Gönderici kimliği

Otopilot override paketini yalnızca MAV_GCS_SYSID parametresindeki kimlikten kabul eder ve varsayılan değeri 255'tir. Kodun başka bir kimlikle konuşuyorsa otopilot paketi sessizce atar.

Eski dokümanlarda bu parametre SYSID_MYGCS adıyla geçer, güncel sürümde adı değişti.

ArduCopter 4.7.1'de aynı gaz paketini 255, 254 ve 1 kimlikleriyle yollarsan yalnızca 255 kabul edilir. Diğer ikisinde otopilotun gördüğü gaz kanalı yerinden oynamaz.

Örnek: Sürü uçuşunda her aracın Raspberry Pi'sine ayrı bir kimlik verdin, diyelim 11 ve 12; araçlardaki MAV_GCS_SYSID ise 255'te kaldı. Pi'den yolladığın gaz paketi otopilota varıyor ama kimlik tutmadığı için sessizce atılıyor ve geri gelen kanal 3 yerinden oynamıyor. Ya kodun source_system değerini 255 yap ya da her aracın MAV_GCS_SYSID değerini o aracın Pi kimliğine eşle.



Paketi neden sürekli yollamalısın

Override kalıcı bir komut değildir. RC_OVERRIDE_TIME varsayılan olarak 3 saniyedir ve paketler kesilince kanal kumandaya geri döner.

Şekildeki alt şeride bak: tek paket gönderdiğinde gaz 3 saniye boyunca 1550'de kalır, sonra kumandanın değerine düşer. Bu yüzden paketi bir döngü içinde saniyede birkaç kez göndermelisin.



En sık yapılan hata: override'ı tek paketle gönderip drone'un hareket etmesini beklemek. Paket yaklaşık 3 saniyede düşer ve gaz kumandaya geri döner.


Gaz değeri ve mod

Gazı FS_THR_VALUE eşiğinin altına gönderirsen otopilot bunu radyo kaybı sayar ve failsafe'e geçer. Varsayılan eşik 975'tir.

Kaynak kodda GUIDED modu roll ve pitch kumanda kanalına hiç bakmaz, bu yüzden bu modda roll override'ı drone'u yönlendirmez. Gaz ve yön girdisini okuyan STABILIZE gibi bir modda dene.

Kullanmadığın kanala 0 yazmak o kanalı kumandaya bırakır. Aşağıdaki kod bu yüzden roll, pitch ve yaw için her pakette 1500 gönderir.



Kodu çalıştır

Kod kimliği okur, override'ı saniyede 10 kez gönderir ve otopilotun gördüğü kanal 3 değerini yazdırır. Pervaneleri sök, çünkü kod drone'u ARM eder.




Doğru çalışınca ekranda ne görürsün

Kimlik tutuyorsa kodu çalıştırdığında otopilotun gördüğü kanal 3, senin gönderdiğin değere eşit olur:


MAV_GCS_SYSID = 255 | bizim kimlik = 255
otopilotun gördüğü kanal 3: 1550
otopilotun gördüğü kanal 3: 1550
otopilotun gördüğü kanal 3: 1550
otopilotun gördüğü kanal 3: 1550
otopilotun gördüğü kanal 3: 1550
...

Kimlik tutmuyorsa aynı kod şu çıktıyı verir. Kanal 3 gönderdiğin 1550'ye hiç çıkmaz, nedeni de hiçbir yerde yazmaz:


MAV_GCS_SYSID = 255 | bizim kimlik = 1
otopilotun gördüğü kanal 3: 1000
otopilotun gördüğü kanal 3: 1000
otopilotun gördüğü kanal 3: 1000
otopilotun gördüğü kanal 3: 1000
otopilotun gördüğü kanal 3: 1000
...


Gerçek donanımda ne değişir

Paketin kabul edilmesi otopilot yazılımının kararıdır ve gerçek kartta da aynı işler. Telemetri hattındaki gecikmeyi ve gazın gerçek tepkisini ise ancak kendi drone'unda görebilirsin.

Resmî doküman da MAVLink üzerinden gelen kumandanın telemetri hattı yüzünden gecikmeli tepki verebildiğini yazıyor.



Hata Mesajları

Radio Failsafe

Gaz override'ını FS_THR_VALUE eşiğinin altına indirdiğinde görünür. FS_THR_ENABLE açıksa otopilot modu değiştirir. Çözüm: gazı 1000'in altına gönderme.

Radio Failsafe Cleared

Gaz değeri eşiğin üstüne döndüğünde görünür. Failsafe bitmiştir ama modu yine de kontrol et, otopilot seni eski moda geri almayabilir.

PreArm: Radio failsafe on

ARM denerken radyo failsafe aktifse görünür. Gaz değerini eşiğin üstüne getirip failsafe'in temizlendiğini bekle, sonra tekrar dene.



Python kursunda devamı

Bu davranışı kaynak koddan, log desenlerinden ve forum vakalarından adım adım ayıran ders, Python ile Sıfırdan İHA Kontrolü eğitiminin Güncel Eklemeler bölümünde duruyor.


İ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