Cuprins:

Un robot 4WD condus prin telecomandă USB Gamepad: 6 pași
Un robot 4WD condus prin telecomandă USB Gamepad: 6 pași

Video: Un robot 4WD condus prin telecomandă USB Gamepad: 6 pași

Video: Un robot 4WD condus prin telecomandă USB Gamepad: 6 pași
Video: PS2 remote-controlled 4WD Omni Robot 2024, Iunie
Anonim
Image
Image

Pentru următorul meu proiect de robotică, am fost forțat să arhitectez / să proiectez propria platformă de robot din cauza unor circumstanțe neprevăzute.

Scopul este să fie autonom, dar mai întâi, trebuia să-i testez abilitățile de conducere de bază, așa că m-am gândit că ar fi un proiect secundar distractiv să te comporti și să fii controlat ca și cum ar fi un vehicul RC (controlat radio), dar folosiți în schimb un Gamepad USB.

Rezultatele au fost la fel de bune sau mai bune decât mă așteptam.

Avantajul de a parcurge ruta USB Gamepad, cu o mulțime de programare, este că îl pot personaliza și adăuga la ceea ce am făcut deja. Nu am nicio experiență reală în construirea unui vehicul RC, dar îmi imaginez că unul este destul de blocat de orice vine transmitatorul RC (joystick-uri / butoane, etc.) și receptorul RC.

De exemplu, am adăugat o oarecare recunoaștere a faptului că robotul a lovit un perete, doar prin faptul că software-ul detectează curenți mari și valori de viteză reduse ale codificatorului.

Opțional, se pot adăuga niște camere web USB la robot, în funcție de câte și de amplasarea lor, se poate conduce robotul prin zona de living și într-o altă cameră, în timp ce stai în altă parte în fața computerului care are conectat Gamepad-ul USB aceasta.

Acest instructabil nu va fi un adevărat, detaliat, all-inclusive, pas cu pas, dar voi încerca să ofer cât mai multe detalii posibil.

Provizii

Părți sugerate: Cele mai multe dintre acestea le-am obținut de la Servo City (Actobotics).

2 - Canale U de 13,5 , pentru părțile laterale ale cadrului de bază. Motoarele sunt montate pe acesta. Am mers cu ceva mai scurt, iar motoarele mele sunt montate chiar la colțuri și a făcut dificilă montarea lor.

2 - 12 canale U pentru partea din față și din spate a cadrului de bază.

2 - 15 canale U pentru bare de protecție, față și spate

2 - 7 (sau a fost 7,5 ?) Canalele U pentru coloanele din față. Acest lucru nu este prea critic, lungimile pot varia. Depinde cât de înalte sunt coloanele din spate și la ce înălțime alegeți să puneți unghiurile Canal U care se conectează între ele.

2 - (lungime?) Canale U pentru elementul înclinat, față-spate, conectând coloanele verticale. Acesta este esențial, deoarece Servo City / Actobotics vinde panouri sau paranteze unghiulare de 45 de grade în acest scop, dar va trebui să faceți câteva calcule / triguri pentru a vă asigura că obțineți lungimile corecte.

2 - (lungime?) Canale U pentru a servi ca bare de protecție laterale de nivel superior, iar acestea depind de ceea ce faceți cu baza

2 - (lungime?) Canale U pentru a servi ca bare de protecție față și spate la nivel superior, identic cu problema de mai sus.

1 - (lungime?) Canal U pentru a servi ca element de sus, se întinde pe coloanele din spate. Acesta poate să nu fie prea critic, deoarece puteți monta deasupra sau în fața / în spatele coloanelor verticale.

12 (aprox) canale L sau paranteze. Acestea servesc scopuri multiple, dar oferă în esență integritate / rezistență structurală colțurilor cadrului de bază ȘI coloanelor verticale.

4 (+?) Canale plate cu 3 găuri până la 5 găuri. Acestea oferă, de asemenea, rezistență structurală robotului.

ServoCity vinde două tipuri principale de panouri plate cu suprafață mare, utile pentru a fi folosite ca skid-pan inferior, sau în partea superioară unde ar merge bateria și controlerele, sau chiar pentru suprafețe mai mari pentru senzori.

Există un panou de 4 (4,5?) "X 12" și cred că celălalt este un panou de 9 (9,5?) "X 12.

Acum, aici lucrurile devin interesante și pot fi confuze și scumpe (se adaugă părți mici). Toate canalele, etc, pot fi atașate unele la altele prin intermediul acestor piese de conectare, dintre care există MAI MULTE. Aici îmi pare rău că nu am o listă completă, detaliată și specifică de piese.

Și chestia este că … nu știi cu adevărat de care s-ar putea să ai nevoie sau de câte … pentru că există atât de multe moduri în care poți încadra aceste piese împreună.

Pot enumera ce am folosit:

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

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

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

Următoarele două sunt foarte la îndemână și aș vrea să fac provizii pentru acestea:

www.servocity.com/single-screw-plate

www.servocity.com/dual-screw-plate

Urmează toate șuruburile (șuruburile). Am început cu un pachet de FIECARE mărime și am trecut prin majoritatea lor. Am folosit șuruburi mai lungi, în cazul în care dimensiunea nu conta, și le-am rezervat pe cele mai scurte pentru locul în care erau OBLIGATE, deoarece nicio altă lungime nu ar funcționa.

În cele din urmă, ar trebui să primiți o pungă dintre acestea:

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

Nu am folosit atât de multe, dar ele (cred) sunt esențiale pentru a vă asigura că motoarele dvs. nu vibrează slab de pe cadru în timp. Doar două ar funcționa pe motor, datorită canalului U

Veți avea nevoie de cel puțin 4 dintre acestea, s-ar putea să obțineți unul în plus în cazul în care provocați daune unuia (credeți-mă, s-ar putea să puneți / să scoateți motoarele de câteva ori):

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

De obicei, arborii motoarelor sunt de 6 mm, iar axele sunt de 1/4 (0,25 in).

Aș obține niște șuruburi negre, presupuse mai puternice, și le-aș folosi pentru clemele de mai sus și NU aș folosi șuruburile care vin cu clemele:

(Cred că acestea sunt cele):

Rulmenți cu diametrul de 4 - 1/4 "(0,25")

1 - sac de distanțieri negri de 1/4"

4 - Fixarea D-Hub-urilor

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

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

Roți de 4 - 6 grele

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

Rețineți că îmi plac aceste roți, dar au o margine de cauciuc tare. Se pare că se descurcă bine pe podelele dure, pe covor și, probabil, pe plimbările dure din beton. Nu se va descurca bine pe iarbă, nisip etc.

ȘI ei vor avea tendința de a-ți păta covorul !!!

4 - motoare:

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

Am mers cu 223 RPM, viteză maximă interioară bună, de asemenea, mi-am putut mișca robotul (greu cu 2 baterii SLA 12V) destul de ușor în mișcare lentă.

2 - codificatoare de motoare pentru motoare. (Roboclaw din Servo City gestionează doar 2 codificatoare)

1 - Controler motor Roboclaw 2X45A, asigurați-vă că îl obțineți pe cel cu blocurile de borne verzi pe el, nu pinii …. welll … fiecare are avantajele sale. Retrospectiv.. S-ar putea să fi luat pinii.

Cred că asta e de la Servo City.

SparkFun vinde Arduino Uno (asta am folosit eu) și, de asemenea, Redboard Artemis ca manager de unitate.

Veți dori un Raspberry Pi 3 (sau 4?) Ca „creier” de nivel înalt și interfață cu dvs.

Veți avea nevoie de cabluri, întrerupătoare, siguranțe și o diodă „flyback” foarte robustă.

Am folosit o baterie SLA cu ciclu profund Duracell 12V 14AH, dar puteți folosi orice.

AVERTIZARE! Proiectarea acestui robot (TALL și WIDE, dar SHORT) presupune un fel de centru de greutate greu, cum ar fi o baterie SLA. Este posibil să nu funcționeze bine cu celelalte tipuri de baterii cu tehnologie mai nouă. LiPo, Lion etc. Se poate răsturna cu ușurință.

