Indholdsfortegnelse:

En 4WD -robot drevet via fjernbetjent USB -gamepad: 6 trin
En 4WD -robot drevet via fjernbetjent USB -gamepad: 6 trin

Video: En 4WD -robot drevet via fjernbetjent USB -gamepad: 6 trin

Video: En 4WD -robot drevet via fjernbetjent USB -gamepad: 6 trin
Video: Jeep Got really lucky 😮 |#youtubeshorts #shorts 2024, Juni
Anonim
Image
Image

Til mit næste robotikprojekt blev jeg tvunget til at arkitekt/designe min egen robotplatform på grund af uforudsete omstændigheder.

Målet er, at det skal være autonomt, men først var jeg nødt til at teste dets grundlæggende køreevne, så jeg tænkte, at det ville være et sjovt sideprojekt at have opført sig og blive kontrolleret, som om det var et RC (radiostyret) køretøj, men brug i stedet en USB -gamepad.

Resultaterne har været omtrent lige så gode eller bedre, end jeg havde forventet.

Fordelen ved at gå USB Gamepad -ruten med masser af programmering er, at jeg kan tilpasse den og tilføje til det, jeg allerede har gjort. Jeg har ikke nogen egentlig erfaring med at bygge et RC -køretøj, men jeg forestiller mig, at man stort set sidder fast med uanset hvilken RC -sender (joysticks/knapper osv.) Og RC -modtageren følger med.

For eksempel har jeg tilføjet en vis erkendelse af, at robotten har ramt en væg, bare ved at få softwaren til at registrere høje strømme og lave encoderhastighedsværdier.

Eventuelt kan man tilføje nogle USB -webkameraer til robotten, afhængigt af hvor mange og deres placering, man kan køre robotten rundt i opholdsområdet og ind i et andet rum, mens man sidder et andet sted foran computeren, der har USB -gamepad tilsluttet det.

Denne instruks vil ikke være en sand, detaljeret, altomfattende, trin-for-trin vejledning, men jeg vil forsøge at give så mange detaljer som jeg kan.

Forbrugsvarer

Foreslåede dele: Det meste af dette fik jeg fra Servo City (Actobotics).

2 - 13,5 U -kanaler, til siderne af bundrammen. Motorerne er monteret på dette. Jeg gik med noget kortere, og mine motorer er monteret i selve hjørnerne, og det gjorde det svært at montere dem.

2 - 12 U -kanaler til forsiden og bagsiden af bundrammen.

2 - 15 U -kanaler til kofangerne, for og bag

2 - 7 (eller var det 7,5 ?) U -kanaler til de forreste søjler. Dette er ikke for kritisk, længderne kan variere. Det afhænger af, hvor høje de bageste søjler er, og i hvilken højde du vælger at placere de vinklede U-kanal, der forbinder dem imellem.

2-(længde?) U-kanaler til det vinklede element, for-til-bag, der forbinder de opretstående søjler. Denne er kritisk, fordi Servo City / Actobotics sælger 45 graders vinklede paneler eller beslag til dette formål, men du skal lave noget matematik / trig for at sikre, at du får de korrekte længder.

2-(længde?) U-kanaler til at tjene som højere niveau kofangere, igen afhænger disse af, hvad du gør med basen

2-(længde?) U-kanaler til at tjene som højere niveau for- og bagkofangere, ditto problem til ovenfor.

1 - (længde?) U -kanal, der fungerer som det øverste medlem, spænder over de bageste søjler. Denne er måske ikke for kritisk, da du kan montere ovenpå eller foran / bag de opretstående søjler.

12 (ca.) L-kanaler eller beslag. Disse tjener flere formål, men giver i det væsentlige strukturel integritet/styrke til hjørnerne af bundrammen OG de opretstående søjler.

4 (+?) 3-hullers til 5-hullers flade kanaler. Disse giver også robotten strukturel styrke.

ServoCity sælger to hovedtyper af store flade paneler, der er nyttige til brug som bundplade eller top, hvor dit batteri og eller controllere ville gå, eller endda til en højere overflade til sensorer.

Der er et 4 (4,5?) "X 12" panel, og jeg tror, det andet er et 9 (9,5?) "X 12 panel.

Nu er det her tingene bliver interessante og kan være forvirrende og dyre (små dele tilføjes). Alle kanaler osv. Kan fastgøres til hinanden via disse forbindelsesstykker, hvoraf der er FLERE. Det er her, jeg er ked af, at jeg ikke har en omfattende, detaljeret, specifik deleliste.

Og sagen er.. du ved ikke rigtigt, hvilke du måske skal bruge, eller hvor mange.. fordi der er så mange måder, du kan passe disse stykker sammen på.

Jeg kan liste hvad jeg har brugt:

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

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

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

De følgende to er meget praktiske, og jeg vil bare byde på disse:

www.servocity.com/single-screw-plate

www.servocity.com/dual-screw-plate

Næste er alle skruerne (bolte). Jeg startede med en pakke med HVER størrelse, og jeg har gennemgået de fleste af dem. Jeg brugte længere skruer, hvor størrelsen ikke var vigtig, og reserverede de kortere til det sted, hvor de var påkrævet, fordi ingen anden længde ville fungere.

Endelig bør du få 1 pose med disse:

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

Jeg brugte ikke så mange, men de (tror jeg) er kritiske for at sikre, at dine motorer ikke vibrerer løs fra rammen over tid. Kun to ville fungere pr. Motor på grund af U-kanalen

Du skal bruge mindst 4 af disse, du får muligvis en ekstra eller deromkring, hvis du forårsager skade på en (stol på mig, du tænder / slukker muligvis motorerne et par gange):

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

Typisk er motoraksler 6 mm, og aksler er 1/4 (0,25 tommer).

Jeg ville få nogle sorte skruer, angiveligt stærkere, og bruge dem til ovenstående klemmer, og IKKE bruge de skruer, der følger med klemmerne:

(Jeg tror, det er dem):

Lejer med en diameter på 4 - 1/4 "(0,25")

1 - pose med sorte 1/4 afstandsstykker

4 - Spænding af D -nav

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

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

4 - 6 kraftige hjul

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

Bemærk, at jeg elsker disse hjul, men de har en hård gummikant. De ser ud til at klare sig godt på hårde gulve og gulvtæpper og sandsynligvis hårde betonture. Vil ikke klare sig godt på græs, sand osv.

OGSÅ vil de have en tendens til at plette dit tæppe !!!

4 - motorer:

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

Jeg gik med 223 o / min, god top indendørs hastighed, også kunne flytte min robot (tung med 2 SLA 12V batterier) ganske let i slowmotion.

2 - motorkodere til motorerne. (Servo Citys Roboclaw håndterer kun 2 encodere)

1 - Roboclaw 2X45A motorstyring, sørg for at få den med de grønne klemmer på, ikke stifterne …. godt… hver har deres fordele. I bakspejlet.. Jeg har måske fået nålene.

Jeg tror, det er det fra Servo City.

SparkFun sælger Arduino Uno (det er det, jeg brugte), og også Redboard Artemis som din drive manager.

Du vil have en Raspberry Pi 3 (eller 4?) Som dine "hjerner" på højt niveau og grænseflade til dig.

Du skal bruge ledninger, kontakter, sikringer og en meget robust "flyback" -diode.

Jeg brugte et Duracell 12V 14AH deep-cycle SLA-batteri, men du kan bruge hvad som helst.

ADVARSEL! Designet af denne robot (TALL og WIDE, men SHORT) forudsætter et slags tungt tyngdepunkt, f.eks. Et SLA -batteri. Det gør det måske ikke godt med de andre typer af nyere teknologi batteripakker. LiPo, Lion osv. Det kan let vælte.

Fra Pololu fik jeg et par tønde stikadaptere, så jeg uafhængigt kunne drive Arduino og/eller Redboard, selvom de ville blive tilsluttet Raspberry via USB, fordi jeg ikke ønskede at skulle stole på hindbærets strøm. (Især montering af kameraer, sensorer osv.)

Du skal bruge en 12-til-5V nedspændingsregulator, minimum 5A (?) Til hindbæret. De andre kan klare alt mellem 7 til 15V så direkte til SLA -batteriet.

Det er om det for dele.

Hvad jeg IKKE ville gøre - 90 graders faset gearing.

Igen er der mange videoer i min Robotics youtube -afspilningsliste, der beskriver det meste af ovenstående.

Trin 1: Konstruktion

Helt ærligt er alle mine konstruktionstrin allerede i form af youtubes. Du kan se dem i min Robotics -spilleliste, der starter med "Wallace Robot 4". De tidligere (Wallace II, Wallace III) har også godt materiale

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

Trin 2: Test Roboclaw, motorer og kodere

Skaberne af Roboclaw (BasicMicro) har et Windows -program, som du kan bruge til at sikre, at du har tilsluttet motorerne og koderne korrekt til Roboclaw. Du tilslutter motorer på samme side parallelt med Roboclaw. Du kan vælge at bruge encoder -ledningerne, kun på de bageste motorer eller de forreste motorer, eller måske endda bedre - DIAGONALT.

Grunden til mit forslag har at gøre med (senere) at kontrollere, om en robot sidder fast. At have en status diagonalt om, om forhjulene/baghjulene drejer/ikke drejer, kan være bedre end bare forreste eller bare bageste.

BEMÆRK: hvad jeg IKKE har gjort, er at bruge Arduino til også at forbinde (via GPIO -ben) til encoderne - hvis du gjorde det, kunne du få Roboclaw til at håndtere 2 encodere og derefter få Arduino til at håndtere de to andre, og bare forespørg Roboclaw om dens to encoderværdier (og hastigheder).

BEMÆRK: Jeg brugte BasicMicros applikation til at forudkonfigurere Roboclaw til rampe op / rampe ned. Dette er godt for at beskytte hardware og elektronik. Der er en video om det i min Robotics -afspilningsliste.

Jeg glemte næsten: Jeg købte også nogle bullet-connector kabler, der går mellem motorkablerne og Roboclaw. BEMÆRK: hvis du gør dette, vil du bemærke, at den samlede kabellængde er VIRKELIG LANG. Men jeg ønskede ikke at skulle skære nogen, hvis jeg ikke behøvede det. Jeg støder på (til senere trin) kommunikationsproblemer med USB'en mellem Hindbær og Arduino, sandsynligvis på grund af EMI -støj.. men jeg har arbejdet med det med software.

Hvis det bliver et problem, kan du klippe ledninger korte - du kan også købe metalafskærmning (fra Amazon, 1 diameter).

Sidste ting: Dette har jeg endnu ikke gjort --- få Roboclaw til at autokonfigurere eller auto-tune (ved hjælp af encodere), så både venstre og højre sidemotorer bevæger sig med samme hastighed, og robotten går lige.

Min kurver meget lidt over omkring 12 fod, men ikke nok til at jeg følte behov for at gøre noget ved det.

Trin 3: Tilføjelse og programmering af Arduino

Du skal bruge tøndeproppen og nogle ledninger, også et USB -kabel. Sørg for at få den korrekte til Arduino -stikket.

Du skal downloade Arduino IDE.

Her på Github er den seneste skitse, der håndterer at køre robotten:

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

Du forbinder Arduino til din computer, der kører IDE, og baseret på hvordan skitsen er skrevet, ville du bruge ben 10 og 11 på Arduino til seriel kommunikation (Software Serial) med Roboclaw.

Jeg udviklede en enkel kommunikationsprotokol mellem Raspberry Pi og Arduino.

Det er ASCII-karakterbaseret, hvilket gør det lettere at fejlsøge og teste bare ved hjælp af Arduino IDE's "seriel skærm" -vindue.

Kommandoerne starter med tallet "0" (nul) og går bare op efter behov

Kommandoerne, der starter i "20" erne er direkte Roboclaw-kommandoer, og dem under dette nummer er strengt Arduino-relaterede kommandoer.

På grund af EMI -støj forbedrede jeg kommandostrengen til at omfatte en kontrolsum.

Så enhver streng vil omfatte:

# antal tokens i streng inklusive denne

kontrolsummen

Eksempel, sig, at du vil have Arduino til at reagere med menuen med kommandoer:

4 0 12 16

"4" er fire tokens i streng.

"0" er kommandoen MENU.

"12" er det tilfældige tal, jeg valgte.

"16" er summen af 4 + 0 + 12.

Den samme MENU -kommando kan være anderledes:

4 0 20 24

Fordi jeg valgte et andet tilfældigt tal, er kontrolsummen også anderledes.

Eksempel, sig, at du vil gå fremad med 100 % hastighed:

5 29 0 134 100

"5" fem tokens

"29" kommandoen FREM

"0" det tilfældige tal

"134" kontrolsummen

"100" parameter 1 (hastigheden i dette tilfælde)

Hvis Arduino ikke kan kontrollere den indgående streng, taber den den / ignorerer den, intet svar.

Hvis Arduino ikke modtager en næste bevægelseskommando med X millisekunder, sender den en STOP -motor til Roboclaw.

Arduino starter og begynder at sende en autostatus til USB-porten … medmindre der bliver bedt om at stoppe med at gøre det.

På dette tidspunkt bør du være klar til at prøve at kontrollere Roboclaw og se motorerne dreje, bare ved at bruge "Serial Monitor" på IDE.

Trin 4: Tilføjelse og programmering af Raspberry Pi (node.js)

Igen, hvis du kigger på min Robotics -spilleliste, selv fra starten, gik jeg over hvert trin for at få Raspberry i gang.

Den eneste ting, jeg måske har glemt, er, at du får brug for en 5V regulator, og enten på en eller anden måde konstruerer, skærer/ændrer et USB -kabel til det eller driver Raspberry på en anden måde.

Her på Github er alt, hvad du har brug for i Raspberry til at kommunikere med Arduino via USB.

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

Der er endda test scripts.

Du kan tage et kig på node.js-serverkoden, og du vil se, hvordan Raspberry konverterer de korte numeriske instruktioner til REST-url-strenge. Du kan bruge "curl" til at sende testkommandoer.

Eksempel:

din RP3 IP -adresse: 8084/arduino/api/forward/50

får motorerne til at dreje hjulene et øjeblik fremad.

Hvis du lægger det i en shell script loop, ville du se hjulene blive ved med at dreje.

Node.js-koden (server.js) inkluderer en genforbindelsesfunktion, hvis serielle kommoder går tabt til Arduino. Du kan teste dette ved blot at tage Arduino-stikket ud af hindbæret og tilslutte det igen.

Sørg for, at du matcher den serielle baudhastighed mellem de to.

På grund af at Arduino tabte dårlige pakker med data, og fordi jeg på node.js -niveau og i browserens javascript -niveau er kodet til at sende mange "drive" -kommandoer, har jeg været i stand til at køre så højt som 2 000 000 baud (2 Mbps).

Hvis du får test scripts til at køre, og du ser hjulene dreje, så er du klar til det næste trin.

Trin 5: Sidste trin - Programmering / brug af websideklienten

Inkluderet i Github -linket til Raspberry -delen af alt dette er klientfilerne.

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

De håndterer USB Gamepad via Gamepad API (browserbaseret), og du bør se de forskellige knapper og skyder også tilgængelige på websiden.

Javascript-koden forespørger (afstemninger) X- og Y-aksens værdier for et af joysticks.. (afhængigt af hvilke joysticks/gamepad du har, skal du muligvis justere koden). Det afstemmer meget hurtigt, og det affyrer alle disse værdier til node.js -serveren, der lytter til 8084.

Joystickets rå X- og Y-akseværdier er mellem 0 og 1.

Men Roboclaw -motorstyringsbibliotekets funktion, der bruges i Arduino til at drive motorerne, forventer en værdi mellem -100 til 0 (bagud) eller (0 til 100) fremad.

Sjo…. det er formålet med at inkludere p5.min.js. Det sker bare med denne meget flotte, praktiske kort () -funktion, hvor du giver den råværdien, den er rå (nuværende) rækkevidde og det nye, ønskede område. Og den konverterer råværdien til værdien i det nye, kortlagte område.

Et andet punkt: Ved 100 hastigheder kan robotten være meget vanskelig. Jeg løb konstant ind i noget. Men selvom du bliver bedre til det, er det stadig rørende, når du roterer til venstre eller højre.

Noget du kan tilføje ligner den aktuelle Max Speed -skyder på websiden. Denne skyder bestemmer, hvad der er den højeste eller maksimale værdi, du vil kortlægge joysticks Xs og Ys til.

Eksempel:

Sig, at du kortlægger 0 -> 1 til 0 -> 100. Når du skubber joysticket fuldt ud, er du på 100. Touchy. Det kan være for hurtigt.

Men hvis du skubber denne Max Speed -skyder lidt tilbage, kortlægger du nu 0 -> 1 til 0 -> 80 eller 70.

Det betyder, at du har mere spillerum til at flytte dit joystick, uden at en så stor ændring i hastigheden sendes til node.js (og til Arduino).

Og tilføjelse, du kan foretage, er at adskille X'erne (drej til venstre eller højre) fra Y'erne (frem eller tilbage) til deres egne maksimale tilgængelige hastigheder.

Således kan du lade Y'erne stå på 0 til 100, 0 til -100 for hurtig lineær bevægelse, men sænke Xs maks. Hastighed for mere kontrolleret rotationsbevægelse. Bedst af begge verdener.

Trin 6: Valgfrit: Kør robot med musetræk og / eller berøringshændelser

Hvis du nåede så langt, ved du, at softwarelagene, der starter fra browseren og borer ned gennem Javascript og videre til Raspberry node.js-serveren, endelig til arduinoen, konverterer Gamepad-joystick X- og Y-koordinater til " fremad "(eller" baglæns ", osv.) kommandoer (og deres hastighedsværdi).

Ydermere ved du så, at selvom joysticks 'X'er og Y'er er negative 1, til og med nul, til plus 1, skal disse konverteres mellem nul og 100. Nå, maks afhænger af indstillingen for maks. Hastighed på websiden.

Soo … det eneste, man skal gøre for at bruge enten musen eller berøre begivenheder (som på en smartphone), er at fange disse begivenheder, få fat i X'erne og Y'erne.

MEN ---- disse X'er og Y'er er IKKE mellem negative 1 og 1. De starter 0 og stiger positivt, fordi de i det væsentlige er pixels eller relative skærmkoordinater for et eller andet HTML-element (f.eks. Et bootstrap-panel) eller et lærred.

Så der igen er P5's Js-biblioteks "map ()" -funktion meget praktisk til at kortlægge det, vi har brug for.

Jeg refaktorerede koden til at have to forskellige websider, en til desktop ved hjælp af gamepad, en anden til mobil, ved hjælp af touch -begivenheder.

Når X'erne og Y'erne igen er kortlagt, føres de også ind i den samme kædekode osv., Ligesom X'erne og Y'erne fra gamepad'en.

Anbefalede: