top of page
Eğitim Paneli

DroneKit kurulmuyor (Python 3.11 ve üzeri)

DroneKit kurulum zinciri: pip geçiyor, import dronekit hata veriyor

pip install dronekit yazıyorsun, kurulum sorunsuz bitiyor. Sonra kodun ilk satırında import dronekit diyorsun ve program tam orada duruyor.

Yarışma hazırlığında en çok vakit yakan yerlerden biri burası. Kodunda bir yanlış yok, kurulumu da eksik yapmadın. Sorun paketin kendisinde ve yıllardır orada duruyor.

Aşağıdaki yolların hepsi 1 Ağustos 2026'da Python 3.11.15 üzerinde tek tek denendi. Hangisinin nerede durduğunu birebir hata metniyle yazıyorum.

pip neden geçiyor da import patlıyor

pip'in işi paketi indirip yerine koymak. Paketin o Python sürümünde çalışıp çalışmayacağına bakmaz. Bakması için paketin kendi bilgi kartında "ben şu sürümlerde çalışırım" yazması gerekir.

DroneKit'in kartında o satır boş. PyPI'daki son sürüm 2.9.2 ve 18 Mart 2019'da yüklenmiş. Python 3.10 bundan iki buçuk yıl sonra çıktı. Yani yayınlanmış paket, senin kullandığın Python'u hiç görmedi.

Python 3.10'da dilin içinde bir taşınma oldu: sözlük benzeri sınıfların tanımları collections altından collections.abc altına geçti. DroneKit hâlâ eski adresi kullanıyor ve o adres artık yok.



Tablodaki ilk üç satır aynı yere çıkıyor: kurulum başarılı görünüyor, iş import satırında bitiyor.



Forumdaki en yaygın tavsiye bugün işe yaramıyor

Bu hatayı aratınca çıkan ilk öneri şu: "PyPI'daki sürümü bırak, doğrudan GitHub deposundan kur, orada düzeltilmiş."

Düzeltmenin yarısı gerçekten orada. Depodaki güncel kod Python 3.10 ve üzeri için doğru adresi kullanıyor. Ama aynı dosyanın 51. satırında, paketin kurulum listesinde adı hiç geçmeyen başka bir kütüphane çağrılıyor. Depodan kurduğunda o kütüphane gelmiyor ve import bu sefer daha erken duruyor.

Sonuç: tek satırlık bir çözüm yok. DroneKit'i ayakta tutmak istiyorsan eksik kütüphaneyi elle eklemen gerekiyor; PyPI sürümünde ayrıca taşınan adresi kod içinden düzeltmen gerekiyor.



İki yol var, ikisi de çalışıyor

Birincisi DroneKit'i yaşatmak: eksik kütüphaneyi kur, gerekiyorsa taşınan adresi import'tan önce elle bağla. Bu, elindeki eski projeyi çalıştırmak için makul.

İkincisi yeni yazdığın kodu DroneKit'e hiç bağlamamak. DroneKit'in altında zaten pymavlink çalışıyor; onu doğrudan kullanınca aradaki bakımsız katman ortadan kalkıyor. Aynı kalkış işi şu kadar kodla oluyor:



Bu kod tek başına çalışır, kurulumu tek satırdır ve arada eskimiş bir paket yoktur.



Biz bu kodu nasıl doğruladık

Yayına çıkmadan önce kodu ArduCopter 4.7.0 SITL üzerinde çalıştırdık. Aşağıdaki eğri o koşudan geliyor. Zaman ekseni bizim bilgisayarımızın saatinden değil, otopilotun kendi saatinden alındı.



Terminal çıktısı şuydu:


[+] baglandi sysid=1 compid=0
[+] GPS 3D fix, 10 uydu
[+] mod GUIDED istendi
    ARM denemesi 1 -> ack.result=0
[+] ARM edildi (1. denemede)
[+] TAKEOFF ack.result=0
[+] HEDEF IRTIFAYA ULASILDI: 9.70 m

Buradaki kalkış, gerçek bir uçuşun nasıl görüneceğinin garantisi değil. Simülasyonda GPS hemen 10 uydu veriyor, sahada beklersin; simülasyonda rüzgâr ve titreşim yok, sahada var. Bu ölçüm sadece kodun akışının doğru olduğunu gösteriyor.



İki tuzak


Telemetri akışını istemezsen GPS mesajı hiç gelmez. Kod GPS bekleyen döngüde sonsuza kadar takılır ve sen kodun kilitlendiğini sanırsın. Çoğu örnekte o satır yoktur.

İkincisi daha sinsi: TAKEOFF komutuna dönen onay, komutun kabul edildiğini söyler, hedefe ulaşıldığını değil. Onayı görüp bir sonraki komuta geçersen görev sırası bozulur. İrtifayı ayrıca teyit etmek zorundasın.



Hata Mesajları ve Anlamları

Kurulumdan kalkışa kadar ekranda görebileceğin metinler ve ne anlama geldikleri.

ModuleNotFoundError: No module named 'past'

DroneKit'in ihtiyaç duyduğu bir yardımcı kütüphane, paketin kurulum listesinde yazmadığı için gelmemiş. Elle kurman gerekiyor. Bu hatayı hem PyPI sürümünde hem de GitHub deposundan kurduğunda görürsün.

AttributeError: module 'collections' has no attribute 'MutableMapping'

Python 3.10'da taşınan adresin izi. PyPI'daki 2.9.2 sürümüne özgü; dosyanın 2689. satırında çıkar. GitHub'daki güncel kodda bu satır düzeltilmiş durumda.

PreArm: GPS 1: Bad fix

Otopilot ARM izni vermiyor çünkü GPS henüz 3B konum çözümü üretmedi. Kod ARM denemesini tekrarlıyorsa bu mesaj birkaç kez tekrar eder. Beklemek dışında yapacak bir şey yok.

PreArm: High GPS HDOP

Fix var ama uydu geometrisi zayıf. Otopilot konumun yeterince kesin olmadığını söylüyor. Açık alana çık, uydu sayısı artınca bu mesaj kaybolur.

PreArm: Need Position Estimate

Seçtiğin uçuş modu konum bilgisi istiyor ama otopilot henüz güvenilir bir konum tahmini kuramadı. GUIDED bu modlardan biri; konum tahmini oturmadan GUIDED'a geçemezsin.

PreArm: AHRS: waiting for home

Otopilot kalkış noktasını henüz kaydetmedi. Home noktası oturmadan ARM izni çıkmaz; bu da konum çözümünün oturmasına bağlıdır.

COMMAND_ACK sonucu 4 geliyor

4 değeri "komut çalıştırıldı ama başarısız oldu" demek. ARM komutunda bunu görüyorsan sebep prearm kontrollerinden biridir; asıl sebep ayrı bir metin mesajı olarak gelir. Kodun sadece onay koduna bakıyorsa sebebi hiç göremezsin.



Kaynaklar

Paketin son sürümü ve yükleme tarihi: PyPI — dronekit

ArduPilot'un yardımcı bilgisayar yazılımları listesi: ArduPilot — Companion Computers

Aynı soruyu soran bir forum başlığı: ArduPilot Discourse — High Level Python API for operations



Bu yazıyı okuyanlara

Buradaki kod kalkışı yaptırır. Ama görev yükleme, GUIDED ile AUTO arasındaki fark, yardımcı bilgisayardan kontrol ve araç sınıfının öznitelikleri ayrı bir sıra ister. Kursta bunlar hafta hafta ve uygulamalı ilerliyor.


İ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