De la Pololu am primit câteva adaptoare cu mufă, astfel încât să pot alimenta independent Arduino și / sau Redboard, chiar dacă acestea ar fi conectate la Raspberry prin USB, pentru că nu am vrut să mă bazez pe puterea Raspberry. (Mai ales montarea camerelor, senzorilor etc.)

Veți avea nevoie de un regulator de tensiune de 12 până la 5V, minim 5A (?) Pentru Raspberry. Ceilalți pot gestiona orice între 7 și 15V atât de direct la bateria SLA.

Cam atât despre piese.

Ce NU aș face - angrenaje teșite la 90 de grade.

Din nou, există multe videoclipuri în lista mea de redare YouTube de robotică care detaliază cele mai multe dintre cele de mai sus.

Pasul 1: Construcție

Sincer, toți pașii mei de construcție sunt deja sub formă de youtuburi. Puteți să le vedeți în lista mea de redare Robotics, începând cu „Wallace Robot 4”. Precedentele (Wallace II, Wallace III) au și ele materiale bune

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

Pasul 2: Testați Roboclaw, motoare și codificatoare

Producătorii de Roboclaw (BasicMicro) au o aplicație Windows pe care o puteți utiliza pentru a vă asigura că ați conectat corect motoarele și codificatoarele la Roboclaw. Veți conecta motoare de aceeași parte în paralel cu Roboclaw. Puteți alege să utilizați firele codificatorului, doar pe motoarele din spate sau pe cele din față sau poate chiar mai bine - DIAGONAL.

Motivul sugestiei mele are legătură cu (ulterior) verificarea unui robot blocat. A avea o stare diagonală în cazul în care roțile din față / spate nu se învârt ar putea fi mai bine decât doar în față sau doar în spate.

NOTĂ: ceea ce NU am făcut este să folosesc Arduino pentru a vă conecta, de asemenea (prin pini GPIO) la codificatoare - dacă ați face acest lucru, ați putea avea Roboclaw să manevreze 2 codificatoare, apoi să aveți Arduino să se ocupe de celelalte două, și doar interogați Roboclaw pentru cele două valori (și viteze) ale codificatorului.

NOTĂ: Am folosit aplicația BasicMicro pentru a pre-configura Roboclaw pentru Ramping Up / Ramping Down. Acest lucru este bun pentru protejarea hardware-ului și a componentelor electronice. Există un videoclip despre asta în lista mea de redare Robotics.

Aproape că am uitat: am cumpărat și câteva cabluri cu conector glonț care merg între cablurile motorului și Roboclaw. NOTĂ: dacă faceți acest lucru, veți observa că lungimea totală a cablului este REALMENT LUNGĂ. Dar nu am vrut să trebuiască să tai niciunul dacă nu am nevoie. Am întâlnit (pentru pașii ulteriori) probleme de comunicare cu USB între Raspberry și Arduino, probabil din cauza zgomotului EMI.. dar am lucrat în acest sens cu software-ul.

Dacă devine o problemă, puteți tăia scurt firele - puteți cumpăra, de asemenea, ecranare metalică (de la Amazon, 1 diametru).

Ultimul lucru: acest lucru încă nu l-am făcut --- să configurați automat sau să reglați automat Roboclaw (folosind codificatoare), astfel încât ambele motoare laterale stânga și dreapta să se miște la aceeași viteză și robotul să meargă drept.

Al meu se curbează foarte puțin peste aproximativ 12 picioare, dar nu suficient încât am simțit nevoia să fac ceva în legătură cu asta.

Pasul 3: Adăugarea și programarea Arduino

Veți avea nevoie de ștecherul și câteva cabluri, de asemenea un cablu USB. Asigurați-vă că obțineți cel corect pentru conectorul Arduino.

Va trebui să descărcați ID-ul Arduino.

Iată la Github cea mai recentă schiță care se ocupă de conducerea robotului:

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

Veți conecta Arduino la computerul dvs. care rulează IDE și, pe baza modului în care este scrisă schița, veți folosi pinii 10 și 11 de pe Arduino pentru comunicații seriale (Software Serial) cu Roboclaw.

Am dezvoltat un protocol simplu de comunicații între Raspberry Pi și Arduino.

Este bazat pe caractere ASCII, ceea ce face mai ușoară depanarea și testarea doar folosind fereastra „monitorului serial” Arduino IDE.

Comenzile încep de la numărul „0” (zero) și se ridică în funcție de necesități

Comenzile care încep în „20” sunt comenzi directe Roboclaw, iar cele de sub acel număr sunt strict comenzi legate de Arduino.

Datorită zgomotului EMI, am îmbunătățit șirul de comandă pentru a include o sumă de control.

Deci, orice șir va include:

# număr de jetoane în șir, inclusiv acesta

suma de control

De exemplu, spuneți că doriți ca Arduino să răspundă cu meniul său de comenzi:

4 0 12 16

„4” este patru jetoane în șir.

„0” este comanda MENU.

„12” este numărul aleatoriu pe care l-am ales.

„16” este suma de 4 + 0 + 12.

Aceeași comandă MENU ar putea fi diferită:

4 0 20 24

Deoarece am ales un număr aleatoriu diferit, suma de control este, de asemenea, diferită.

De exemplu, spuneți că doriți să mergeți înainte cu o viteză de 100%:

5 29 0 134 100

„5” cinci jetoane

„29” comanda FORWARD

„0” numărul aleatoriu

„134” suma de control

"100" parametrul 1 (viteza în acest caz)

Dacă Arduino nu poate verifica acel șir de intrare, îl scapă / îl ignoră, fără răspuns.

Dacă Arduino nu primește o comandă de mișcare următoare cu X milisecunde, trimite un motor STOP către Roboclaw.

Arduino pornește și începe să trimită o stare automată la portul USB … dacă nu i se spune să nu mai faci asta.

În acest moment ar trebui să fiți gata să încercați să controlați Roboclaw și să urmăriți cum motoarele se întorc, doar folosind „Serial Monitor” de pe IDE.

Pasul 4: Adăugarea și programarea Raspberry Pi (node.js)

Din nou, dacă aruncați o privire la lista mea de redare Robotics, chiar de la început, am parcurs fiecare pas pentru a pune Raspberry în funcțiune.

Singurul lucru pe care l-aș fi putut trece peste cap este că veți avea nevoie de un regulator de 5V și, fie cumva construiți, tăiați / modificați un cablu USB pentru acesta, sau alimentați Raspberry într-un alt mod.

Aici la Github este tot ce aveți nevoie în Raspberry pentru a comunica cu Arduino prin USB.

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

Există chiar și scripturi de testare.

Puteți arunca o privire la codul serverului node.js și veți vedea cum Raspberry convertește instrucțiunile numerice concise, în șiruri de adrese URL de tip REST. Puteți utiliza „curl” pentru a trimite comenzi de testare.

Exemplu:

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

va face ca motoarele să rotească momentan roțile înainte.

Dacă puneți asta într-o buclă de script shell, veți vedea roțile continuu să se rotească.

Codul node.js (server.js) include o caracteristică de reconectare în cazul în care comunicările seriale se pierd în Arduino. Puteți testa acest lucru deconectând Arduino de la Raspberry și reconectându-l.

Asigurați-vă că potriviți viteza de transmisie în serie dintre cele două.

Datorită faptului că Arduino a renunțat la pachete de date greșite și pentru că la nivelul node.js și la nivelul javascript al browserului, totul este codat pentru a trimite multe comenzi „drive”, am putut rula până la 2 000 000 baud (2 Mbps).

Dacă obțineți scripturile de testare pentru a rula și vedeți roțile care se rotesc, atunci sunteți gata pentru pasul următor.

Pasul 5: Pasul final - Programarea / utilizarea clientului paginii web

Fișierele client sunt incluse în linkul Github către porțiunea Raspberry din toate acestea.

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

Se ocupă de USB Gamepad prin API Gamepad (bazat pe browser) și ar trebui să vedeți diferitele butoane și glisante disponibile și pe pagina web.

Codul javascript interogă (sondaje) valorile axelor X și Y pentru unul dintre joystick-uri.. (în funcție de joystick-uri / gamepad pe care le aveți, poate fi necesar să modificați codul). Interogă foarte rapid și declanșează toate aceste valori către serverul node.js ascultând la 8084.

Valorile brute ale axelor X și Y ale joystick-urilor sunt între 0 și 1.

Dar funcția de bibliotecă a controlerului de motor Roboclaw, utilizată în Arduino pentru a conduce motoarele, așteaptă o valoare între -100 la 0 (înapoi) sau (0 la 100) înainte.

Soo … acesta este scopul includerii p5.min.js. Se întâmplă să ai această funcție map () foarte frumoasă, convenabilă, în care îi dai valoarea brută, este gama brută (curentă) și noua gamă dorită. Și convertește valoarea brută în valoarea la noul interval mapat.

Un alt punct: la 100 de viteze, robotul poate fi foarte complicat. Mă loveam constant de ceva. Dar chiar și pe măsură ce vă îmbunătățiți acest lucru, este încă sensibil când rotiți la stânga sau la dreapta.

Ceva pe care îl puteți adăuga ar fi similar cu glisorul curent Max Speed de pe pagina web. Acest glisor determină care este cea mai mare sau cea mai mare valoare la care veți fi mapate joystick-urile Xs și Ys.

Exemplu:

Spuneți că mapați 0 -> 1 la 0 -> 100. Când apăsați joystick-ul, sunteți la 100. Touchy. Ar putea fi prea rapid.

Dar, dacă glisați un pic glisorul Max Speed înapoi, acum creați 0 -> 1 la 0 -> 80 sau 70.

Asta înseamnă că aveți mai multă libertate pentru a vă deplasa joystick-ul fără ca o schimbare atât de mare a vitezei să fie trimisă la node.js (și la Arduino).

Și adăugarea pe care o puteți face este să separați X-urile (rotiți la stânga sau la dreapta) de Y-urile (înainte sau înapoi) în propriile viteze maxime disponibile.

Astfel, puteți lăsa Ys de la 0 la 100, de la 0 la -100 pentru o mișcare liniară rapidă, dar reduceți viteza maximă Xs pentru o mișcare de rotație mai controlată. Cel mai bun din ambele lumi.

Pasul 6: opțional: conduceți robotul cu glisare mouse și / sau evenimente tactile

Dacă ați ajuns până aici, știți că straturile software începând de la browser și trecând prin Javascript și pe serverul Raspberry node.js, în cele din urmă în arduino, convertesc joystick-ul Gamepad X-și coordonatele Y în „ comenzi înainte (sau „înapoi” etc.) (și valoarea vitezei lor).

Mai mult, știți atunci că, deși X-urile și joystick-urile sunt negative de la 1 la zero, la plus 1, acestea trebuie convertite între zero și 100. Ei bine, maxima depinde de setarea vitezei maxime pe pagina web.

Soo … singurul lucru de făcut pentru a utiliza fie mouse-ul, fie atingerea evenimentelor (ca pe un smartphone), este să surprindeți acele evenimente, să luați X-urile și Y-urile.

DAR ---- acele X-uri și Y-urile NU sunt între 1 și 1 negative. Încep 0 și cresc pozitiv, deoarece sunt în esență pixelii sau coordonatele relative ale ecranului unui element HTML (cum ar fi un panou bootstrap) sau o pânză.

Așadar, din nou, funcția „map ()” a bibliotecii Js a lui P5 este foarte utilă pentru re-maparea a ceea ce avem nevoie.

Am refactorizat codul pentru a avea două pagini web diferite, una pentru desktop folosind Gamepad, alta pentru mobil, folosind evenimentele tactile.

De asemenea, odată ce X-urile și Y-urile sunt re-mapate, acestea sunt introduse în același lanț de cod etc., la fel ca X-urile și Y-urile de pe Gamepad.

Recomandat: