Taula de continguts:

Un robot 4WD accionat mitjançant un controlador de memòria USB remot: 6 passos
Un robot 4WD accionat mitjançant un controlador de memòria USB remot: 6 passos

Vídeo: Un robot 4WD accionat mitjançant un controlador de memòria USB remot: 6 passos

Vídeo: Un robot 4WD accionat mitjançant un controlador de memòria USB remot: 6 passos
Vídeo: ЗАПРЕЩЁННЫЕ ТОВАРЫ с ALIEXPRESS 2023 ШТРАФ и ТЮРЬМА ЛЕГКО! 2024, Desembre
Anonim
Image
Image

Per al meu proper projecte de robòtica, em vaig veure obligat a arquitectar / dissenyar la meva pròpia plataforma de robots a causa de circumstàncies imprevistes.

L’objectiu és que sigui autònom, però primer necessitava provar la seva capacitat bàsica de conducció, així que vaig pensar que seria un divertit projecte secundari comportar-se i estar controlat com si es tractés d’un vehicle RC (radiocontrolat), en canvi, utilitzeu un Gamepad USB.

Els resultats han estat tan bons o millors del que esperava.

L’avantatge d’anar amb la ruta USB Gamepad, amb molta programació, és que el puc personalitzar i afegir al que ja he fet. No tinc cap experiència real construint un vehicle RC, però imagino que un està bastant enganxat amb qualsevol que sigui el transmissor RC (joysticks / botons, etc.) i el receptor RC.

Per exemple, he afegit un cert reconeixement que el robot ha xocat contra una paret, només amb el fet que el programari detecti corrents elevats i valors de velocitat de codificador baixos.

Opcionalment, es poden afegir algunes càmeres web USB al robot, depenent de la quantitat i la seva ubicació, es pot conduir el robot per la zona d'estar i cap a una altra habitació, mentre es troba assegut en un altre lloc davant de l'ordinador que té el Gamepad USB connectat a això.

Aquest instructiu no serà pas veritable, detallat, amb tot inclòs, pas a pas, però intentaré donar el màxim de detalls possible.

Subministraments

Parts suggerides: la majoria de les coses les he obtingut de Servo City (Actobotics).

2 - Canals en U de 13,5 , per als laterals del marc de la base. Els motors estan muntats en aquest. Vaig anar amb alguna cosa més curta i els meus motors es munten a les cantonades i va dificultar el muntatge.

Canals en U de 2 a 12 per a la part davantera i posterior del marc base.

2 - 15 canals en U per als para-xocs, davanters i posteriors

Canals en U de 2 a 7 (o era de 7,5 ?) Per a les columnes anteriors. Això no és massa crític, les longituds poden variar. Depèn de la mida de les columnes posteriors i a quina alçada trieu posar els angles Canal en U que es connecta entre ells.

2 - (longitud?) Canals en U per a l’angle, frontal a darrere, que connecten les columnes verticals. Aquest és fonamental, perquè Servo City / Actobotics ven panells o claudàtors angulats de 45 graus per a aquest propòsit, però haureu de fer algunes matemàtiques / trig per assegurar-vos que obteniu les longituds correctes.

2 - (llargada?) Canals en U per servir com a para-xocs laterals de nivell superior, de nou depenen del que feu amb la base

2 - (llargada?) Canals en U per servir com a para-xocs davanters i posteriors de nivell superior, idem per a la part superior.

1 - (longitud?) Canal en U per servir com a membre superior, que abasta les columnes posteriors. Pot ser que aquest no sigui massa crític, ja que podeu muntar-lo a sobre o al davant o darrere de les columnes verticals.

12 (aprox) canals en L o claudàtors. Aquests serveixen per a múltiples propòsits, però essencialment proporcionen integritat / resistència estructural a les cantonades del marc base I a les columnes verticals.

4 (+?) Canals plans de 3 forats a 5 forats. Aquests també proporcionen resistència estructural al robot.

ServoCity ven dos tipus principals de panells plans de gran superfície, útils per utilitzar-los com a patins inferiors o cap a on anirien la bateria o els controladors, o fins i tot per a superfícies superiors per a sensors.

Hi ha un tauler de 4 (4,5?) "X 12" i crec que l'altre és un tauler de 9 (9,5?) "X 12".

Ara és aquí on les coses es posen interessants i poden resultar confuses i costoses (se sumen peces petites). Tots els canals, etc., es poden connectar entre ells mitjançant aquestes peces de connexió, de les quals hi ha DIVERSOS. Aquí és on em sap greu no tenir una llista completa, detallada i específica de peces.

I el cas és que, realment, no sabeu quines podríeu necessitar o quantes.. perquè hi ha moltes maneres d’ajustar aquestes peces.

Puc enumerar el que he utilitzat:

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

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

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

Els dos següents són molt útils i només me’n faríem amb aquests:

www.servocity.com/single-screw-plate

www.servocity.com/dual-screw-plate

A continuació es mostren tots els cargols (cargols). Vaig començar amb un paquet de CADA mida i n’he passat per la majoria. He utilitzat cargols més llargs on la mida no importava i he reservat els més curts per on eren REQUISITS perquè no funcionaria cap altra longitud.

Per últim, n’haureu d’aconseguir 1 bossa:

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

No en vaig fer servir tants, però (crec) són fonamentals per assegurar-me que els motors no vibrin solts del quadre amb el pas del temps. Només funcionarien dos per motor, a causa del canal U.

Necessiteu almenys 4 d'aquests, en podreu obtenir un de més o menys en cas de causar-ne danys (confieu en mi, és possible que estigueu engegant / traient els motors algunes vegades):

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

Normalment, els eixos dels motors fan 6 mm i els eixos són de 0,25 polzades.

Obtindria uns cargols negres, suposadament més forts, i els faria servir per a les pinces anteriors i NO faria servir els cargols que vénen amb les pinces:

(Crec que són aquests):

Rodaments de 4 - 1/4 "(0,25") de diàmetre

1 - bossa de separadors negres de 1/4"

4 - Hubs D de subjecció

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

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

Rodes resistents de 4 a 6 polzades

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

Tingueu en compte que m'encanten aquestes rodes, però tenen una vora de goma dura. Sembla que ho fan bé en terres durs i catifes i, probablement, en passejades de formigó dures. No ho farà bé sobre herba, sorra, etc.

TAMBÉ, tendiran a tacar-se la catifa !!!

4 - motors:

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

Vaig anar amb 223 RPM, bona velocitat interior, també podia moure el meu robot (pesat amb 2 bateries SLA 12V) amb facilitat a càmera lenta.

2 - codificadors de motors per als motors. (Roboclaw de Servo City només gestiona 2 codificadors)

1 - Controlador de motor Roboclaw 2X45A, assegureu-vos que obteniu el que conté els blocs de terminals verds, no els pins … welll … cadascun té els seus avantatges. Retrospectiva.. Potser hauria aconseguit els passadors.

Crec que és això de Servo City.

SparkFun ven Arduino Uno (això és el que jo feia servir), i també Redboard Artemis com a gestor del vostre disc.

Voleu un Raspberry Pi 3 (o 4?) Com a "cervell" i interfície d'alt nivell per a vosaltres.

Necessitareu cablejat, interruptors, fusibles i un díode "flyback" molt robust.

He utilitzat una bateria SLA de cicle profund Duracell 12V 14AH, però es pot utilitzar qualsevol cosa.

AVÍS! El disseny d’aquest robot (TALL i WIDE, però CURT), suposa una mena de centre de gravetat pesat, com la que proporcionaria una bateria SLA. Pot ser que no vagi bé amb altres tipus de bateries de tecnologia més nova. LiPo, Lion, etc. Es podria bolcar fàcilment.

De Pololu vaig obtenir uns quants adaptadors de connexió de barril, de manera que podia alimentar independentment l’Arduino i / o el Redboard, tot i que estarien connectats al Raspberry mitjançant USB, perquè no volia haver de confiar en la potència del Raspberry.. (Especialment muntatge de càmeres, sensors, etc.)

Necessitareu un regulador de tensió reduït de 12 a 5V, mínim 5A (?) Per al gerd. Els altres poden gestionar qualsevol cosa entre 7 i 15V tan directament a la bateria SLA.

Això és tot per a les peces.

El que NO faria: engranatge bisellat de 90 graus.

Una vegada més, hi ha molts vídeos a la meva llista de reproducció de youtube de Robotics que detallen la majoria dels anteriors.

Pas 1: construcció

Francament, tots els meus passos de construcció ja són en forma de youtubes. Podeu veure els que apareixen a la meva llista de reproducció de Robòtica, començant per "Wallace Robot 4". Les anteriors (Wallace II, Wallace III) també tenen bon material

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

Pas 2: proveu el Roboclaw, els motors i els codificadors

Els fabricants de Roboclaw (BasicMicro) tenen una aplicació de Windows que podeu utilitzar per assegurar-vos que heu connectat correctament els motors i codificadors a Roboclaw. Connectareu motors del mateix costat en paral·lel al Roboclaw. Podeu utilitzar els cables del codificador, només als motors posteriors o als motors anteriors, o potser millor, DIAGONAMENT.

El motiu del meu suggeriment té a veure amb (més endavant) buscar un robot atrapat. Tenir un estat en diagonal de si les rodes davanteres / posteriors no giren pot ser millor que només la part davantera o només la posterior.

NOTA: el que NO he fet és fer servir l’Arduino per connectar-me també (mitjançant pins GPIO) als codificadors; si ho féssiu, podríeu tenir el codificador Roboclaw amb 2 codificadors i, a continuació, fer que l’Arduino controlés els altres dos, i només consulta el Roboclaw pels seus dos valors (i velocitats) del codificador.

NOTA: He utilitzat l'aplicació de BasicMicro per configurar prèviament el Roboclaw per Ramping Up / Ramping Down. Això és bo per protegir el maquinari i l’electrònica. Hi ha un vídeo sobre això a la meva llista de reproducció de Robotics.

Gairebé m’oblidava: també vaig comprar alguns cables de connectors de bala que van entre els cables del motor i el Roboclaw. NOTA: si feu això, notareu que la longitud total del cable és REALMENT LLARGA. Però no volia haver de tallar-ne cap si no ho necessitava. Vaig trobar (per a passos posteriors) problemes de comunicació amb l'USB entre el Raspberry i l'Arduino, probablement a causa del soroll EMI.. però he treballat amb el programari.

Si es converteix en un problema, podeu tallar els cables; també podeu comprar blindatge metàl·lic (d'Amazon, 1 de diàmetre).

Últim: això encara ho he de fer: tenir la configuració o sintonització automàtica de Roboclaw (mitjançant codificadors) perquè els motors laterals esquerre i dret es moguin a la mateixa velocitat i el robot vagi recte.

El meu corba molt lleugerament sobre uns 12 peus, però no és suficient per sentir la necessitat de fer-hi res.

Pas 3: Afegir i programar l'Arduino

Necessitareu l'endoll de canó i alguns cables, també un cable USB. Assegureu-vos que obtingueu el correcte per al connector Arduino.

Haureu de descarregar l’IDE Arduino.

Aquí, a Github, es mostra l’últim esbós que maneja la conducció del robot:

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

Connectareu l'Arduino a l'ordinador que executa l'IDE i, segons la forma en què s'escriu l'esbós, faríeu servir els pins 10 i 11 de l'Arduino per a comunicacions en sèrie (Software Serial) amb Roboclaw.

Vaig desenvolupar un protocol de comunicacions senzill entre el Raspberry Pi i l’Arduino.

Es basa en caràcters ASCII, cosa que facilita la depuració i la prova només mitjançant la finestra del "monitor serial" de l'IDE Arduino.

Les ordres comencen pel número "0" (zero) i només pugen si cal

Les ordres que comencen als "20" són ordres directes de Roboclaw, i les que estan per sota d'aquest nombre són ordres estrictament relacionades amb Arduino.

A causa del soroll EMI, vaig millorar la cadena d'ordres per incloure una suma de comprovació.

Per tant, qualsevol cadena inclourà:

# nombre de fitxes a la cadena inclosa aquesta

la suma de comprovació

Per exemple, diguem que voleu que Arduino respongui amb el seu menú d'ordres:

4 0 12 16

"4" són quatre fitxes en cadena.

"0" és l'ordre MENU.

"12" és el número aleatori que he triat.

"16" és la suma de 4 + 0 + 12.

La mateixa ordre MENU podria ser diferent:

4 0 20 24

Com que he escollit un número aleatori diferent, la suma de verificació també és diferent.

Per exemple, suposem que voleu avançar al 100% de velocitat:

5 29 0 134 100

"5" cinc fitxes

"29" l'ordre FORWARD

"0" el número aleatori

"134" la suma de comprovació

"100" el paràmetre 1 (la velocitat en aquest cas)

Si l'Arduino no pot verificar aquesta cadena entrant, simplement la deixa caure / ignora, sense resposta.

Si l'Arduino no rep una ordre de moviment següent amb X mil·lisegons, envia uns motors STOP al Roboclaw.

L'Arduino s'inicia i comença a enviar un estat automàtic al port USB … tret que se li digui que deixi de fer-ho.

En aquest moment, hauríeu d'estar preparats per provar de controlar el Roboclaw i veure com es giren els motors, només fent servir el "Monitor de sèrie" de l'IDE.

Pas 4: Afegir i programar el Raspberry Pi (node.js)

Una vegada més, si mireu la meva llista de reproducció de Robotics, fins i tot des del principi, he repassat tots els passos per posar en funcionament el gerd.

L'única cosa que podria haver analitzat és que necessitareu un regulador de 5V i, d'alguna manera, construireu, tallareu / modificareu un cable USB o bé alimentareu el gerd d'una altra manera.

A Github hi ha tot el que necessiteu al gerd per comunicar-vos amb l’Arduino mitjançant USB.

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

Fins i tot hi ha scripts de prova.

Podeu fer una ullada al codi del servidor node.js i veureu com el gerd converteix les instruccions numèriques concrets en cadenes d’URL de tipus REST. Podeu utilitzar "curl" per enviar ordres de prova.

Exemple:

la vostra adreça IP RP3: 8084 / arduino / api / forward / 50

farà que els motors facin girar momentàniament les rodes cap endavant.

Si poseu això en un bucle de script de shell, veureu que les rodes continuen girant.

El codi node.js (server.js) inclou una funció de reconnexió en cas que es perdin comunicacions serials a Arduino. Podeu provar-ho només desconnectant l'Arduino del gerd i torneu-lo a endollar.

Assegureu-vos que coincideixi amb la velocitat de transmissió en sèrie entre els dos.

A causa de que Arduino va deixar caure paquets de dades defectuosos i perquè a nivell de node.js i a nivell de javascript del navegador, tot està codificat per enviar moltes ordres de "unitat", he estat capaç d'executar fins a 2 000 000 de bauds (2 Mbps).

Si feu que s’executin els scripts de prova i veieu com les rodes giren, llavors esteu a punt per al següent pas.

Pas 5: pas final: programació / ús del client de la pàgina web

S'inclouen a l'enllaç Github a la part Raspberry de tot això els fitxers de client.

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

Manegen el Gamepad USB mitjançant l'API Gamepad (basat en navegador) i hauríeu de veure els diversos botons i control lliscants també disponibles a la pàgina web.

El codi javascript consulta (enquesta) els valors dels eixos X i Y per a un dels joysticks.. (depenent dels joysticks / gamepad que tingueu, potser haureu de modificar el codi). Enquesta molt ràpidament i dispara tots aquests valors al servidor node.js que escolta al 8084.

Els valors bruts de l'eix X i Y dels joysticks es troben entre 0 i 1.

Però la funció de biblioteca de controladors de motors Roboclaw que s’utilitza a l’Arduino per conduir els motors, espera un valor entre -100 a 0 (cap enrere) o (0 a 100) cap endavant.

Soo … aquest és el propòsit d'incloure p5.min.js. Simplement passa per tenir aquesta funció map () molt agradable i còmoda on li atorgueu el valor en brut, el rang en brut (actual) i el nou interval desitjat. I converteix el valor en brut en el valor del nou interval assignat.

Un altre punt: a 100 velocitats, el robot pot ser molt complicat. Em trobava constantment amb alguna cosa. Però, fins i tot a mesura que es millora, continua sent tàctil quan gira a l’esquerra o a la dreta.

Alguna cosa que heu d'afegir seria similar al control lliscant de velocitat màxima actual de la pàgina web. Aquest control lliscant determina quin és el valor màxim o màxim al qual assignareu els joysticks Xs i Ys.

Exemple:

Digueu que esteu assignant 0 -> 1 a 0 -> 100. Quan premeu el joystick al punt final, esteu a 100. Touchy. Pot ser massa ràpid.

Però, si llisqueu una mica el control lliscant de velocitat màxima, ara assignareu 0 -> 1 a 0 -> 80 o 70.

Això vol dir que teniu més marge de maniobra per moure el joystick sense que s'enviï un canvi tan gran en la velocitat al node.js (i a l'Arduino).

I, a més, podeu fer separar les X (girar a l'esquerra o a la dreta) de les Y (cap endavant o cap enrere) a les seves pròpies velocitats màximes disponibles.

Per tant, podeu deixar la Ys de 0 a 100, de 0 a -100 per a un moviment lineal ràpid, però baixar la velocitat màxima de Xs per obtenir un moviment de rotació més controlat. El millor dels dos mons.

Pas 6: opcional: condueix el robot amb arrossegament del ratolí i / o esdeveniments tàctils

Si heu arribat fins aquí, ja sabeu que les capes de programari que comencen des del navegador i passen pel Javascript fins al servidor Raspberry node.js, finalment a l’arduino, estan convertint el joystick del Gamepad en coordenades X i Y en el format " endavant "(o" enrere ", etc.) (i el seu valor de velocitat).

A més, ja sabeu que, tot i que les manetes X i Y de les palanques de control són negatives d'1 a zero, a més d'1, s'han de convertir entre zero i 100. Bé, el màxim depèn de la velocitat màxima configurada a la pàgina web.

Soo … l'únic que cal fer per utilitzar el ratolí o tocar esdeveniments (com en un telèfon intel·ligent) és capturar aquests esdeveniments, agafar les X i les Y.

PER ---- ---- aquestes Xs i Ys NO es troben entre l'1 i l'1 negatiu. Comencen a 0 i augmenten positivament, perquè són essencialment els píxels o les coordenades de pantalla relatives d'algun element HTML (com ara un tauler d'arrencada) o un llenç.

De nou, la funció "map ()" de la biblioteca Js de P5 és molt útil per tornar a mapar allò que necessitem.

Vaig reformar el codi per tenir dues pàgines web diferents, una per a ordinadors mitjançant el Gamepad, una altra per a mòbils, mitjançant els esdeveniments tàctils.

A més, un cop assignades les Xs i les Ys, s’introdueixen a la mateixa cadena de codi, etc., igual que les Xs i les Ys del Gamepad.

Recomanat: