Sommario:

Un robot 4WD guidato tramite gamepad USB remoto: 6 passaggi
Un robot 4WD guidato tramite gamepad USB remoto: 6 passaggi

Video: Un robot 4WD guidato tramite gamepad USB remoto: 6 passaggi

Video: Un robot 4WD guidato tramite gamepad USB remoto: 6 passaggi
Video: HO COSTRUITO UN ROBOT con Arduino! ELEGOO Smart Robot Car Kit V4.0 2024, Novembre
Anonim
Image
Image

Per il mio prossimo progetto di robotica, sono stato costretto ad architettare/progettare la mia piattaforma robotica a causa di circostanze impreviste.

L'obiettivo è renderlo autonomo, ma prima avevo bisogno di testare le sue capacità di guida di base, quindi ho pensato che sarebbe stato un divertente progetto parallelo comportarsi ed essere controllato come se fosse un veicolo RC (radiocomandato), ma usa invece un gamepad USB.

I risultati sono stati buoni o migliori di quanto mi aspettassi.

Il vantaggio di seguire la strada del Gamepad USB, con molta programmazione, è che posso personalizzarlo e aggiungere qualcosa a ciò che ho già fatto. Non ho alcuna esperienza reale nella costruzione di un veicolo RC, ma immagino che uno sia praticamente bloccato con qualunque sia il trasmettitore RC (joystick / pulsanti, ecc.)

Ad esempio, ho aggiunto un riconoscimento al fatto che il robot ha sbattuto contro un muro, semplicemente facendo in modo che il software rilevi correnti elevate e bassi valori di velocità dell'encoder.

Facoltativamente, si possono aggiungere alcune webcam USB al robot, a seconda di quante e della loro posizione, si può guidare il robot nella zona giorno e in un'altra stanza, mentre si è seduti da qualche altra parte davanti al computer a cui è collegato il gamepad USB esso.

Questo Instructable non sarà un vero e proprio how-to dettagliato, onnicomprensivo, ma cercherò di fornire il maggior numero di dettagli possibile.

Forniture

Parti suggerite: La maggior parte di questa l'ho ottenuta da Servo City (Actobotics).

2 - Canali a U da 13,5 , per i lati del telaio di base. I motori sono montati su questo. Sono andato con qualcosa di più corto e i miei motori sono montati proprio negli angoli, e ha reso difficile montarli.

Canali a U da 2 a 12 per la parte anteriore e posteriore del telaio di base.

2 - Canali a U da 15 per i paraurti, anteriore e posteriore

2 - 7 (o erano 7,5 ?) Canali a U per le colonne anteriori. Questo non è troppo critico, le lunghezze possono variare. Dipende da quanto sono alte le colonne posteriori e a quale altezza scegli di mettere le colonne angolate Canale a U che li collega.

2 - (lunghezza?) Canali a U per l'elemento angolato, dalla parte anteriore a quella posteriore, che collegano le colonne verticali. Questo è fondamentale, perché Servo City / Actobotics vende pannelli o staffe angolati a 45 gradi per questo scopo, ma dovrai fare alcuni calcoli / trigonometria per assicurarti di ottenere le lunghezze corrette.

2 - (lunghezza?) Canali a U per fungere da paraurti laterali di livello superiore, anche in questo caso dipendono da cosa fai con la base

2 - (lunghezza?) Canali a U per fungere da paraurti anteriore e posteriore di livello superiore, idem.

1 - (lunghezza?) Un canale a U per fungere da elemento più in alto, si estende attraverso le colonne posteriori. Questo potrebbe non essere troppo critico, dal momento che puoi montarlo sopra o davanti / dietro le colonne verticali.

12 (circa) L-canali o staffe. Questi servono a molteplici scopi ma essenzialmente forniscono integrità strutturale/resistenza agli angoli del telaio di base E delle colonne verticali.

4 (+?) canali piatti da 3 a 5 fori. Questi forniscono anche resistenza strutturale al robot.

ServoCity vende due tipi principali di pannelli piatti di grandi dimensioni, utili per l'utilizzo come skid-pan inferiore o superiore dove andrebbero la batteria e/o i controller, o anche come superficie superiore per i sensori.

C'è un pannello da 4 (4,5?) "X 12" e penso che l'altro sia un pannello da 9 (9,5?)" X 12.

Ora è qui che le cose si fanno interessanti e possono essere confuse e costose (piccole parti si sommano). Tutti i canali, ecc., possono essere collegati tra loro tramite questi pezzi di collegamento, di cui ve ne sono DIVERSI. Qui è dove mi dispiace non avere un elenco completo, dettagliato e specifico delle parti.

E il fatto è.. non sai davvero di quali potresti aver bisogno, o quanti.. perché ci sono così tanti modi in cui puoi mettere insieme questi pezzi.

Posso elencare quello che ho usato:

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

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

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

I seguenti due sono molto utili e farei scorta di questi:

www.servocity.com/single-screw-plate

www.servocity.com/dual-screw-plate

Il prossimo è tutte le viti (bulloni). Ho iniziato con un pacchetto di OGNI dimensione e ne ho esaminati la maggior parte. Ho usato viti più lunghe dove le dimensioni non avevano importanza e ho riservato quelle più corte per dove erano NECESSARI perché nessun'altra lunghezza avrebbe funzionato.

Infine, dovresti ottenere 1 busta di questi:

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

Non ne ho usati così tanti, ma (credo) sono fondamentali per assicurarti che i tuoi motori non vibrino allentati dal telaio nel tempo. Solo due funzionerebbero per motore, a causa del canale a U

Avrai bisogno di almeno 4 di questi, potresti prenderne uno in più nel caso in cui dovessi danneggiarne uno (fidati di me, potresti mettere / togliere i motori un paio di volte):

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

In genere, gli alberi dei motori sono 6 mm e gli assi sono 1/4 (0,25 pollici).

Vorrei prendere delle viti nere, presumibilmente più forti, e usarle per i morsetti sopra, e NON usare le viti fornite con i morsetti:

(Penso che questi siano quelli):

Cuscinetti diametro 4 - 1/4" (0,25")

1 - busta di distanziali neri da 1/4"

4 - Morsetti a D di bloccaggio

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

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

Ruote da 4 - 6 per carichi pesanti

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

Nota che adoro queste ruote ma hanno un bordo in gomma dura. Sembrano fare bene su pavimenti duri e moquette e probabilmente su camminate in cemento duro. Non andrà bene su erba, sabbia, ecc.

INOLTRE, tenderanno a macchiare il tuo tappeto!!!

4 - motori:

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

Sono andato con i 223 RPM, una buona velocità massima interna, inoltre potevo spostare il mio robot (pesante con 2 batterie SLA da 12 V) abbastanza facilmente al rallentatore.

2 - encoder motore per i motori. (Roboclaw di Servo City gestisce solo 2 codificatori)

1 - Controllore motore Roboclaw 2X45A, assicurati di prendere quello con le morsettiere verdi, non i pin…. beh… ognuno ha i suoi vantaggi. Col senno di poi.. potrei aver preso i pin.

Penso che sia da Servo City.

SparkFun vende Arduino Uno (è quello che ho usato) e anche Redboard Artemis come gestore di unità.

Avrai bisogno di un Raspberry Pi 3 (o 4?) Come "cervello" di alto livello e interfaccia con te.

Avrai bisogno di cavi, interruttori, fusibili e un diodo "flyback" molto robusto.

Ho usato una batteria SLA Duracell 12V 14AH a ciclo profondo, ma puoi usare qualunque cosa.

AVVERTIMENTO! Il design di questo robot (ALTO e LARGO, ma CORTO), presuppone una sorta di baricentro pesante, come fornirebbe una batteria SLA. Potrebbe non funzionare bene con quegli altri tipi di batterie di nuova tecnologia. LiPo, Lion, ecc. Potrebbe ribaltarsi facilmente.

Da Pololu ho preso alcuni adattatori per spine a botte, in modo da poter alimentare autonomamente Arduino e/o la Redboard, anche se sarebbero stati collegati al Raspberry tramite USB, perché non volevo fare affidamento sulla potenza del Raspberry. (Soprattutto montaggio di telecamere, sensori, ecc.)

Avrai bisogno di un regolatore di tensione step-down da 12 a 5 V, minimo 5 A (?) Per il Raspberry. Gli altri possono gestire qualsiasi cosa tra 7 e 15 V, quindi direttamente alla batteria SLA.

Questo è tutto per le parti.

Cosa NON farei: ingranaggi conici a 90 gradi.

Ancora una volta, ci sono molti video nella mia playlist di youtube Robotics che descrivono in dettaglio la maggior parte di quanto sopra.

Passaggio 1: costruzione

Francamente, tutti i miei passaggi di costruzione sono già sotto forma di YouTube. Puoi vederli nella mia playlist Robotics, a partire da "Wallace Robot 4". Anche i precedenti (Wallace II, Wallace III) hanno un buon materiale

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

Passaggio 2: testare il Roboclaw, i motori e gli encoder

I produttori di Roboclaw (BasicMicro) hanno un'applicazione Windows che puoi usare per assicurarti di aver cablato correttamente i motori e gli encoder al Roboclaw. Collegherai motori dello stesso lato in parallelo al Roboclaw. Puoi scegliere di utilizzare i cavi dell'encoder, solo sui motori posteriori, o sui motori anteriori, o forse anche meglio -- IN DIAGONALE.

Il motivo del mio suggerimento ha a che fare con (successivamente) il controllo di un robot bloccato. Avere uno stato in diagonale se le ruote anteriori/posteriori stanno/non stanno girando potrebbe essere meglio che solo quelle anteriori o solo quelle posteriori.

NOTA: quello che NON ho fatto è usare Arduino per connettere anche (tramite i pin GPIO) agli encoder - se lo facessi, potresti fare in modo che Roboclaw gestisca 2 encoder, e poi Arduino gestisca gli altri due, e solo interrogare il Roboclaw per i suoi due valori dell'encoder (e velocità).

NOTA: ho usato l'applicazione di BasicMicro per preconfigurare il Roboclaw per la rampa di salita/discesa. Questo è utile per proteggere l'hardware e l'elettronica. C'è un video a riguardo nella mia playlist Robotics.

Quasi dimenticavo: ho comprato anche dei cavi bullet-connector che vanno tra i cavi del motore, e il Roboclaw. NOTA: se lo fai, noterai che la lunghezza totale del cavo è DAVVERO LUNGA. Ma non volevo doverne tagliare se non ne avevo bisogno. Ho riscontrato (per i passaggi successivi) problemi di comunicazione con l'USB tra Raspberry e Arduino, probabilmente a causa del rumore EMI.. ma ho risolto il problema con il software.

Se diventa un problema, puoi tagliare i fili - puoi anche acquistare schermatura metallica (da Amazon, diametro 1 ).

Ultima cosa: questo devo ancora farlo --- configurare il Roboclaw in modo automatico o sintonizzarlo automaticamente (usando gli encoder) in modo che entrambi i motori sinistro e destro si muovano alla stessa velocità e il robot vada dritto.

Il mio si curva leggermente su circa 12 piedi, ma non abbastanza da farmi sentire il bisogno di fare qualcosa al riguardo.

Passaggio 3: aggiunta e programmazione di Arduino

Avrai bisogno della spina cilindrica e del cablaggio, anche un cavo USB. Assicurati di ottenere quello corretto per il connettore Arduino.

Dovrai scaricare l'IDE di Arduino.

Qui a Github c'è l'ultimo schizzo che gestisce la guida del robot:

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

Collegherai Arduino al tuo computer che esegue l'IDE e, in base a come è scritto lo sketch, utilizzerai i pin 10 e 11 su Arduino per le comunicazioni seriali (Software Serial) con Roboclaw.

Ho sviluppato un semplice protocollo di comunicazione tra Raspberry Pi e Arduino.

È basato su caratteri ASCII, il che semplifica il debug e il test semplicemente utilizzando la finestra "monitoraggio seriale" dell'IDE di Arduino.

I comandi iniziano dal numero "0" (zero) e salgono solo se necessario

I comandi che iniziano con gli "20" sono comandi Roboclaw diretti e quelli sotto quel numero sono comandi strettamente correlati ad Arduino.

A causa del rumore EMI, ho migliorato la stringa di comando per includere un checksum.

Quindi, qualsiasi stringa includerà:

# numero di token nella stringa incluso questo

il checksum

Esempio, supponiamo che tu voglia che Arduino risponda con il suo menu di comandi:

4 0 12 16

"4" sono quattro token in una stringa.

"0" è il comando del MENU.

"12" è il numero casuale che ho scelto.

"16" è la somma di 4 + 0 + 12.

Lo stesso comando MENU potrebbe essere diverso:

4 0 20 24

Poiché ho scelto un numero casuale diverso, anche il checksum è diverso.

Esempio, supponiamo che tu voglia andare avanti al 100% di velocità:

5 29 0 134 100

"5" cinque gettoni

"29" il comando AVANTI

"0" il numero casuale

"134" il checksum

"100" il parametro 1 (la velocità in questo caso)

Se Arduino non può verificare quella stringa in arrivo, la rilascia/la ignora, nessuna risposta.

Se Arduino non riceve un comando di movimento successivo con X millisecondi, invia uno STOP motori al Roboclaw.

L'Arduino si avvia e inizia a inviare uno stato automatico alla porta USB … a meno che non venga detto di smettere di farlo.

A questo punto dovresti essere pronto per provare a controllare il Roboclaw e guardare i motori girare, semplicemente usando il "Monitor seriale" sull'IDE.

Passaggio 4: aggiunta e programmazione del Raspberry Pi (node.js)

Ancora una volta, se dai un'occhiata alla mia playlist Robotics, anche dall'inizio, ho seguito ogni passo per far funzionare il Raspberry.

L'unica cosa su cui potrei aver sorvolato è che avrai bisogno di un regolatore da 5 V, e in qualche modo costruire, tagliare / modificare un cavo USB per questo o alimentare il Raspberry in un altro modo.

Qui a Github c'è tutto ciò di cui hai bisogno nel Raspberry per comunicare con Arduino tramite USB.

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

Ci sono anche script di prova.

Puoi dare un'occhiata al codice del server node.js e vedrai come il Raspberry converte le istruzioni numeriche concise, in stringhe di URL di tipo REST. Puoi usare "curl" per inviare comandi di prova.

Esempio:

il tuo indirizzo IP RP3:8084/arduino/api/forward/50

farà sì che i motori ruotino momentaneamente le ruote in avanti.

Se lo metti in un ciclo di script della shell, vedresti che le ruote continuano a girare.

Il codice node.js (server.js) include una funzione di riconnessione nel caso in cui le comunicazioni seriali vengano perse su Arduino. Puoi testarlo semplicemente scollegando Arduino dal Raspberry e ricollegandolo.

Assicurati di far corrispondere la velocità di trasmissione seriale tra i due.

A causa dell'abbandono da parte di Arduino di pacchetti di dati errati e poiché a livello di node.js e a livello di javascript del browser, tutto è codificato per inviare molti comandi "drive", sono stato in grado di eseguire fino a 2 000 000 baud (2Mbps).

Se riesci a eseguire gli script di test e vedi le ruote girare, sei pronto per il passaggio successivo.

Passaggio 5: Passaggio finale - Programmazione / Utilizzo del client della pagina Web

Inclusi nel collegamento Github alla parte Raspberry di tutto questo, ci sono i file client.

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

Gestiscono il Gamepad USB tramite l'API Gamepad (basata su browser) e dovresti vedere i vari pulsanti e cursori disponibili anche sulla pagina web.

Il codice javascript interroga (sonda) i valori degli assi X e Y per uno dei joystick.. (a seconda di quali joystick/gamepad possiedi, potresti dover modificare il codice). Esegue il polling molto rapidamente e invia tutti quei valori al server node.js in ascolto su 8084.

I valori grezzi degli assi X e Y dei joystick sono compresi tra 0 e 1.

Ma la funzione della libreria del controller del motore Roboclaw utilizzata in Arduino per azionare i motori, prevede un valore compreso tra -100 e 0 (indietro) o (da 0 a 100) in avanti.

Quindi…. questo è lo scopo di includere il p5.min.js. Capita solo di avere questa funzione map() molto bella e conveniente in cui gli dai il valore grezzo, è l'intervallo grezzo (corrente) e il nuovo intervallo desiderato. E converte il valore grezzo nel valore nel nuovo intervallo mappato.

Un altro punto: a velocità 100, il robot può essere molto complicato. Mi imbattevo costantemente in qualcosa. Ma anche se migliori in questo, è ancora permaloso quando si ruota a sinistra oa destra.

Qualcosa da aggiungere sarebbe simile all'attuale cursore Velocità massima sulla pagina web. Quel cursore determina qual è il valore più alto o massimo a cui verranno mappati i joystick Xs e Ys.

Esempio:

Diciamo che stai mappando da 0 -> 1 a 0 -> 100. Quando premi il joystick completamente, sei a 100. Permaloso. Potrebbe essere troppo veloce.

Ma se fai scorrere indietro un po' il cursore Max Speed, ora stai mappando da 0 -> 1 a 0 -> 80 o 70.

Ciò significa che hai più margine di manovra per muovere il tuo joystick senza che un cambiamento così grande nella velocità venga inviato al node.js (e all'Arduino).

E l'aggiunta che potresti fare è separare le X (ruota a sinistra o a destra) dalle Y (avanti o indietro) nelle loro velocità massime disponibili.

Pertanto, è possibile lasciare Ys da 0 a 100, da 0 a -100 per un movimento lineare veloce, ma abbassare la velocità massima di Xs per un movimento rotatorio più controllato. Il meglio di entrambi i mondi.

Passaggio 6: Opzionale: guida il robot con il trascinamento del mouse e/o gli eventi di tocco

Se sei arrivato fino a questo punto, sai che i livelli del software partendo dal browser e passando attraverso Javascript e fino al server Raspberry node.js, infine all'arduino, stanno convertendo le coordinate X e Y del joystick del Gamepad in " comandi avanti" (o "indietro", ecc.) (e il loro valore di velocità).

Inoltre, sai che mentre le X e le Y dei joystick sono negative da 1, a zero, a più 1, queste devono essere convertite tra zero e 100. Bene, il massimo dipende dall'impostazione della velocità massima sulla pagina web.

Quindi… l'unica cosa da fare per usare il mouse o toccare gli eventi (come su uno smartphone) è catturare quegli eventi, afferrare le X e le Y.

MA ---- quelle X e Y NON sono comprese tra 1 e 1 negativo. Iniziano da 0 e aumentano positivamente, perché sono essenzialmente i pixel o le coordinate relative dello schermo di qualche elemento HTML (come un pannello di bootstrap) o un canvas.

Quindi, di nuovo, la funzione "map()" della libreria Js di P5 è molto utile per rimappare a ciò di cui abbiamo bisogno.

Ho rifatto il codice per avere due pagine Web diverse, una per desktop utilizzando il Gamepad, un'altra per dispositivi mobili, utilizzando gli eventi touch.

Inoltre, una volta che le X e le Y sono state rimappate, vengono inserite nella stessa catena di codice, ecc., così come le X e le Y dal Gamepad.

Consigliato: