İçindekiler:

Uzaktan USB Gamepad Üzerinden Sürdürülen 4WD Robot: 6 Adım
Uzaktan USB Gamepad Üzerinden Sürdürülen 4WD Robot: 6 Adım

Video: Uzaktan USB Gamepad Üzerinden Sürdürülen 4WD Robot: 6 Adım

Video: Uzaktan USB Gamepad Üzerinden Sürdürülen 4WD Robot: 6 Adım
Video: GAMEPAD OYUN KOLUNU BİLGİSAYARA BAĞLAMA 2024, Haziran
Anonim
Image
Image

Bir sonraki robotik projem için öngörülemeyen durumlardan dolayı kendi robot platformumun mimarı/tasarımı yapmak zorunda kaldım.

Amaç otonom olmasını sağlamak, ancak önce temel sürüş yeteneğini test etmem gerekiyordu, bu yüzden RC (radyo kontrollü) bir araç gibi davranmanın ve kontrol edilmenin eğlenceli bir yan proje olacağını düşündüm., ancak bunun yerine bir USB Gamepad kullanın.

Sonuçlar beklediğimden daha iyi veya daha iyi oldu.

Çok sayıda programlama ile USB Gamepad rotasına gitmenin avantajı, onu özelleştirebilmem ve daha önce yaptığım şeye ekleme yapabilmem. Bir RC aracı inşa etme konusunda gerçek bir deneyimim yok, ancak birinin RC vericisi (joysticks/düğmeler, vb.)

Örneğin, yazılımın yüksek akımları ve düşük enkoder hız değerlerini algılamasını sağlayarak robotun duvara çarptığını biraz fark ettim.

İsteğe bağlı olarak, kaç tane ve yerleşimlerine bağlı olarak robota bazı USB web kameraları eklenebilir, USB Gamepad'in bağlı olduğu bilgisayarın önünde başka bir yerde otururken robotu yaşam alanının etrafında ve başka bir odaya sürülebilir. o.

Bu Eğitilebilirlik, gerçek, ayrıntılı, her şey dahil, adım adım nasıl yapılır olmayacak, ancak elimden geldiğince ayrıntı vermeye çalışacağım.

Gereçler

Önerilen Parçalar: Bunların çoğunu Servo City'den (Actobotics) aldım.

2 - 13,5 U-kanallar, taban çerçevesinin yanları için. Motorlar bunun üzerine monte edilmiş. Daha kısa bir şeyle gittim ve motorlarım en köşelere monte edildi ve onları monte etmeyi zorlaştırdı.

Taban çerçevesinin önü ve arkası için 2 - 12 U-kanallar.

Ön ve arka tamponlar için 2 - 15 U-kanallar

2 - 7(ya da 7.5 miydi?) Ön kolonlar için U-kanalları. Bu çok kritik değil, uzunluklar değişebilir. Arka kolonların ne kadar uzun olduğuna ve açıyı hangi yüksekliğe yerleştirmeyi seçtiğinize bağlı Aralarında bağlanan U-kanal.

2 - (uzunluk?) Dik sütunları bağlayan, önden arkaya açılı eleman için U-kanallar. Bu çok önemlidir, çünkü Servo City / Actobotics bu amaç için 45 derecelik açılı paneller veya braketler satmaktadır, ancak doğru uzunlukları aldığınızdan emin olmak için biraz matematik / triger yapmanız gerekecektir.

2 - (uzunluk?) U-kanalları daha yüksek seviyede yan tampon görevi görecek, bunlar yine tabanla ne yaptığınıza bağlı

2 - (uzunluk?) U-kanalları, daha üst seviye ön ve arka tamponlar olarak hizmet edecek, aynen yukarıya doğru.

1 - (uzunluk?) En üstteki üye olarak hizmet edecek U-kanalı, arka sütunlar boyunca uzanır. Bu, çok kritik olmayabilir, çünkü dik sütunların üstüne veya önüne / arkasına monte edebilirsiniz.

12 (yaklaşık) L-kanalları veya parantezleri. Bunlar birden fazla amaca hizmet eder, ancak esas olarak taban çerçevesinin VE dik kolonların köşelerine yapısal bütünlük/dayanıklılık sağlar.

4 (+?) 3 delikli ila 5 delikli düz kanallar. Bunlar ayrıca robota yapısal güç sağlar.

ServoCity, iki ana tür geniş alanlı düz panel satar; bunlar, alt kaydırma tavası veya pilinizin ve/veya kontrolörlerinizin gideceği üst kısım veya hatta sensörler için daha yüksek yüzey olarak kullanmak için faydalıdır.

4(4.5?)" X 12" panel var ve sanırım diğeri 9(9.5?)" X 12 panel.

Şimdi işlerin ilginçleştiği yer burasıdır ve kafa karıştırıcı ve pahalı olabilir (küçük parçalar toplanır). BAZI olan bu bağlantı parçaları ile tüm kanallar vb. birbirine bağlanabilir. Kapsamlı, ayrıntılı, özel bir parça listem olmadığı için üzgünüm.

Ve sorun şu ki.. hangisine ihtiyacınız olduğunu veya kaç tanesine ihtiyacınız olduğunu gerçekten bilmiyorsunuz çünkü bu parçaları bir araya getirmenin pek çok yolu var.

Kullandıklarımı sıralayabilirim:

www.servocity.com/90-quad-hub-mount-c

www.servocity.com/side-tapped-pattern-moun…

www.servocity.com/90-quad-hub-mount-d

Aşağıdaki ikisi çok kullanışlıdır ve ben bunları stoklardım:

www.servocity.com/single-screw-plate

www.servocity.com/dual-screw-plate

Sonraki tüm vidalar (cıvatalar). HER boyutta bir paketle başladım ve çoğunu geçtim. Boyutun önemli olmadığı yerlerde daha uzun vidalar kullandım ve daha kısa olanları GEREKLİ olduğu yere ayırdım çünkü başka hiçbir uzunluk işe yaramayacaktı.

Son olarak, bunlardan 1 torba almalısınız:

www.servocity.com/6-32-nylock-nuts-pack

O kadar çok kullanmadım, ancak motorlarınızın zamanla çerçeveden gevşemediğinden emin olmak için (bence) kritik öneme sahipler. U-kanalı nedeniyle motor başına yalnızca iki kişi çalışır

Bunlardan en az 4 tanesine ihtiyacınız olacak, birine zarar vermeniz durumunda fazladan bir tane alabilirsiniz (inan bana, motorları birkaç kez takıp/çıkarıyor olabilirsiniz):

www.servocity.com/heavy-duty-clamping-shaf…

Tipik olarak, motor milleri 6 mm'dir ve akslar 1/4 (0.25 inç)'dir.

Sözde daha güçlü olan bazı siyah vidalar alırdım ve bunları yukarıdaki kelepçeler için kullanırdım ve kelepçelerle birlikte gelen vidaları KULLANMAYIN:

(Sanırım bunlar):

4 - 1/4" (0.25") çaplı rulmanlar

1 - siyah 1/4 ara parçası torbası

4 - Sıkıştırma D-Göbekleri

www.servocity.com/0-770-clamping-d-hubs

4 - D-Milleri (#6340621.375" (1-3/8")

4 - 6 ağır hizmet tipi tekerlekler

www.servocity.com/6-heavy-duty-wheel

Bu tekerlekleri sevdiğimi ama sert bir kauçuk kenarları olduğunu unutmayın. Sert zeminlerde, halılarda ve muhtemelen sert beton yürüyüşlerde başarılı görünüyorlar. Çim, kum vb. üzerinde iyi sonuç vermez.

AYRICA, halınızı lekeleme eğiliminde olacaklar !!!

4 - motorlar:

www.servocity.com/motors-actuators/gear-mo…

223 RPM ile gittim, iyi bir iç mekan hızı, ayrıca robotumu (2 SLA 12V pil ile ağır) ağır çekimde oldukça kolay hareket ettirebilirdi.

2 - motorlar için motor kodlayıcıları. (Servo City'nin Roboclaw'ı yalnızca 2 kodlayıcıyı yönetir)

1 - Roboclaw 2X45A motor kontrolörü, pinleri değil, üzerinde yeşil klemensleri olanını aldığınızdan emin olun…. iyi… her birinin avantajları var. Geri görüş.. Pimleri almış olabilirim.

Sanırım bu Servo City'den.

SparkFun, Arduino Uno'yu (kullandığım şey buydu) ve ayrıca Redboard Artemis'i sürücü yöneticiniz olarak satıyor.

Bir Raspberry Pi 3'ü (veya 4'ü) üst düzey "beyniniz" ve size arayüz olarak isteyeceksiniz.

Kablolara, anahtarlara, sigortalara ve çok sağlam bir "geri dönüş" diyotuna ihtiyacınız olacak.

Duracell 12V 14AH derin döngülü SLA pil kullandım, ancak istediğinizi kullanabilirsiniz.

UYARI! Bu robotun tasarımı (UZUN ve GENİŞ, ancak KISA), bir SLA pilinin sağlayacağı gibi bir tür ağır ağırlık merkezini varsayar. Diğer yeni teknoloji pil paketleri ile iyi sonuç vermeyebilir. LiPo, Lion vb. Kolayca devrilebilir.

Pololu'dan birkaç fiş adaptörü aldım, böylece Ahududu'ya USB üzerinden bağlanacak olsalar bile Arduino ve/veya Redboard'a bağımsız olarak güç verebildim, çünkü Raspberry'nin gücüne güvenmek zorunda kalmak istemedim.. (Özellikle montaj kameraları, sensörler vb.)

Ahududu için minimum 5A (?) Diğerleri, 7 ila 15V arasındaki her şeyi doğrudan SLA aküsüne bağlayabilir.

Parçalar için bu kadar.

Yapmayacağım şey - 90 derece eğimli dişli.

Yine, Robotics youtube oynatma listemde yukarıdakilerin çoğunu detaylandıran birçok video var.

Adım 1: İnşaat

Açıkçası tüm yapım aşamalarım zaten youtubes şeklinde. Bunları, "Wallace Robot 4"ten başlayarak Robotik çalma listemde görebilirsiniz. Öncekiler (Wallace II, Wallace III) de iyi malzemeye sahip

www.youtube.com/playlist?list=PLNKa8O7lX-w…

2. Adım: Roboclaw, Motorlar ve Kodlayıcıları Test Edin

Roboclaw'ın (BasicMicro) yapımcıları, motorları ve kodlayıcıları Roboclaw'a doğru şekilde bağladığınızdan emin olmak için kullanabileceğiniz bir Windows uygulamasına sahiptir. Roboclaw'a paralel olarak aynı taraftaki motorları bağlayacaksınız. Enkoder kablolarını yalnızca arka motorlarda veya ön motorlarda veya belki daha da iyisi -- DİYAGONAL olarak kullanmayı seçebilirsiniz.

Önerimin nedeni (daha sonra) sıkışmış bir robotu kontrol etmekle ilgili. Çapraz olarak ön/arka tekerleklerin dönüp dönmediğini görmek, sadece önden veya sadece arkadan daha iyi olabilir.

NOT: Yapmadığım şey, Arduino'yu (GPIO pinleri aracılığıyla) kodlayıcılara bağlanmak için kullanmaktır - bunu yaptıysanız, Roboclaw 2 kodlayıcıyı tutabilir ve ardından Arduino'nun diğer ikisini yönetmesini sağlayabilirsiniz ve sadece Roboclaw'ı iki kodlayıcı değeri (ve hızı) için sorgulayın.

NOT: Roboclaw'ı Hızlandırma / Hızlandırma için önceden yapılandırmak üzere BasicMicro'nun uygulamasını kullandım. Bu, donanımı ve elektroniği korumak için iyidir. Robotik oynatma listemde bununla ilgili bir video var.

Neredeyse unutuyordum: Motor kabloları ile Roboclaw arasında giden bazı kurşun bağlayıcı kablolar da aldım. NOT: Bunu yaparsanız, toplam kablo uzunluğunun GERÇEKTEN UZUN olduğunu fark edeceksiniz. Ama gerekmedikçe kesmek zorunda kalmak istemedim. Yaptım (daha sonraki adımlar için), muhtemelen EMI gürültüsünden dolayı Ahududu ve Arduino arasındaki USB ile iletişim sorunlarıyla karşılaştım..

Sorun çıkarsa, kabloları kısa kesebilirsiniz - ayrıca metal koruyucu da satın alabilirsiniz (Amazon'dan 1 çapında).

Son şey: Bunu henüz yapmadım --- hem sol hem de sağ taraftaki motorların aynı hızda hareket etmesi ve robotun düz gitmesi için Roboclaw otomatik yapılandırmasına veya otomatik ayarına (kodlayıcıları kullanarak) sahip olun.

Benimki yaklaşık 12 feet'in üzerinde çok hafifçe eğiliyor ama bu konuda bir şey yapma ihtiyacı hissetmem için yeterli değil.

Adım 3: Arduino'yu Ekleme ve Programlama

Namlu fişine ve bazı kablolara, ayrıca bir USB kablosuna ihtiyacınız olacak. Arduino konektörü için doğru olanı aldığınızdan emin olun.

Arduino IDE'yi indirmeniz gerekecek.

İşte Github'da robotu sürmeyi yöneten en son taslak:

github.com/elicorrales/wallace.robot.ardui…

Arduino'yu IDE çalıştıran bilgisayarınıza bağlayacaksınız ve çizimin nasıl yazıldığına bağlı olarak, Roboclaw ile seri iletişim (Yazılım Seri) için Arduino'daki 10 ve 11 numaralı pinleri kullanacaksınız.

Raspberry Pi ve Arduino arasında basit bir iletişim protokolü geliştirdim.

ASCII karakter tabanlıdır, bu da sadece Arduino IDE'nin "seri monitör" penceresini kullanarak hata ayıklamayı ve test etmeyi kolaylaştırır.

Komutlar "0" (sıfır) sayısından başlar ve gerektiği kadar artar

"20"lerde başlayan komutlar doğrudan Roboclaw komutlarıdır ve bu sayının altındakiler kesinlikle Arduino ile ilgili komutlardır.

EMI gürültüsü nedeniyle, bir sağlama toplamı içerecek şekilde komut dizesini geliştirdim.

Yani, herhangi bir dize şunları içerecektir:

Bu dahil olmak üzere dizideki # jeton sayısı

sağlama toplamı

Örnek olarak, Arduino'nun komut menüsüyle yanıt vermesini istediğinizi varsayalım:

4 0 12 16

"4", dizedeki dört simgedir.

"0" MENÜ komutudur.

"12" seçtiğim rastgele sayı.

"16", 4 + 0 + 12'nin toplamıdır.

Aynı MENU komutu farklı olabilir:

4 0 20 24

Farklı bir rastgele sayı seçtiğim için sağlama toplamı da farklı.

Örnek, %100 hızla ilerlemek istediğinizi varsayalım:

5 29 0 134 100

"5" beş jeton

"29" İLERİ komutu

"0" rastgele sayı

"134" sağlama toplamı

"100" parametre 1 (bu durumda hız)

Arduino gelen dizgiyi doğrulayamazsa, sadece düşürür/yok sayar, yanıt vermez.

Arduino X milisaniye ile bir sonraki hareket komutu almazsa, Roboclaw'a bir STOP motorları gönderir.

Arduino başlar ve bunu durdurması söylenmediği sürece USB bağlantı noktasına bir otomatik durum göndermeye başlar.

Bu noktada, sadece IDE üzerindeki "Seri Monitör"ü kullanarak Roboclaw'ı kontrol etmeye ve motorların dönüşünü izlemeye hazır olmalısınız.

Adım 4: Raspberry Pi (node.js) Ekleme ve Programlama

Yine, Robotics çalma listeme bir göz atarsanız, en başından bile, Raspberry'yi çalışır duruma getirmek için her adımı gözden geçirdim.

Gözden kaçmış olabileceğim tek şey, 5V'luk bir regülatöre ihtiyacınız olacak ve bir şekilde bunun için bir USB kablosu oluşturacak, kesecek/değiştirecek veya Ahududu'ya başka bir şekilde güç vereceksiniz.

İşte Github'da Arduino ile USB üzerinden iletişim kurmak için Raspberry'de ihtiyacınız olan her şey.

github.com/elicorrales/wallace.robot.raspb…

Test scriptleri bile var.

node.js sunucu koduna bir göz atabilir ve Raspberry'nin kısa sayısal talimatları nasıl REST tipi url dizelerine dönüştürdüğünü göreceksiniz. Test komutları göndermek için "curl" kullanabilirsiniz.

Örnek:

RP3 IP adresiniz:8084/arduino/api/forward/50

motorların anlık olarak tekerlekleri ileri doğru döndürmesine neden olur.

Bunu bir kabuk komut dosyası döngüsüne koyarsanız, tekerleklerin dönmeye devam ettiğini görürsünüz.

node.js kodu (server.js), Arduino'da seri iletişimlerin kaybolması durumunda yeniden bağlantı özelliği içerir. Arduino'yu Raspberry'den çıkarıp yeniden takarak bunu test edebilirsiniz.

İkisi arasındaki seri baud hızını eşleştirdiğinizden emin olun.

Arduino'nun hatalı veri paketleri bırakması ve node.js düzeyinde ve tarayıcı javascript düzeyinde, her şey birçok "drive" komutu göndermek için kodlandığından, 2 000 000 baud'a kadar çalışabildim (2 Mb/sn).

Test komut dosyalarını çalıştırırsanız ve çarkların döndüğünü görüyorsanız, bir sonraki adıma hazırsınız demektir.

Adım 5: Son Adım - Web Sayfası İstemcisini Programlama / Kullanma

Tüm bunların Ahududu kısmına Github bağlantısında istemci dosyaları bulunur.

dizin.html. index.js. p5.min.js.

USB Gamepad'i Gamepad API (tarayıcı tabanlı) aracılığıyla yönetirler ve web sayfasında da bulunan çeşitli düğmeleri ve kaydırıcıları görmelisiniz.

Javascript kodu, joysticklerden biri için X ve Y ekseni değerlerini sorgular (anketler). Çok hızlı bir şekilde yoklar ve tüm bu değerleri 8084'te dinleyen node.js sunucusuna gönderir.

Joysticklerin ham X ve Y ekseni değerleri 0 ile 1 arasındadır.

Ancak, motorları sürmek için Arduino'da kullanılan Roboclaw motor denetleyici kitaplığı işlevi, -100 ila 0 (geri) veya (0 ila 100) ileri arasında bir değer bekler.

Soo…. p5.min.js'yi dahil etmenin amacı budur. Sadece bu çok güzel, kullanışlı map() işlevine sahip olur, burada ona ham değeri verirsiniz, bu ham (geçerli) aralıktır ve yeni, istenen aralıktır. Ve ham değeri yeni, eşlenmiş aralıktaki değere dönüştürür.

Başka bir nokta: 100 hızda robot çok zor olabilir. Sürekli bir şeylerle karşılaşıyordum. Ancak bunda daha iyi olsanız bile, sola veya sağa dönerken hala hassastır.

Ekleyeceğiniz bir şey, web sayfasındaki mevcut Maksimum Hız kaydırıcısına benzer olacaktır. Bu kaydırıcı, Xs ve Ys joysticklerini eşleştireceğiniz en yüksek veya maksimum değerin ne olduğunu belirler.

Örnek:

0 -> 1 ile 0 -> 100 arasında eşleştiğinizi varsayalım. Joystick'e sonuna kadar bastığınızda 100'desiniz. Dokunaklı. Çok hızlı olabilir.

Ancak, bu Maksimum Hız kaydırıcısını biraz geriye kaydırırsanız, şimdi 0 -> 1 ila 0 -> 80 veya 70'i eşleştiriyorsunuz.

Bu, node.js'ye (ve Arduino'ya) gönderilen hızda bu kadar büyük bir değişiklik olmadan joystick'inizi hareket ettirmek için daha fazla boş alanınız olduğu anlamına gelir.

Ve yapabileceğiniz ek olarak, X'leri (sola veya sağa döndürme) Y'lerden (ileri veya geri) kendi maksimum kullanılabilir hızlarına ayırmaktır.

Böylece, hızlı doğrusal hareket için Ys'yi 0 ila 100, 0 ila -100'de bırakabilirsiniz, ancak daha kontrollü dönme hareketi için Xs maksimum hızını düşürebilirsiniz. Her iki dünyanın en iyisi.

Adım 6: İsteğe Bağlı: Fare Sürükleme ve / veya Dokunma Olayları ile Robotu Sür

Buraya kadar geldiyseniz, tarayıcıdan başlayıp Javascript üzerinden Raspberry node.js sunucusuna, son olarak arduinoya kadar uzanan yazılım katmanlarının Gamepad joystick X ve Y koordinatlarını " ileri" (veya "geri" vb.) komutları (ve hız değerleri).

Ayrıca, joysticklerin X'leri ve Y'leri eksi 1'den sıfıra ve artı 1'e iken, bunların sıfır ile 100 arasında dönüştürülmesi gerektiğini bilirsiniz. Maks, web sayfasındaki maksimum hız ayarına bağlıdır.

Soo… fareyi veya dokunma olaylarını (akıllı telefonda olduğu gibi) kullanmak için yapılacak tek şey, bu olayları yakalamak, X'leri ve Y'leri almaktır.

AMA ---- bu X'ler ve Y'ler, eksi 1 ile 1 arasında DEĞİLDİR. 0 ile başlarlar ve pozitif olarak artarlar, çünkü bunlar esasen bazı HTML öğelerinin (önyükleme paneli gibi) veya bir tuvalin pikselleri veya göreli ekran koordinatlarıdır.

Yine burada, P5'in Js kitaplığının "map()" işlevi, ihtiyacımız olanı yeniden eşleştirmek için çok kullanışlıdır.

Kodu iki farklı web sayfasına sahip olacak şekilde yeniden düzenledim, biri Gamepad kullanarak masaüstü için, diğeri dokunma olaylarını kullanarak mobil için.

Ayrıca, X'ler ve Y'ler yeniden eşlendiğinde, Gamepad'deki X'ler ve Y'ler gibi aynı kod zincirine vb. beslenirler.

Önerilen: