İçeriğe geç

ROV araçları için otonom programlama

Otonom programlama biraz zor bir alan. İnsansız sualtı sistemleri veya drone için otonom yazıyorsanız işler biraz daha zorlaşıyor. Türkçe pek kaynak olmadığı için kendi tecrübelerimden yararlanarak sizlere bir yazı yazma gereği hissetim. Özellikle Teknofest vb. yarışmalara katılan insanlar buradan faydalanabilirler.

Başlamadan önce belirtmem gerekir ki doğru bir otonom algoritması için elinizde ne kadar fazla sensör varsa o kadar başarılı sonuçlar elde edersiniz. Ben bu içerikte Ardusub framework’u kullanan robotlar üzerinden gideceğim.

Adım 1 : Raspberry Pi ve Pixhawk’ı yapılandırmak

Raspberry Pi için Ardusub destekleyen dağıtımı bu adresten indirebilirsiniz. İndirdikten sonra Etcher aracılığı ile bir sd karta yükleyip Raspberry Pi üzerine takabilirsiniz. Bu dağıtımın adı Companion olarak geçer. Daha sonra internet üzerinden arama yapmanız gerekirse aklınızda bulunsun.

etcher

Daha sonrasında Raspberry Pi ile iletişim kurmak için bazı internet ayarlarınızı yapılandırmanız gerekir.

Denetim Masası> ağ ve paylaşım merkezi > bağdaştırıcı ayarlarını değiştir
Ethernet’e sağ tıklayın ve özelliklere tıklayın
internet Protocol Version 4 (TCP/IPv4) tıklayın ve tekrar özelliklere tıklayın.
ardından ayarları şu şekilde düzenleyin: IP Address : 192.168.2.1, Subnet Mask: 255.255.255.0

İnternet ayarlarınızı yapılandırma tamamlandıktan sonra artık tarayıcınıza 192.168.2.2:2770/system yazarak Companion arayüzüne bağlanabilirsiniz.

Arayüze bağlandıktan sonra Pixhawk Firmware Update kısmından Pixhawk içerisine gerekli firmwareyi otomatik olarak kurabilirsiniz.

Adım 2 : Pixhawk ile iletişim

Robotunuzu yönlendirebilmek için Pixhawk ile iletişim kurmanız gerekiyor. Bunu birden farklı şekillerde yapabilirsiniz.

Örneğin Raspberry Pi üzerinden veya doğrudan bilgisayar üzerinden robotunuzu yönlendirebilirsiniz. Bu seçimi sizlere bırakıyorum. Fakat burada bilinmesi gereken önemli detay bilgisayar üzerinden komut vermek isterseniz Qgroundcontrol ve benzeri yazılımlar ile Pixhawk bağlantı portunu kullanmamanız gerekiyor. Aksi takdirde Pixhawk ile iletişim kuramazsınız.

İletişim kısmında dronlar için yazılmış olan pymavlink kütüphanesini kurmamız gerekiyor.

konsola

yazarak kurulumunu gerçekleştirebilirsiniz.

Yazının fazla uzun olmaması için kodları aşağıda verip yorum satırı olarak yanlarına ne işe yaradıklarını yazacağım. Eğer Raspberry Pi üzerinden kod yazacaksanız nano kodadi.py yazarak dosya oluşturabilirsiniz veya bilgisayardan yazıyorsanız normal bildiğiniz gibi kod dosyası oluşturabilirsiniz.

Raspberry Pi için:

Bilgisayardan doğrudan serial ile bağlanmak için:

UDP üzerinden bağlantı kurmak için :

Adım 3 : Robotu yönlendirme

Robotu yönlendirmek için yine 2 farklı yöntem bulunuyor.

  1. PWM sinyalleri göndererek robotu hareket ettirmek.
  2. Motorlara manuel komut göndererek robotu hareket ettirmek.

Kendi stratejinize göre istediğiniz yöntemi kullanabilirsiniz. 2 yöntemi de aşağıda göstereceğim. İlk olarak PWM sinyalleri ile başlayalım. PWM Sinyali gönderebilmek için channel id dediğimiz numaralara ihtiyacımız var. Her id farklı bir komut türünü temsil etmektedir. Channel id ve anlamlarını aşağıda bulunan görselde görebilirsiniz.

PWM sinyalleri ile robotumuzu yönlendirebileceğimiz fonksiyonumuzu yazalım.

fonksiyonumuzu yazdıktan sonra artık pwm_gonder(channel,pwmsinyali) şeklinde komut gönderdiğimizde artık robotumuz çalışacaktır. Tabii robot arm değilse çalışmayacaktır.

PWM sinyali esc’nizin aldığı pwm sinyal aralığını temsil eder. Blue Robotics’in escleri ve Qgroundcontrol’ün varsayılan ayarları 1100-1900 arasında değer almaktadır. Buna göre 1500 = nötr, 1900 = full güç ileri, 1100 = full güç geri anlamına gelmektedir.

Robotumuzu ileri yönde hareket ettirelim. Yukarıda bulunan görselde forward(ileri) id’si 5 olduğu için pwm_gonder fonksiyonuma 5 ve 1900 giriyorum.

Burada PWM kısmı kafanızı karıştırıyor ve benim gibi tek tek şu kadar hızda gitmem için ne kadar PWM değeri vermem gerekiyor tarzı düşüncelere kapılmamak için mapping fonksiyonu yazabilirsiniz. Tabii isteğe bağlı ben PID yazarken işimi oldukça kolaylaştırıyor. Örneğin ileriye gitmek için 1900 yazmak yerine 1 geriye gitmek için 1100 yazmak yerine -1 yazmak istiyorum. Aynı zamanda robota %25 güç vermek için 1600 değilde 0.25 yazmak istiyorum.

yani artık ben hiz fonksiyonuna 1 değerini gönderdiğimde bana 1900 diye çıktı verecek.

test sonucu

artık robota pwm_gonder(5,1900) yerine pwm_gonder(5,hiz(1)) şeklinde komut gönderebiliriz.

Manuel olarak komut gönderme kısmına gelirsek PWM kısmına benziyor fakat burada komutlar -1000 ve 1000 arasında değer alıyor.

PWM den farklı olarak 5 farklı değer aldığını fark etmişsinizdir. Bu değerler sırasıyla : x,y,z,r,button anlamına geliyor.

x,y,z,r,button anlamları

Buraya kadar iyi bir şekilde kavradıysanız gerisi biraz sizin yaratıcılığınıza kalıyor. Öğrendiklerimizi biraz daha pekiştirelim. Örneğin robota 10 saniye boyunca ileriye doğru hareket et diyelim.

Adım 4: Sensörlerden veri toplamak

Sensörlerden veri toplamak bence Ardusub’un en büyük eksikliği. Çünkü Pixhawk size sürekli veri vermiyor. Bu konuda biraz nazlı.

fonksiyonu ile Pixhawk’ın anlık olarak size ilettiği değerleri yakalayabilirsiniz. Pixhawk üzerinde birden fazla sensör bulunduğu için sorguyu her gönderdiğinizde farklı sensör değerleri gelebilir. Bunun için kontrol fonksiyonu yazmanızda fayda var. Yukarıdaki fonksiyonu çağırdıktan sonra normal bir json veya sözlük içerisinde sorgulama yapıyormuş gibi değerleri yakalayabilirsiniz.

Örneğin

Daha sonrasında kullanmak istediğiniz sensörün verilerini şu şekilde yakalayabilirsiniz:

Aklıma gelip anlatmak istediklerim bu kadardı. Umarım faydalı bir yazı olmuştur.

https://enisgetmez.com/ , https://turkol.com.tr/ https://instagram.com/enisgetmez/ , https://github.com/enisgetmez/

Tarih:Uncategorized

İlk Yorumu Siz Yapın

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir