top of page
Eğitim Paneli

Raspberry Pi Pixhawk'a bağlanmıyor, kablo doğru

7 Ağu
4 dakikada okunur

Raspberry Pi'yi Pixhawk'ın TELEM2 portuna bağladın, kabloyu üç kez kontrol ettin, betiği çalıştırdın. Ekranda tek satır var ve orada duruyor: bağlantı bekleniyor. Kablo yerinde, kart açık, ışıklar yanıyor.

Bu noktada çoğu kişi kabloyu söküp yeniden takar. Nadiren işe yarar, çünkü sorun genelde telin kendisinde değil, o teli kimin dinlediğinde ve iki tarafın aynı hızda konuşup konuşmadığındadır. Aşağıda hattı sırayla eleyeceğiz.

Kablo doğruysa bile üç tel yanlış olabilir

Pixhawk'ın TELEM2'sinde altı pin var ama Raspberry Pi'ye giden sadece üçü: gönderme, alma ve toprak. Gönderme ile alma çapraz bağlanır. Aynı isimli pinleri karşı karşıya getirirsen iki taraf da dinlemeye geçer ve kimse konuşmaz.

Toprak hattı en sık atlanan tel. Pi'yi ayrı bir kaynaktan besliyorsan iki kartın arasında ortak bir referans kalmaz; hat ya hiç kurulmaz ya da rastgele bozuk paket üretir.




Portu senden önce başka biri açmış olabilir

Raspberry Pi'de seri port varsayılan olarak boş değildir. Linux'un kendi konsolu o hattı oturum açmak için kullanır. Bluetooth donanımı Pi 3 ve 4'te iyi UART'ı kendine alır. ModemManager yeni bir seri cihaz gördüğünde onu saniyelerce yoklar.

Bunların hepsi portu açar. Senin betiğin de açar ama baytı önce alan kim varsa MAVLink akışı ona gider ve sana bir şey kalmaz.

  • Linux seri konsolu: raspi-config içinde oturum kabuğunu kapat, donanımı açık bırak.

  • Bluetooth: config dosyasına disable-bt satırını ekle, kartı yeniden başlat.

  • ModemManager: kurulu ise servisi durdur.

  • Kapanmamış eski süreç: bir önceki denemenden kalan betik hâlâ portu tutuyor olabilir.



Pi 5'te düğüm adı değişti

Yıllardır dolaşan talimatlar /dev/serial0'ı işaret eder ve Pi 3 ile Pi 4'te doğrudur. Pi 5'te aynı ad kart üzerindeki hata ayıklama soketine bağlıdır; GPIO pinlerine giden düğüm /dev/ttyAMA0'dır. Aynı kabloyla, aynı ayarla, sırf düğüm adı yüzünden hiçbir şey gelmez.

Önce hangi Pi'de olduğuna bak, düğümü ona göre seç. Eski bir forum cevabını Pi 5'e birebir uygulamak, bu konuda en çok zaman kaybettiren hata.



İki taraf aynı hızda mı konuşuyor

Otopilot tarafında hız bir parametreyle belirlenir ve oraya yazdığın sayı doğrudan baud değildir; firmware onu bir tablodan çevirir. 57 yazarsan 57600 olur, 921 yazarsan 921600. Sıfır ya da negatif yazarsan port kapanmaz, sessizce 57600'e döner.

Betik tarafındaki hız da aynı olmalı. Farklıysa hat kurulur ama ekrana anlamsız karakterler dökülür. Bu, hiç veri gelmemesinden farklı bir durumdur ve farklı yere bakmanı gerektirir.

Bir de tersi var: hız uyuşuyor, hat kuruluyor, sonra kopup duruyor. Genelde sebep, istediğin telemetri akışının o hıza sığmamasıdır.



Bu ölçümü ArduCopter 4.7.0 üzerinde yaptık. Hiçbir şey istemezsen hatta neredeyse trafik yok; akışı senin betiğin açıyor. 50 Hz gibi bir hız isteyip 57600'de kalırsan otopilotun ürettiği veri hattın taşıyabileceğinin katlarına çıkar ve paketler düşmeye başlar.



Hattı tek betikle sırayla ele

Aşağıdaki betik yukarıdaki adımları sırayla uygular. Bağlanamazsa hangi katmanda durduğunu söyler; bağlanırsa firmware sürümünü, heartbeat aralığını ve seri parametrelerini basar. Betiği Raspberry Pi üzerinde çalıştırman için yazdık.



Çalıştırırken bağlantı adresini ve hızı argüman olarak verebilirsin. Pi 5 kullanıyorsan ilk argümanı /dev/ttyAMA0 yap.



Hat kurulduğunda ne görürsün

Aşağıdaki çıktı, betiğin sağlıklı bir hatta verdiği yanıt. Bu doğrulamayı da aynı kurulumda koştuk; senin kartında sürüm satırı ve parametre değerleri farklı çıkabilir.


HEARTBEAT VAR  sysid=1 compid=0
firmware 4.7.0
  SERIAL2_BAUD      57
  SERIAL2_PROTOCOL  2
  SERIAL2_OPTIONS   0

Hat kurulmadığında ise betik sana dört komut bırakır ve çıkar. Sırayı bozmadan yukarıdan aşağı uygula.



Hata Mesajları ve Anlamları

Aşağıdaki metinler MAVProxy, DroneKit ve pyserial'ın gerçekten bastığı satırlar. Hangisini gördüğün, hangi katmanda takıldığını söyler.

Waiting for heartbeat from /dev/serial0

MAVProxy portu açabildi ama karşıdan MAVLink çözülmedi. Port açıldığına göre düğüm adı ve izin sorunu geride kaldı. Sıradaki adaylar: gönderme ve alma hattının çapraz olmaması, ortak toprak bulunmaması, iki tarafın hızının farklı olması ya da o portun otopilotta MAVLink'e ayarlı olmaması.

link 1 down

Bir süre paket geldi, sonra kesildi. Karakterler okunabiliyorsa hız doğru, ama hat taşıyamıyor ya da fiziksel bağlantı kararsız. Ekranda okunamayan karakterler görüyorsan tablo başkadır: bu, iki tarafın hızının farklı olması demektir.

dronekit:Link timeout, no heartbeat in last 5 seconds

DroneKit portu açtı, beş saniye bekledi, heartbeat gelmedi. Aynı adresle MAVProxy çalışıyorsa sorun DroneKit'te değil, zaman aşımı süresinde ya da o an portun başka bir süreç tarafından tutuluyor olmasındadır.

could not open port /dev/serial0: [Errno 2] No such file or directory

Port hiç yok. Ya seri donanım açılmamış ya da bu Pi'de o ad başka bir şeye karşılık geliyor. Cihaz listesine bak ve düğümün gerçekten var olduğunu gör.

could not open port /dev/serial0: [Errno 13] Permission denied

Düğüm var, kullanıcının erişim hakkı yok. Kullanıcıyı seri port grubuna ekle ve oturumu kapatıp aç. Betiği yetkili kullanıcıyla çalıştırmak bunu çözer gibi görünür ama Python ortamını değiştirdiği için başka hatalara yol açar.



Sahada ne değişir

Buradaki adımların çoğu gerçek donanıma bağlı. Portu kimin tuttuğu, düğüm adının hangi cihaza gittiği, kablonun çapraz olup olmadığı simülasyonda karşılığı olmayan sorulardır; simülasyon ağ soketi üzerinden konuşur, ortada UART yoktur.

Simülasyonda doğrulayabileceğin kısım betiğin mantığı ve akışın bant ihtiyacı. Yukarıdaki ölçüm de tam olarak bu yüzden orada yapıldı. Kabloyu, portu ve izinleri kendi kartında ölçeceksin.


En sık yapılan hata: bir ayarı değiştirip kartı yeniden başlatmadan sonuca bakmak. Seri hız ve akış kontrolü ayarları açılışta okunur; kartı yeniden başlatmadan yaptığın değişiklik hattı etkilemez ve doğru düzeltmeyi yanlışlıkla elemiş olursun.


Bu yazıyı okuyanlara

Buradaki sıra hattı ayağa kaldırmak için yeterli. Kararın firmware içinde hangi satırdan geldiğini, parametrelerin kaynak koddaki gerçek varsayılanlarını ve saha vakalarını görmek istiyorsan eğitimde bunları tek tek açıyoruz.


İ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