INHOUDSOPGAWE:

N 4WD -robot wat via 'n eksterne USB -gamepad bestuur word: 6 stappe
N 4WD -robot wat via 'n eksterne USB -gamepad bestuur word: 6 stappe

Video: N 4WD -robot wat via 'n eksterne USB -gamepad bestuur word: 6 stappe

Video: N 4WD -robot wat via 'n eksterne USB -gamepad bestuur word: 6 stappe
Video: 😳😂 Alex probeert Athena te zoenen in vlog Gio #gio #alex #athena #vlog 2024, November
Anonim
Image
Image

Vir my volgende robotika -projek was ek verplig om my eie robotplatform te ontwerp/te ontwerp weens onvoorsiene omstandighede.

Die doel is dat dit outonoom moet wees, maar eers moes ek die basiese bestuursvermoë daarvan toets, en ek het gedink dat dit 'n prettige syprojek sou wees om op te tree en beheer te word asof dit 'n RC (radiobeheerde) voertuig is., maar gebruik eerder 'n USB -gamepad.

Die resultate was omtrent net so goed of beter as wat ek verwag het.

Die voordeel van die USB Gamepad -roete, met baie programmering, is dat ek dit kan aanpas en byvoeg by wat ek reeds gedoen het. Ek het nie 'n werklike ervaring met die bou van 'n RC -voertuig nie, maar ek verbeel my dat die een bykans vasgeval het in die RC -sender (joysticks/knoppies, ens.) En die RC -ontvanger.

Ek het byvoorbeeld 'n mate van erkenning bygevoeg dat die robot teen 'n muur getref het, net deur die sagteware hoë strome en lae spoedwaarde te laat opspoor.

U kan ook 'n paar USB -webcams by die robot voeg, afhangende van hoeveel en hoe hulle geleë is, kan u die robot in die leefarea en na 'n ander kamer ry, terwyl u êrens anders voor die rekenaar sit waarop die USB -gamepad gekoppel is. Dit.

Hierdie instruksies sal nie 'n ware, gedetailleerde, allesomvattende, stap-vir-stap-instruksie wees nie, maar ek sal probeer om soveel moontlik besonderhede te gee.

Voorrade

Voorgestelde onderdele: Die meeste hiervan het ek by Servo City (Actobotics) gekry.

2 - 13,5 U -kanale, aan die kante van die basisraam. Die motors word hierop gemonteer. Ek het met iets korter gegaan en my motors is aan die hoeke gemonteer, en dit het dit moeilik gemaak om dit te monteer.

2 - 12 U -kanale vir die voor- en agterkant van die basisraam.

2 - 15 U -kanale vir die bumpers, voor en agter

2 - 7 (of was dit 7,5 ?) U -kanale vir die voorste kolomme. Dit is nie te kritiek nie, die lengtes kan wissel. Dit hang af hoe lank die agterste kolomme is en op watter hoogte u die hoek wil kies U-kanaal wat tussen hulle verbind.

2-(lengte?) U-kanale vir die hoekige element, van voor tot agter, wat die regop kolomme verbind. Hierdie een is van kritieke belang, want Servo City / Actobotics verkoop 45 grade hoekpanele of hakies vir hierdie doel, maar u moet wiskunde / triggers doen om seker te maak dat u die regte lengtes kry.

2-(lengte?) U-kanale om as kantbuffers op hoër vlak te dien, dit hang weer af van wat u met die basis doen

2-(lengte?) U-kanale om te dien as bumpers voor en agter op 'n hoër vlak, dieselfde probleem hierbo.

1 - (lengte?) U -kanaal om as die boonste lid te dien, strek oor die agterste kolomme. Hierdie een is miskien nie te krities nie, aangesien u dit bo -op of voor / agter die regop kolomme kan monteer.

12 (ongeveer) L-kanale of hakies. Dit dien verskeie doeleindes, maar bied in wese strukturele integriteit/sterkte aan die hoeke van die basisraam EN die regop kolomme.

4 (+?) 3-gat tot 5-gat plat kanale. Dit bied ook 'n strukturele sterkte aan die robot.

ServoCity verkoop twee hoofsoorte groot panele met groot oppervlaktes, wat handig is om as 'n onderste pan te gebruik, of bo-op waar u battery en of beheerders kan gaan, of selfs vir 'n hoër oppervlak vir sensors.

Daar is 'n 4 (4.5?) "X 12" paneel, en ek dink die ander is 'n 9 (9.5?) "X 12 paneel.

Dit is nou waar dinge interessant raak, en dit kan verwarrend en duur wees (klein dele bymekaar). Alle kanale, ens, kan aan mekaar gekoppel word via hierdie verbindingsstukke, waarvan daar meer is. Dit is waar ek jammer is dat ek nie 'n volledige, gedetailleerde, spesifieke onderdele lys het nie.

En die ding is.. jy weet nie regtig watter een jy nodig het nie, of hoeveel … omdat daar soveel maniere is om hierdie stukke bymekaar te pas.

Ek kan 'n lys maak van wat ek gebruik het:

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

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

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

Die volgende twee is baie handig, en ek sal dit net op voorraad hê:

www.servocity.com/single-screw-plate

www.servocity.com/dual-screw-plate

Volgende is al die skroewe (boute). Ek het begin met 'n pakket van ELKE grootte, en ek het die meeste daarvan deurgemaak. Ek het langer skroewe gebruik waar die grootte nie saak maak nie, en die korteres gereserveer vir die plek waar dit vereis word, omdat geen ander lengte sou werk nie.

Laastens moet u 1 sak hiervan kry:

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

Ek het nie so baie gebruik nie, maar dit is volgens my van kritieke belang om seker te maak dat u motors nie mettertyd uit die raam vibreer nie. Vanweë die U-kanaal werk slegs twee per motor

U benodig ten minste vier hiervan; u kry miskien een of meer ekstra as u een beskadig (vertrou my, u sit moontlik die motors 'n paar keer aan / uit):

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

Gewoonlik is die motors se as 6 mm en die asse 1/4 (0.25in).

Ek sou 'n paar swart skroewe kry, vermoedelik sterker, en dit gebruik vir die bogenoemde klemme, en ek gebruik NIE die skroewe wat by die klemme kom nie:

(Ek dink dit is die een):

Laers met 'n deursnee van 4 - 1/4 "(0,25")

1 - sak swart 1/4 afstandhouers

4 - Klem D -hubs

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

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

4 - 6 swaardienswiele

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

Let daarop dat ek van hierdie wiele hou, maar hulle het 'n harde rubberrand. Dit lyk asof hulle goed vaar op harde vloere en matte, en waarskynlik harde betonstappe. Dit sal nie goed gaan met gras, sand, ens.

OOK, hulle sal geneig wees om u mat te vryf !!!

4 - motors:

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

Ek het met die 223 RPM, goeie binnenshuise spoed, ook my robot (swaar met 2 SLA 12V -batterye) redelik maklik in stadige beweging beweeg.

2 - motorkodeerders vir die motors. (Roboclaw van Servo City hanteer slegs 2 encoders)

1 - Roboclaw 2X45A motorbeheerder, maak seker dat u die een met die groen aansluitblokke daarop kry, nie die penne nie …. wel … elkeen het sy voordele. Agterna gesien.. ek het dalk die penne gekry.

Ek dink dit is dit van Servo City.

SparkFun verkoop Arduino Uno (dit is wat ek gebruik het), en ook Redboard Artemis as u bestuurder.

U wil 'n Raspberry Pi 3 (of 4?) As u 'brein' op hoë vlak en 'n koppelvlak vir u hê.

U benodig bedrading, skakelaars, sekuriteite en 'n baie robuuste "flyback" -diode.

Ek het 'n Duracell 12V 14AH diep-siklus SLA-battery gebruik, maar u kan alles gebruik.

WAARSKUWING! Die ontwerp van hierdie robot (TALL, en WIDE, maar KORT), veronderstel 'n soort swaar swaartepunt, soos 'n SLA -battery sou bied. Dit is miskien nie goed met die ander soorte nuwer tegnologie -batterye nie. LiPo, Lion, ens. Dit kan maklik omslaan.

Van Pololu af het ek 'n paar vatstopadapters gekry, sodat ek die Arduino en/of die Redboard onafhanklik kon dryf, selfs al sou hulle via USB aan die Framboos gekoppel wees, want ek wou nie op die framboos se krag staatmaak nie.. (Veral die montering van kameras, sensors, ens.)

U benodig 'n 12 tot 5V verlagingsspanningsreguleerder, minimum 5A (?) Vir die Framboos. Die ander kan alles tussen 7 en 15V so direk na die SLA -battery hanteer.

Dit is omtrent dit vir onderdele.

Wat ek NIE sou doen nie - 90 grade skuins ratkas.

Weereens, daar is baie video's in my Robotics -YouTube -snitlys wat die meeste van die bogenoemde beskryf.

Stap 1: Konstruksie

Eerlik, al my konstruksiestappe is reeds in die vorm van youtubes. U kan dit in my Robotics -snitlys sien, begin by "Wallace Robot 4". Die vorige (Wallace II, Wallace III) het ook goeie materiaal

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

Stap 2: Toets die Roboclaw, Motors en Encoders

Die vervaardigers van Roboclaw (BasicMicro) het 'n Windows -toepassing wat u kan gebruik om seker te maak dat u die motors en encoders korrek aan die Roboclaw gekoppel het. U sal parallel aan die Roboclaw motors aan dieselfde kant aansluit. U kan kies om die encoder drade te gebruik, slegs op die agterste motors, of die voorste motors, of miskien selfs beter - DIAGONAAL.

Die rede vir my voorstel het te doen met (later) kyk na 'n robot wat vasgesteek het. Dit kan beter wees as net die voorkant, of net die agterkant, diagonaal as die voor-/agterwiele nie draai nie.

OPMERKING: wat ek NIE gedoen het nie, is om die Arduino te gebruik om ook (via GPIO -penne) aan te sluit op die encoders - as u dit gedoen het, kan u die Roboclaw 2 encoders hanteer, en dan die Arduino die ander twee laat hanteer, en net Vra die Roboclaw vir twee kodeerderwaardes (en snelhede).

OPMERKING: Ek het die BasicMicro-toepassing gebruik om die Roboclaw vooraf op te stel om op / af te stamp. Dit is goed om die hardeware en die elektronika te beskerm. Daar is 'n video hieroor in my Robotics -snitlys.

Ek het amper vergeet: ek het ook 'n paar aansluitkabels tussen die motorkabels en die Roboclaw gekoop. OPMERKING: as u dit doen, sal u agterkom dat die totale kabellengte baie lank is. Maar ek wou nie sny as ek dit nie nodig gehad het nie. Ek het wel (vir latere stappe) kommunikasieprobleme met die USB tussen die Framboos en die Arduino ondervind, waarskynlik as gevolg van EMI -geraas.. maar ek het daaraan gewerk met sagteware.

As dit 'n probleem word, kan u die drade kort sny - u kan ook metaalafskerming koop (by Amazon, 1 deursnee).

Laaste ding: dit wat ek nog moet doen-laat die Roboclaw outomaties opstel of outomaties instel (met behulp van enkodeerders), sodat beide linker- en regterkantmotors teen dieselfde spoed beweeg en die robot reguit gaan.

Myne buig baie effens oor ongeveer 12 voet, maar nie genoeg dat ek die behoefte gevoel het om iets daaraan te doen nie.

Stap 3: Voeg die Arduino by en programmeer dit

U benodig die vatprop en 'n paar bedrading, ook 'n USB -kabel. Maak seker dat u die regte een vir die Arduino -aansluiting kry.

U moet die Arduino IDE aflaai.

Hier by Github is die nuutste skets wat die bestuur van die robot hanteer:

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

U koppel die Arduino aan u rekenaar met die IDE, en op grond van hoe die skets geskryf is, gebruik u penne 10 en 11 op die Arduino vir seriële kommunikasie (sagteware -reeks) met die Roboclaw.

Ek het 'n eenvoudige kommunikasieprotokol ontwikkel tussen die Raspberry Pi en die Arduino.

Dit is gebaseer op ASCII-karakter, wat dit makliker maak om te ontfout en te toets met behulp van die venster "seriële monitor" van Arduino IDE.

Die opdragte begin by nommer "0" (nul) en styg net soos nodig

Die opdragte wat in die '20' begin, is direkte Roboclaw-opdragte, en die onder die getal is streng Arduino-verwante opdragte.

As gevolg van die EMI -geraas, het ek die opdragstring verbeter met 'n kontrolesom.

Dus, enige string sal die volgende insluit:

# aantal tokens in string insluitend hierdie

die kontrolesom

Sê byvoorbeeld dat u wil hê dat die Arduino moet reageer met die spyskaart met opdragte:

4 0 12 16

"4" is vier tekens in tou.

"0" is die MENU opdrag.

"12" is die ewekansige getal wat ek gekies het.

"16" is die som van 4 + 0 + 12.

Dieselfde MENU -opdrag kan anders wees:

4 0 20 24

Omdat ek 'n ander ewekansige nommer gekies het, is die kontrolesom ook anders.

Sê byvoorbeeld dat u met 100 % spoed vorentoe wil gaan:

5 29 0 134 100

"5" vyf tekens

"29" die VOORUIT -opdrag

"0" die ewekansige getal

"134" die kontrolesom

"100" die parameter 1 (die snelheid in hierdie geval)

As die Arduino die inkomende string nie kan verifieer nie, laat dit dit net val / ignoreer dit, geen reaksie nie.

As die Arduino nie 'n volgende bewegingsopdrag met X millisekondes ontvang nie, stuur dit 'n STOP -motor na die Roboclaw.

Die Arduino begin en stuur 'n outomatiese status na die USB-poort … tensy hy gesê word om op te hou om dit te doen.

Op hierdie punt moet u gereed wees om die Roboclaw te beheer en te kyk hoe die motors draai, net deur die 'Serial Monitor' op die IDE te gebruik.

Stap 4: Voeg en programmeer die Raspberry Pi (node.js)

Weereens, as u na my Robotics -snitlys kyk, selfs van die begin af, het ek elke stap deurgegaan om die Framboos aan die gang te kry.

Die een ding wat ek moontlik sou verlig, is dat u 'n 5V -reguleerder benodig en 'n USB -kabel daarvoor op 'n manier kan bou, sny/verander, of die framboos op 'n ander manier kan aandryf.

Hier by Github is alles wat u nodig het in die Framboos om via USB met die Arduino te kommunikeer.

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

Daar is selfs toetsskrifte.

U kan na die node.js-bedienerkode kyk, en u sal sien hoe die Framboos die kort numeriese instruksies omskakel in URL-snare van die REST-tipe. U kan 'krul' gebruik om toetsopdragte te stuur.

Voorbeeld:

jou RP3 IP -adres: 8084/arduino/api/forward/50

sal veroorsaak dat die motors die wiele kort voorwaarts draai.

As u dit in 'n dop -lus plaas, sou u sien dat die wiele aanhou draai.

Die node.js-kode (server.js) bevat 'n heraansluitingsfunksie, ingeval reekskommissies verlore gaan vir die Arduino. U kan dit toets deur die Arduino uit die framboos te ontkoppel en weer aan te sluit.

Maak seker dat u die seriële baud -tempo tussen die twee pas.

Omdat die Arduino slegte pakkies data laat val het, en omdat op node.js -vlak en op die javascript -vlak van die blaaier alles gekodeer is om baie 'drive' -opdragte te stuur, kon ek tot 2 000 000 baud hardloop (2 Mbps).

As u die toetsskrifte laat loop en die wiele sien draai, is u gereed vir die volgende stap.

Stap 5: Laaste stap - Programmering / gebruik van die webbladkliënt

Die kliëntlêers bevat die Github -skakel na die Raspberry -gedeelte hiervan.

indeks.html. indeks.js. p5.min.js.

Hulle hanteer die USB-gamepad via die Gamepad API (op blaaier gebaseer), en u moet die verskillende knoppies en skuifbalkies ook op die webwerf sien.

Die javascript-kode vra (peilings) die X- en Y-as-waardes vir een van die joysticks.. (afhangende van watter joysticks/gamepad u het, moet u moontlik die kode aanpas). Dit peil baie vinnig en dit stoot al die waardes af na die node.js -bediener wat luister na 8084.

Die rou X- en Y-as-waardes van die joysticks is tussen 0 en 1.

Maar die Roboclaw -motorbestuurderbiblioteekfunksie wat in die Arduino gebruik word om die motors aan te dryf, verwag 'n waarde tussen -100 tot 0 (agteruit) of (0 tot 100) vorentoe.

Sjoe…. dit is die doel om die p5.min.js. Dit het toevallig 'n baie goeie, gerieflike kaartfunksie () waar u die rou waarde, die rou (huidige) reeks en die nuwe, gewenste reeks gee. En dit verander die rou waarde in die waarde in die nuwe, gekarteerde reeks.

Nog 'n punt: met 'n snelheid van 100 kan die robot baie lastig wees. Ek het konstant iets raakgeloop. Maar selfs al word u beter daarmee, is dit steeds aangrypend as u na links of regs draai.

Iets wat u kan byvoeg, is soortgelyk aan die huidige Max Speed -skuifbalk op die webwerf. Die skuifbalk bepaal wat die hoogste of maksimum waarde is waarmee u die joysticks Xs en Ys sal karteer.

Voorbeeld:

Gestel u karteer 0 -> 1 tot 0 -> 100. As u die joystick in die punt druk, is u op 100. Touchy. Miskien te vinnig.

Maar as u die Max Speed -skuifbalk 'n bietjie terugskuif, karteer u nou 0 -> 1 na 0 -> 80 of 70.

Dit beteken dat u meer ruimte het om u joystick te beweeg sonder dat so 'n groot verandering in die spoed na die node.js (en na die Arduino) gestuur word.

En u kan ook die X's (links of regs draai) van die Ys (vorentoe of agtertoe) in hul eie maksimum beskikbare snelhede skei.

U kan dus die Y's op 0 tot 100, 0 tot -100 laat vir vinnige lineêre beweging, maar die maksimum spoed van Xs verlaag vir meer beheerde rotasiebeweging. Beste van twee wêrelde.

Stap 6: opsioneel: bestuur robot met muis sleep en / of raakgebeurtenisse

As u so ver gekom het, weet u dat die sagtewarelae wat vanaf die blaaier begin en deur die Javascript gaan en na die Raspberry node.js-bediener, uiteindelik na die arduino, die Gamepad-joystick X- en Y-koördinate omskakel in die " vooruit "(of" agteruit ", ens) opdragte (en hul spoedwaarde).

Verder weet u dat alhoewel die joysticks se X's en Y's negatief 1 is, van nul tot plus 1, dit moet omgeskakel word tussen nul en 100. Wel, die maksimum hang af van die maksimum snelheidsinstelling op die webblad.

Soo … die enigste ding wat u moet doen om die muis te gebruik, of om gebeurtenisse aan te raak (soos op 'n slimfoon), is om die gebeure vas te lê, die X's en Y's te gryp.

MAAR ---- die X's en Y's is NIE tussen negatief 1 en 1. Hulle begin 0 en neem positief toe, omdat dit in wese die pixels of relatiewe skermkoördinate van 'n HTML-element (soos 'n bootstrap-paneel) of 'n doek is.

So weer, die P5's Js-biblioteek se "map ()" -funksie is baie handig om weer in kaart te bring na wat ons nodig het.

Ek het die kode hervorm om twee verskillende webblaaie te hê, een vir die rekenaar met behulp van die Gamepad, 'n ander vir mobiele toestelle, met behulp van die aanraakgebeurtenisse.

Sodra die X's en Y's weer gekarteer is, word hulle in dieselfde ketting kode, ens, ingevoer, net soos die X's en Y's van die Gamepad.

Aanbeveel: