Basit Dört Bacaklı  Robot

Basit Dörtlü Bacaklı  Robot

Uzun süredir, yürüyüş robotlarından, özellikle Boston Dynamics’in harika yarattıklarından etkilenmiştim. Onların 26km / s vahşi kedisi manşetleri geçen yıl yaptı. Ama bunun gibi dörtlü robotlar, kendi başınıza yapamayacağınız şeyler. Çok fazla para ve programlama becerisi gerektirirler. Onlar gibi bir şey yapabilirmiyiz. Yoksa onlar mı?

İnternette bulabileceğiniz dört bacaklı robotun çoğu, bacakların robotun merkezine simetrik olduğu örümcek benzeri bir bacak yapılandırması kullanıyor. Her ne kadar bu daha kararlı ve programlanması daha kolay olsa da, memelilerden ilham alan bir robot yapmaya karar verdim. Çünkü bir meydan okuma istedim ve uygun bir tasarım için daha fazla alan bırakıyor.

Elektronik

Uzun bacaklı robotların en pahalı parçaları genellikle servo motorlardır. Çoğu profesyonel robot, Dynamixel veya Herkulex gibi “akıllı servolar” kullanır. Normal servolardan (tork, hız, kesinlik) daha iyi durumdalar, ancak normalde parça başına 60 $ ile 500 $ arasında bir ücret alıyorlar. Ve on iki taneye ihtiyacımız var. Robotum için bunun yerine Hobbyking servolarını kullanmaya karar verdim, ki bu gülünç ucuz:

http://www.hobbyking.com/hobbyking/store/__16269__hk15138_standard_analog_servo_38g_4_3kg_0_17s.html

Toplamda 40 dolar ödedim. Fiyat rağmen, kalitesi oldukça iyi. Robotların ağırlıklarını kaldırmada fazla sorun yaşamazlar.

Servo kontrolör olarak ilk başta bir Pololu Maestro kullanmak istedim, ancak bununla ilgili bazı problemlerim vardı. Kullandığım güç kaynağını kabul etmedi, bu da servo titremesine ve kontrol edilemeyen bir harekete neden oldu. Şimdi bir Arduino MEGA kullanıyorum, on iki servoyu kendi başına kontrol etmek için yeterli pime sahip.

Servolar için batarya olarak şu anda 6.6V 3000mAh 20C LiFePo4 alıcı paketi kullanıyorum:
http://www.hobbyking.com/hobbyking/store/__23826__Turnigy_nano_tech_3000mAh_2S1P_20_40C_LiFePo4_Hector_fml .
Arduino, bir Dizüstü Bilgisayar tarafından USB üzerinden veya 5V 1A güç bankası tarafından kontrol edilmeden yapılan testler için çalıştırılır.

Robotlar şu an için özerk olmayacağından, bir çeşit uzaktan kumandaya ihtiyacı var. Bir Android uygulaması yazmaya ve Arduino’ya bir Bluetooth modülü takmaya karar verdim.

Daha sonraki bir güncellemede, robotların kafasına küçük bir servo kullanılarak döndürülebilen bir ultrasonik mesafe sensörü ekledim. Bu şekilde, robot çevreyi tarayabilir ve bir duvara çarpıp çarpmayacağını tespit edebilir.

Mekanik tasarım Nasıl Olmalı

Servoları ve elektronikleri bağlamak için bir çeşit şasi gerekir. İlk başta üç boyutlu baskı yapmayı düşündüm, ancak bütçemi bozacaktım çünkü kendi yazıcım yok ve tüm parçaları sipariş etmek zorunda kalacağım. Bu 2D benzeri bir tasarıma ihtiyacım olduğu anlamına geliyordu. Malzeme olarak ahşap yeterince profesyonel görünmüyor ve alüminyum çok ağır, bu yüzden akrilik cam kullandım.

Dört akrilik plaka (5mm) robotun gövdesini oluşturur. Alüminyum borularla kaplanmış dişli çubuklar üzerindeki somunlarla bağlanırlar. İç plakalar yuvarlanır ve düşerken robotu korumak için yanlarda köpük bulunur. Dış plakalar, bir somun, bir dişli çubuk parçası ve küçük bir bilyeli yataktan yapılan karşı yatakları tutar. Başka bir yatay plaka, hem Arduino hem de batarya için bir montaj görevi görür. Üst ve alt bacaklar, eklemler için bilyeli rulmanlar kullanarak akrilik parçalarla birleştirilir. Alt bacaklarda doğaçlama yapmak zorunda kaldım: Bunlar ucuz kamera tripod ayaklarından yapılmış, kablo bağlarıyla sabitlenmiş. Kauçuk uçlar iyi bir kavrama sağlar.

El yapımı prototip:

Formulor’dan lazerle kesilmiş parçalar:

Bitmiş robot:

Ölçek için kedi:

Her robotun bir kafaya ihtiyacı vardır, ben de bunu daha sonra ekledim. Ultrasonik sensör robotların gözleri gibi hizmet eder.

İlk taslaklardan son tasarıma kadar her şey Sketchup’ta yapıldı. İlk başta saatlerce süren bir el testeresi kullanarak bazı prototip parçalar yaptım. Daha sonra parçaları çevrimiçi olarak sipariş etmeye karar verdim ve ucuz lazer kesim parçaları ve hızlı sevkiyat sunan Formulor ile karşılaştım. Kesinlik etkileyici, Sketchup’ın neden olduğu sinirli eğriler bile görülebilir. Bir şekilde 5mm akrilik camın dengesini hafife aldım, ağırlıktan tasarruf etmek için 3mm yeterli olmalı.

Motorsuz robot hemen devrilecek, bu yüzden üç ayaklı bir tabure kullanarak basit bir stand yaptım. Robotun önündeki ve arkasındaki iki tel, üstündeki plastik bir çubuğa tutturulabilir.

Robotu kendiniz yapmak istiyorsanız, mekanik parçalar için şablonlar hazırlıyorum:
https://www.dropbox.com/s/qaavo54booxvpmb/Quadruped%20templates.zip?dl=0

Arduino Kroki

Arduino taslağı çoklu dosyalara (sekmeler) ayrılır: Main, IK, Gait, Serial ve Servo.

Ana dosya diğer fonksiyonları çağırır ve değişkenlerin çoğunu başlatır.

Robotların ayaklarını hareket ettirmek için her bacak için ters kinematik hesaplamanız gerekir. Temel olarak koordinatları girdiğiniz ve sonuç olarak servo açılarını aldığınız bir denklemdir. Basit okul matematiğini kullanabilir veya internette çözümler arayabilirsiniz. Arduino’ya yanıp sönmeden önce Excel’deki hesaplamayı denemek çok zaman kazandırabilir. Bu uygulandıktan sonra, robot vücudunu tam olarak XYZ koordinatları boyunca hareket ettirebilir. Robotu döndürmek için bir dönme matrisine ihtiyacınız var. Bu, bir koordinat girdiğiniz ve roll, pitch ve yaw için değerleri girdiğiniz ve çıktı olarak döndürülmüş koordinatı aldığınız bir başka denklem sistemidir. Bu blog yazısını Oscar Liang tarafından çok faydalı buldum: http://blog.oscarliang.net/inverse-kinematics-implementation-hexapod-robots/ .
Her iki hesaplama için de bir Excel sayfası hazırladım:

İndirme:  https://www.dropbox.com/s/3jizpou1645so1g/fb%20rotation%20matrix%20v3.xlsx?dl=0

Seri sekmesi, Bluetooth modülünden ve ultrasonik sensörden gelen verileri yönetir. Bu, Arduino IDE’nin seri monitöründe karakter alma ile aynı şekilde çalışır.

Servolar doğrudan servo kütüphanesi kullanılarak kontrol edilir.

Programın tamamı şu şekilde çalışıyor: İlk önce Bluetooth işlevi yeni girdi aramak için çağrılıyor. Ardından sağ yürüyüş fonksiyonu seçilir. Her bacak için koordinatları hesaplar. Bundan sonra rotasyon ve çeviri hesaplanır. Doğru servo açılarını elde etmek için koordinatların “tam vücut” dan “tek bacak” ya dönüştürülmesi gerekir, daha sonra ters kinematik işlevi sihrini çalıştırabilir. Son olarak, servolar hesaplanan açıya taşınır.

Yürüme Yürüyüşü

Yürüyüşler muhtemelen bacaklı robotlarla ilgili en karmaşık şey. Çabuk sonuç almak istediğim için sinüs fonksiyonlarına dayanan basit bir yürüyüş yaptım. Diyagramda görebileceğiniz gibi her bacak – | sin (x) | gibi bir işlev kullanarak (kırmızı) birbiri ardına kaldırılır. Bir bacak havada olduğunda, robot yere düşme eğiliminde olacaktır. Bunun için ikinci bir işlev (mavi) gövdeyi kaldırılmış bacaktan uzağa hareket ettirir. Bu yürüyüşün avantajı, sıvı hareketleriniz olmasıdır. Ancak robot sadece bir yönde hareket edebilir.

Daha sonra bir koşu bandı programlamaya çalıştım, ancak hızlı bacak hareketi servolar ve çerçeve için çok fazla.

İşlem Simülatörü

Yürüyüşleri bulmak sıkıcı bir iştir. Koddaki en küçük değişiklik bile, Arduino’yu yakmanızı, pili tekrar takmanızı ve robotu standından kaldırmanızı gerektirir. Bir hata yaparsanız, robot düşecek veya servolar yanlış yöne hareket edecek ve sonunda kendilerini veya diğer mekanik parçaları tahrip edecektir. Bu birkaç kez başıma geldikten sonra daha kolay bir test yöntemi aramaya başladım. Bazı robot simülatörleri var (örneğin Gazebo, v-rep) ama onları çok karmaşık buldum, robotun geometrisini tek başına almak beni sonsuza dek götürdü.

Kendi simülatörümü yazdım. İşleme bunun için mükemmel bir seçimdir. Grafiksel kullanıcı arayüzleri için kütüphaneleri vardır ve farklı cad dosyalarını içe aktarabilir ve oluşturabilir. En iyi şey, pratik olarak Arduino kodunu İşlemeye sürükleyip bırakmanızdır (Bunun nedeni Arduino kodunun aslında İşlemeye dayalı olmasıdır). Birkaç küçük fark vardır, örneğin diziler farklı şekilde başlatılır. Ancak bundan kaçınabilirseniz, robotun tam davranışını taklit edebilir ve çalışma kodunu tekrar Arduino’ya kopyalayabilirsiniz.

İşleme taslağının derlenmesi sadece 5 saniye sürer.

Son simülatör versiyonu robotu renkli gösterebilir, düğmeler ve sürgüleri olan bir kullanıcı arayüzüne sahiptir, manuel servo kontrolü için farklı modlar vardır ve robotu farklı bir eksen etrafında hareket ettirmek için bile (bu şekilde IK kodumda bir hata buldum).

Android uygulaması

Arduino’daki değişkenleri yanıp sönmeden değiştirmek için hızlı bir yola ihtiyacım vardı. Bu nedenle bir Bluetooth modülü satın aldım ancak doğru Android uygulamasını bulamadım. Bu yüzden Android için İşleme kullanarak kendi uygulamamı yazmam gerekti. Bu temelde geçen yıl hakkında bir makale yayınladım aynı uygulama oldu: http://coretechrobotics.blogspot.com/2013/12/controlling-arduino-with-android-device.html

Tek fark ultrasonik sensör değerlerini görüntülemek için ek bir sonardır.

Sonuç

Düşük bütçeyle ilgili olarak robottan şimdiye kadar oldukça mutluyum. Kararlılık ve servo güç kabul edilebilir. Zaten daha gelişmiş yürüyüşler üzerinde çalışıyorum, ama simülatör ile bile bu zaman alıcı bir süreç.

Posted in Genel.