Innholdsfortegnelse:

En 4WD -robot drevet via ekstern USB -gamepad: 6 trinn
En 4WD -robot drevet via ekstern USB -gamepad: 6 trinn

Video: En 4WD -robot drevet via ekstern USB -gamepad: 6 trinn

Video: En 4WD -robot drevet via ekstern USB -gamepad: 6 trinn
Video: Truck Campers for Adventurous Travelers: Top 10 Picks 2024, Juni
Anonim
Image
Image

For mitt neste robotprosjekt ble jeg tvunget til å arkitekt/designe min egen robotplattform på grunn av uforutsette omstendigheter.

Målet er at den skal være autonom, men først måtte jeg teste den grunnleggende kjøreevnen, så jeg syntes det ville være et morsomt sideprosjekt å ha oppført seg og bli kontrollert som om det var et RC (radiostyrt) kjøretøy, men bruk i stedet en USB -gamepad.

Resultatene har vært omtrent like gode eller bedre enn jeg forventet.

Fordelen med å gå USB Gamepad -ruten, med mye programmering, er at jeg kan tilpasse den og legge til det jeg allerede har gjort. Jeg har ikke noen egentlig erfaring med å bygge et RC -kjøretøy, men jeg kan tenke meg at det sitter ganske mye med RC -senderen (joystick/knapper osv.) Og RC -mottakeren.

For eksempel har jeg lagt til en viss erkjennelse av at roboten har truffet en vegg, bare ved å la programvaren oppdage høye strømmer og lave koderhastigheter.

Eventuelt kan man legge til noen USB -webkameraer i roboten, avhengig av hvor mange og plassering de har, kan man kjøre roboten rundt i stuen og inn i et annet rom, mens man sitter et annet sted foran datamaskinen som har USB -gamepad koblet til den.

Denne instruksen vil ikke være en sann, detaljert, altomfattende, trinnvis veiledning, men jeg skal prøve å gi så mange detaljer som jeg kan.

Rekvisita

Foreslåtte deler: Det meste av dette fikk jeg fra Servo City (Actobotics).

2 - 13,5 U -kanaler, for sidene av baserammen. Motorene er montert på dette. Jeg gikk med noe kortere og motorene mine er montert helt i hjørnene, og det gjorde det vanskelig å montere dem.

2 - 12 U -kanaler for fronten og baksiden av baserammen.

2 - 15 U -kanaler for støtfangere, foran og bak

2 - 7 (eller var det 7,5 ?) U -kanaler for de fremre kolonnene. Dette er ikke for kritisk, lengdene kan variere. Det avhenger av hvor høye de bakre kolonnene er, og i hvilken høyde du velger å sette de vinklede U-kanal som forbinder dem.

2-(lengde?) U-kanaler for det vinklede elementet, fram-til-bak, som forbinder de stående kolonnene. Denne er kritisk, fordi Servo City / Actobotics selger 45 graders vinklede paneler eller braketter for dette formålet, men du må gjøre litt matte / trig for å sikre at du får de riktige lengdene.

2-(lengde?) U-kanaler for å fungere som sidestøtfangere på høyere nivå, igjen avhenger disse av hva du gjør med basen

2-(lengde?) U-kanaler for å fungere som støtfangere foran og bak, på samme måte ovenfor.

1 - (lengde?) U -kanal for å fungere som det øverste elementet, strekker seg over de bakre kolonnene. Denne er kanskje ikke for kritisk, siden du kan montere på toppen, eller foran / bak de stående kolonnene.

12 (ca.) L-kanaler eller braketter. Disse tjener flere formål, men gir i hovedsak strukturell integritet/styrke til hjørnene på grunnrammen OG de stående kolonnene.

4 (+?) 3-hulls til 5-hulls flatkanaler. Disse gir også roboten strukturell styrke.

ServoCity selger to hovedtyper av store flatpaneler, nyttige for bruk som bunnpanne eller topp hvor batteriet og eller kontrollerne ville gå, eller til og med for en høyere overflate for sensorer.

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

Nå er det her ting blir interessante, og kan være forvirrende og kostbare (små deler legger til). Alle kanaler osv. Kan festes til hverandre via disse forbindelsesdelene, som det er FLERE av. Det er her jeg beklager at jeg ikke har en omfattende, detaljert, spesifikk deleliste.

Og tingen er.. du vet egentlig ikke hvilke du kan trenge, eller hvor mange.. fordi det er så mange måter du kan passe disse brikkene sammen.

Jeg kan liste opp det jeg har brukt:

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

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

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

Følgende to er veldig nyttige, og jeg vil bare fylle på disse:

www.servocity.com/single-screw-plate

www.servocity.com/dual-screw-plate

Deretter er alle skruene (boltene). Jeg begynte med en pakke med hver størrelse, og jeg har gått gjennom de fleste av dem. Jeg brukte lengre skruer der størrelsen ikke spilte noen rolle, og reserverte de kortere til der de KREVES fordi ingen annen lengde ville fungere.

Til slutt bør du få 1 pose med disse:

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

Jeg brukte ikke så mange, men de (tror jeg) er kritiske for å sikre at motorene dine ikke vibrerer løs fra rammen over tid. Bare to ville fungere per motor, på grunn av U-kanalen

Du trenger minst 4 av disse. Du kan få en eller flere ekstra hvis du forårsaker skade på en (tro meg, du kan sette på / ta av motorene noen ganger):

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

Motoraksler er vanligvis 6 mm, og akslene er 1/4 (0,25 tommer).

Jeg ville få noen svarte skruer, visstnok sterkere, og bruke dem til klemmene ovenfor, og IKKE bruke skruene som følger med klemmene:

(Jeg tror det er disse):

4 - 1/4 "(0,25") diameter lagre

1 - pose med svarte 1/4 avstandsstykker

4 - Klemming av 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

Legg merke til at jeg elsker disse hjulene, men de har en hard gummikant. De ser ut til å gjøre det bra på harde gulv og tepper, og sannsynligvis harde betongturer. Vil ikke gjøre det bra på gress, sand, etc.

OGSÅ vil de ha en flekk på teppet ditt !!!

4 - motorer:

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

Jeg gikk med 223 RPM, god topphastighet innendørs, kunne også flytte roboten min (tung med 2 SLA 12V batterier) ganske enkelt i sakte film.

2 - motorkodere for motorene. (Servo Citys Roboclaw håndterer bare 2 kodere)

1 - Roboclaw 2X45A motorstyring, sørg for at du får den med de grønne rekkeklemmer på den, ikke pinnene…. vel … hver har sine fordeler. I ettertid.. Jeg har kanskje fått pinnene.

Jeg tror det er det fra Servo City.

SparkFun selger Arduino Uno (det er det jeg brukte), og også Redboard Artemis som din drive manager.

Du vil ha en Raspberry Pi 3 (eller 4?) Som "hjerner" på høyt nivå og grensesnitt for deg.

Du trenger ledninger, brytere, sikringer og en veldig robust "flyback" -diode.

Jeg brukte et Duracell 12V 14AH dypsyklus SLA-batteri, men du kan bruke hva som helst.

ADVARSEL! Utformingen av denne roboten (TALL, og WIDE, but SHORT), forutsetter et slags tungt tyngdepunkt, slik som et SLA -batteri ville gi. Det gjør det kanskje ikke bra med de andre typene nyere teknologi batteripakker. LiPo, Lion, etc. Det kan lett velte.

Fra Pololu fikk jeg noen få fat plug -adaptere, slik at jeg uavhengig kunne drive Arduino og/eller Redboard, selv om de ville være koblet til bringebæret via USB, fordi jeg ikke ønsket å stole på bringebærets strøm. (Spesielt montering av kameraer, sensorer, etc.)

Du trenger en nedre spenningsregulator på 12 til 5V, minimum 5A (?) For bringebæret. De andre kan håndtere alt mellom 7 og 15V så direkte til SLA -batteriet.

Det er omtrent det for deler.

Det jeg IKKE ville gjort - 90 graders faset giring.

Igjen er det mange videoer i min Robotics youtube -spilleliste som beskriver de fleste av de ovennevnte.

Trinn 1: Konstruksjon

Oppriktig, alle mine byggetrinn er allerede i form av youtubes. Du kan se dem i min Robotics -spilleliste, fra "Wallace Robot 4". De forrige (Wallace II, Wallace III) har også godt materiale

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

Trinn 2: Test Roboclaw, motorer og kodere

Produsentene av Roboclaw (BasicMicro) har et Windows -program som du kan bruke til å sikre at du koblet motorene og koderne riktig til Roboclaw. Du kobler til motorer på samme side parallelt med Roboclaw. Du kan velge å bruke kodertrådene, bare på de bakre motorene eller de fremre motorene, eller kanskje enda bedre - DIAGONALT.

Grunnen til forslaget mitt har å gjøre med (senere) å se etter en robot som sitter fast. Å ha en diagonal status om forhjulene/bakhjulene snur/kan ikke være bedre enn bare fronten eller bak.

MERK: det jeg IKKE har gjort er å bruke Arduino til også å koble (via GPIO -pinner) til koderne - hvis du gjorde det, kan du få Roboclaw til å håndtere 2 kodere, og deretter få Arduino til å håndtere de to andre, og bare spør Roboclaw om de to koderverdiene (og hastighetene).

MERK: Jeg brukte BasicMicro-programmet til å forhåndskonfigurere Roboclaw for ramping opp / ramping ned. Dette er bra for å beskytte maskinvaren og elektronikken. Det er en video om det i min Robotics -spilleliste.

Jeg glemte nesten: Jeg kjøpte også noen kulekontaktkabler som går mellom motorkablene og Roboclaw. MERK: hvis du gjør dette, vil du legge merke til at den totale kabellengden er VIRKELIG LANG. Men jeg ville ikke måtte kutte noen hvis jeg ikke trengte det. Jeg møtte (for senere trinn) kommunikasjonsproblemer med USB mellom Raspberry og Arduino, sannsynligvis på grunn av EMI -støy.. men jeg har jobbet med det med programvare.

Hvis det blir et problem, kan du kutte ledningene korte - du kan også kjøpe metallskjerming (fra Amazon, 1 diameter).

Siste ting: Dette har jeg ennå ikke gjort --- få Roboclaw til å autokonfigurere eller automatisk justere (ved hjelp av kodere) slik at både venstre og høyre sidemotorer beveger seg i samme hastighet og roboten går rett.

Min kurver veldig litt over 12 fot, men ikke nok til at jeg følte behov for å gjøre noe med det.

Trinn 3: Legge til og programmere Arduino

Du trenger fatkontakten og noen ledninger, også en USB -kabel. Sørg for at du får den riktige for Arduino -kontakten.

Du må laste ned Arduino IDE.

Her på Github er den siste skissen som håndterer kjøring av roboten:

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

Du vil koble Arduino til datamaskinen din som kjører IDE, og basert på hvordan skissen er skrevet, ville du bruke pinne 10 og 11 på Arduino for seriell kommunikasjon (Software Serial) med Roboclaw.

Jeg utviklet en enkel kommunikasjonsprotokoll mellom Raspberry Pi og Arduino.

Det er ASCII-karakterbasert, noe som gjør det lettere å feilsøke og teste bare ved å bruke Arduino IDEs "serielle skjerm" -vindu.

Kommandoene starter med tallet "0" (null) og går bare opp etter behov

Kommandoene som starter på "20" -ene er direkte Roboclaw-kommandoer, og de under dette tallet er strengt Arduino-relaterte kommandoer.

På grunn av EMI -støyen forbedret jeg kommandostrengen til å inkludere en kontrollsum.

Så enhver streng vil inneholde:

# antall tokens i strengen inkludert denne

kontrollsummen

Eksempel, si at du vil at Arduino skal svare med menyen med kommandoer:

4 0 12 16

"4" er fire symboler i strengen.

"0" er MENY -kommandoen.

"12" er det tilfeldige tallet jeg valgte.

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

Den samme MENY -kommandoen kan være annerledes:

4 0 20 24

Fordi jeg valgte et annet tilfeldig tall, er kontrollsummen også annerledes.

Eksempel, si at du vil gå fremover med 100 % hastighet:

5 29 0 134 100

"5" fem tokens

"29" kommandoen FREM

"0" det tilfeldige tallet

"134" kontrollsummen

"100" parameter 1 (hastigheten i dette tilfellet)

Hvis Arduino ikke kan bekrefte den innkommende strengen, slipper den bare / ignorerer den, ingen respons.

Hvis Arduino ikke mottar en neste bevegelseskommando med X millisekunder, sender den en STOP -motor til Roboclaw.

Arduino starter og sender en autostatus til USB-porten … med mindre du blir bedt om å slutte med det.

På dette tidspunktet bør du være klar til å prøve å kontrollere Roboclaw og se motorene snu, bare ved å bruke "Serial Monitor" på IDE.

Trinn 4: Legge til og programmere Raspberry Pi (node.js)

Igjen, hvis du tar en titt på Robotics -spillelisten min, selv fra starten, gikk jeg over hvert trinn for å få bringebæret i gang.

Den eneste tingen jeg kan ha glanset over er at du trenger en 5V regulator, og enten på en eller annen måte konstruerer, kutter/endrer en USB -kabel for den, eller driver Raspberry på en annen måte.

Her på Github er alt du trenger i bringebæret for å kommunisere med Arduino via USB.

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

Det er til og med testskript.

Du kan ta en titt på node.js-serverkoden, og du vil se hvordan bringebæret konverterer de korte numeriske instruksjonene til REST-type url-strenger. Du kan bruke "curl" for å sende testkommandoer.

Eksempel:

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

vil få motorene til å rotere hjulene for en stund.

Hvis du legger det i en skallskriptsløyfe, ser du at hjulene fortsetter å snu.

Node.js-koden (server.js) inkluderer en ny tilkoblingsfunksjon i tilfelle seriell kommando går tapt for Arduino. Du kan teste dette ved å bare koble Arduino fra bringebæret og koble den til igjen.

Sørg for at du samsvarer med den serielle overføringshastigheten mellom de to.

På grunn av at Arduino slipper dårlige datapakker, og fordi på node.js -nivået og på nettleserens javascript -nivå, er alt kodet for å sende mange "stasjon" -kommandoer, jeg har kunnet kjøre så høyt som 2 000 000 baud (2 Mbps).

Hvis du får testskriptene til å kjøre og du ser at hjulene snurrer, er du klar for neste trinn.

Trinn 5: Siste trinn - Programmering / bruk av websideklienten

Inkludert i Github -lenken til bringebærdelen av alt dette, er klientfilene.

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

De håndterer USB Gamepad via Gamepad API (nettleserbasert), og du bør se de forskjellige knappene og glidebryterne også tilgjengelig på nettsiden.

JavaScript-koden spør (undersøkelser) verdiene for X- og Y-aksen for en av styrespakene.. (avhengig av hvilken joystick/gamepad du har, må du kanskje justere koden). Den avstemmer veldig raskt, og den avfyrer alle disse verdiene til node.js -serveren som lytter på 8084.

De rå X- og Y-akseverdiene til styrespakene er mellom 0 og 1.

Men Roboclaw motorstyringsbibliotekfunksjon som brukes i Arduino for å drive motorene, forventer en verdi mellom -100 til 0 (bakover) eller (0 til 100) fremover.

Soo…. det er hensikten med å inkludere p5.min.js. Det har tilfeldigvis denne veldig fine, praktiske kartfunksjonen () der du gir den råverdien, det er rå (nåværende) område og det nye, ønskede området. Og den konverterer råverdien til verdien i det nye, kartlagte området.

Et annet punkt: Ved 100 hastigheter kan roboten være veldig vanskelig. Jeg løp hele tiden inn i noe. Men selv om du blir bedre på det, er det fortsatt pregende når du roterer til venstre eller høyre.

Noe du kan legge til, ligner på den nåværende glidebryteren for maksimal hastighet på nettsiden. Denne glidebryteren bestemmer hva som er den høyeste eller maksimale verdien du vil kartlegge styrespakene Xs og Ys til.

Eksempel:

Si at du kartlegger 0 -> 1 til 0 -> 100. Når du trykker joysticken helt, er du på 100. Touchy. Kan være for fort.

Men hvis du skyver glidebryteren Max Speed litt tilbake, kartlegger du nå 0 -> 1 til 0 -> 80 eller 70.

Det betyr at du har større spillerom til å flytte joysticken uten at en så stor endring i hastigheten blir sendt til node.js (og til Arduino).

Og tillegg du kan gjøre er å skille X -ene (roter til venstre eller høyre) fra Y -en (fremover eller bakover) til sine egne maksimale tilgjengelige hastigheter.

Dermed kan du la Y -ene stå på 0 til 100, 0 til -100 for rask lineær bevegelse, men senke maksimalhastigheten Xs for mer kontrollert rotasjonsbevegelse. Beste av begge verdener.

Trinn 6: Valgfritt: Kjør robot med musedrag og / eller berøringshendelser

Hvis du kom så langt, vet du at programvarelagene som starter fra nettleseren og borer ned gjennom Javascript og videre til Raspberry node.js-serveren, til slutt til arduinoen, konverterer Gamepad-joystick X- og Y-koordinater til " kommandoer (eller "bakover" osv.) (og hastighetsverdien).

Videre vet du da at mens joystickens X og Y er negative 1, til og med null, til pluss 1, må de konverteres mellom null og 100. Vel, maks avhenger av maks hastighetsinnstillingen på nettsiden.

Soo … det eneste du må gjøre for å bruke enten musen eller berøre hendelser (som på en smarttelefon), er å fange disse hendelsene, ta tak i X og Ys.

MEN ---- disse X-ene og Y-ene er IKKE mellom negative 1 og 1. De starter 0 og øker positivt, fordi de i hovedsak er piksler eller relative skjermkoordinater til et HTML-element (for eksempel et oppstartspanel) eller et lerret.

Så igjen er P5s Js-biblioteks "map ()" -funksjon veldig nyttig for å kartlegge det vi trenger.

Jeg refaktorerte koden for å ha to forskjellige nettsider, en for skrivebordet med Gamepad, en annen for mobil, ved hjelp av berøringshendelser.

Når også X-ene og Y-ene er tilordnet på nytt, blir de matet inn i samme kodekjede, osv., Som er X-ene og Y-ene fra gamepad-en.

Anbefalt: