Sommario:

Costruisci la tua auto a guida autonoma - (questo manuale è in lavorazione): 7 passaggi
Costruisci la tua auto a guida autonoma - (questo manuale è in lavorazione): 7 passaggi

Video: Costruisci la tua auto a guida autonoma - (questo manuale è in lavorazione): 7 passaggi

Video: Costruisci la tua auto a guida autonoma - (questo manuale è in lavorazione): 7 passaggi
Video: Paky mi fa spaventare 🚔 2024, Dicembre
Anonim
Image
Image

Ciao, Se dai un'occhiata al mio altro Instructable on Drive Robot With Remote USB Gamepad, questo progetto è simile, ma su scala ridotta. Puoi anche seguire o ottenere aiuto o ispirazione dalle playlist Robotica, Riconoscimento vocale fatto in casa o Auto a guida autonoma su Youtube.

Ho iniziato con il grande robot (Wallace 4), ma da quando ho fondato un gruppo Meetup locale, avevo bisogno di qualcosa su scala più piccola e il gruppo era molto interessato alla visione artificiale.

Così mi sono imbattuto in questo corso Udemy: Costruisci la tua auto a guida autonoma che mi ha dato l'idea per questo progetto.

Se sei interessato al corso Udemy, puoi continuare a controllare di nuovo lì; va in vendita per un enorme sconto di volta in volta. Nota: c'è la Parte 1 e la Parte 2 - devi fare qualche indagine su come ottenere i due corsi come pacchetto (scontato).

Lo scopo di questo istruibile è duplice. Innanzitutto, fornire alcuni suggerimenti e alternative a determinate parti del corso (come le parti e l'hardware). E in secondo luogo, per espandere il corso.

Lo scopo principale del corso Udemy:

è riuscire a far guidare da sé una piccola auto robotica su una strada a due corsie in scala ridotta.

Deve riconoscere le strisce di corsia e quando ha raggiunto la fine della strada.

Deve riconoscere un segnale di stop (e stop).

Inoltre, un segnale stradale ROSSO e VERDE.

Deve anche riconoscere e aggirare un ostacolo (un'altra macchina).

Cosa aggiunge questo Instructable al corso:

Guida la macchinina con un gamepad USB remoto, più o meno allo stesso modo di quest'altro Instructable.

Fornisci alcune alternative a ciò che offre il corso.

Potresti anche non dover acquistare il corso:

Questo Instructable potrebbe essere tutto ciò di cui hai bisogno per iniziare.

Forniture

Le parti essenziali (suggerite):

Un telaio per robot

Quattro motori

Arduino

Lampone Pi (3, 3B+, 4)

Fotocamera (Webcam USB o modulo Picamera)

Carica batteria

Interruttori di accensione/spegnimento

cavi per ponticelli

distanziatori (in plastica e forse anche in metallo)

Si prega di rivedere l'intero Instructable e anche i video prima di tentare di acquistare parti.

Dopo aver realizzato questo progetto, mi rendo conto che le parti esatte non sono così critiche.

Passaggio 1: maggiori dettagli sulle parti…

Image
Image
Maggiori dettagli sulle parti…
Maggiori dettagli sulle parti…
Maggiori dettagli sulle parti…
Maggiori dettagli sulle parti…

Il video associato fornisce alcuni dettagli sulle parti e su alcuni problemi che ho riscontrato.

  • Cerca in giro diversi telai / motori
  • I motori dovrebbero già avere i fili saldati ad essi
  • Potresti voler avere un trapano e punte da trapano, OPPURE un telaio con più fori
  • Tieni presente che il peso è un problema. Tutto dovrebbe essere il più leggero possibile.
  • Il driver del motore L298 H-Bridge funziona alla grande. NOTA: procuratene uno con le morsettiere a vite (vedi foto)
  • Probabilmente vorrai sia di plastica che di metallo, la taglia M3 è probabilmente la scelta migliore.

I distanziatori in plastica sono utili per montare le schede sullo chassis (driver del motore, Arduino, Raspberry, scheda di alimentazione, interruttore on/off, ecc.).

I distanziatori in metallo sono utili per l'assemblaggio del telaio (resistenza) e anche soprattutto durante lo sviluppo (programmazione, test). Per lo sviluppo, i distanziatori in metallo possono fungere da trampoli. Proprio come se stessi lavorando su un'auto vera, vuoi sollevare l'auto in modo che le ruote siano in aria e possano muoversi liberamente. Questo è molto importante! Farai errori e non vorrai che l'auto decolli e si schianti.

Trapano + punte da trapano

Voglio davvero sottolineare l'uso di un trapano, se puoi, e l'uso di distanziatori invece del nastro biadesivo. Molto probabilmente finirai per rimuovere e riposizionare le tue schede, ecc., più volte durante questo progetto, e l'uso del nastro diventa molto disordinato.

L'uso di un trapano lo rende molto facile da riposizionare (soprattutto se il telaio è di plastica) e ha un aspetto più professionale.

Passaggio 2: alimentazione dell'auto durante lo sviluppo

Alimentare l'auto durante lo sviluppo
Alimentare l'auto durante lo sviluppo
Alimentare l'auto durante lo sviluppo
Alimentare l'auto durante lo sviluppo

Secondo me, il modo più semplice e veloce per iniziare con questo progetto è:

  • per lo sviluppo di sketch software Arduino, basta collegare Arduino al computer tramite USB
  • per il software Raspberry Pi, dovresti avere un'alimentazione USB 5V in grado di fornire almeno 3 Ampere. E dovrebbe avere un interruttore on/off. A meno che tu non abbia un buon hub USB alimentato collegato al tuo computer, probabilmente non sarai in grado di alimentare il Raspberry direttamente dal tuo computer.
  • Per quando sei pronto per testare i motori/ruote, il modo più semplice è (vedi foto) un buon alimentatore. Tuttavia, quelli non sono economici.

Il mio punto con questa sezione è dire che non vuoi utilizzare la batteria durante lo sviluppo, perché ciò rallenterà notevolmente i tuoi progressi.

Inoltre, facendo qualcosa di simile ai suggerimenti di cui sopra, non devi preoccuparti (ancora) di come alimenterai esattamente l'auto. Puoi rimandare quella decisione per una fase successiva del progetto.

Passaggio 3: alimentazione dell'auto durante l'uso effettivo

Alimentazione dell'auto durante l'uso effettivo
Alimentazione dell'auto durante l'uso effettivo
Alimentazione dell'auto durante l'uso effettivo
Alimentazione dell'auto durante l'uso effettivo

Se decidi di seguire il corso (o quello che ho fatto io) per l'alimentazione a 5V alla logica, tieni presente che non tutti i powerbank USB da 5V sono adatti a questo progetto.

Il punto principale qui è che hai bisogno di 5V ma hai bisogno di almeno 3 Ampere! Pensala in questo modo: vuoi un powerbank che alimenterà un computer portatile (forse).

Se vivi negli Stati Uniti, penso che uno dei modi migliori per farlo sia acquistare da Best Buy. Come mai? A causa della loro politica di rimborso di 14 giorni per i resi.

In realtà ho dovuto provare tre diversi powerbank prima di trovarne uno che funzionasse. Gli altri fanno sì che il Raspberry Pi si lamenti di sottotensione.

Avevo iniziato con il powerbank meno costoso e ho continuato a provare il modello successivo (che costava di più), finché non ne ho trovato uno che funzionasse.

Come alimentare Arduino

Nel corso Udemy, l'autore ha scelto di alimentare Arduino direttamente dal powerbank (tramite un pcb personalizzato da lui stesso realizzato) e ha utilizzato i pin di alimentazione sul connettore GPIO dell'Arduino.

Io, invece, ho scelto di alimentare l'Arduino direttamente dal Raspberry Pi, tramite il cavo USB.

Dovrai decidere quale è meglio.

Come alimentare i motori/driver del motore

Nel corso Udemy, l'autore ha scelto di alimentare i motori/driver direttamente dal powerbank 5V. Ci sono due considerazioni se usi questo approccio.

  1. Quando i motori iniziano a girare, assorbono più corrente. Ciò può (farà in modo che la tensione di alimentazione si abbassi (diminuisca) al di sotto di 5 V e provochi il ripristino del Raspberry.
  2. Usare solo 5 V per alimentare i motori significa che non stai fornendo tutta la potenza che potresti ai motori e l'auto si muoverà più lentamente (più lenta). Ho testato i motori (con quell'alimentazione) (vedi foto) ad almeno 9V. Funzionano bene a 9V.

Osservazioni circa 9V (o più)

Se hai dato un'occhiata a tutte le foto e i video di questo Instructable, hai notato che ho assemblato un PCB personalizzato per creare la mia fonte di alimentazione da 9V. Ho imparato alcune cose lungo la strada.

In questo momento sto usando diverse (3) celle della batteria da 9 V in parallelo, per alimentare i motori. Ho usato sia batterie alcaline che NiMH ricaricabili.

Esperienza di apprendimento n. 1: Ci vuole molto tempo (molte ore) per caricare correttamente le batterie NiMH 9V.

Possibile soluzione: investire in un caricabatterie NiMH multi-batteria. Dovrebbe essere un caricabatterie "intelligente".

Svantaggio: non sono economici.

Esperienza di apprendimento n. 2: le batterie da 9 V sono in realtà costituite da diverse piccole celle interne. Se una di quelle celle muore, l'intera batteria è inutile. NON ho avuto questo problema, ma ne ho letto.

Esperienza di apprendimento n. 3: non tutte le batterie da 9 V hanno lo stesso voltaggio. Questo è importante. Perché maggiore è la tensione, maggiore è la velocità possibile. Alcune celle della batteria (e caricabatterie) sono solo 8,4 V. Alcuni anche meno. Alcuni sono 9.6V.

Esperienza di apprendimento n. 4: le batterie da 9 V, in particolare quelle NiMH, sono leggere. Una buona cosa. Tuttavia, la maggior parte di essi fornisce solo mA di corrente di uscita. Ecco perché ho dovuto metterli in parallelo. Hai bisogno di una capacità di corrente totale di quasi 2 Ampere, anche per brevi periodi di tempo.

Esperienza di apprendimento n. 5: esistono pacchi batteria da 9,6 V, utilizzati per cose come le auto radiocomandate. Non ne ho ancora usato uno, ma credo che forniscano più corrente rispetto alle batterie parallele da 9 V come ho fatto io. Inoltre, puoi caricare la singola unità. Le confezioni sono di diverse dimensioni. E c'è una considerazione di peso. E poi, usi il pacco per alimentare l'intera macchina o solo i motori? Se per l'intera auto, avrai bisogno di un regolatore step-down da 5 V per il Raspberry Pi.

L'H-Bridge L298 ha la capacità di emettere 5V per questo scopo, ma sono preoccupato per quanta corrente può produrre per il Raspberry Pi e se sarà troppo carico sulla scheda L298.

Se decidi di avere due fonti di alimentazione separate, potresti avere un problema di peso (troppo pesante).

Passaggio 4: programmazione software per la guida con gamepad

Penso di aver già trattato gran parte di questa sezione nel Robot Driven Via Remote USB Gamepad Instructable, quindi non lo ripeterò qui.

Le sezioni di programmazione/software in quell'altro Instructable sono solo dei suggerimenti. Penso che si impari di più per tentativi ed errori.

Passaggio 5: aggiunta di una fotocamera

Aggiunta di una fotocamera
Aggiunta di una fotocamera
Aggiunta di una fotocamera
Aggiunta di una fotocamera
Aggiunta di una fotocamera
Aggiunta di una fotocamera

Nel corso Udemy, credo che l'autore usi tasselli di legno rotondi e una pistola per colla per costruire un modo per elevare la fotocamera.

Dovrai sollevare la telecamera in modo che guardi in basso sulla strada a due corsie, in modo che possa riconoscere più facilmente le corsie.

Dove vivo negli Stati Uniti, i tasselli di legno erano molto economici. Puoi acquistarli da Lowe's o da Home Depot. Ho scelto tasselli quadrati invece di tasselli rotondi.

Ho anche scelto di creare una base più robusta per la torre della fotocamera e ho reso l'intera torre rimovibile dall'auto, in modo da poterci giocare e sperimentare quale sia la posizione migliore per essa sull'auto.

Inoltre, ho realizzato la torre con l'idea che inizierò con una webcam USB, ma forse in seguito passerò all'utilizzo del modulo Picamera.

Potresti voler investire in una fotocamera di tipo fish-eye.

Ho comprato una pistola per colla a caldo molto economica, ma volevo rinforzare meglio la base della torre, quindi ho preforato alcuni fori per le viti e ho aggiunto delle viti per tenere tutto insieme meglio.

Poi ho imbullonato la base al telaio dell'auto.

Se in seguito voglio spostare le cose, sblocco la base dal telaio, faccio nuovi fori nella nuova posizione del telaio e riavvito la torre sul telaio.

Ho portato il codice Python e Node.js "follow-me" dal grande robot (Wallace Robot 4) come un modo per testare tutto. Si prega di vedere le foto in questa sezione per l'elenco di YouTube che danno molti più dettagli su "follow-me".

Come ho detto, è stato più facile montare prima una webcam USB. Successivamente posso montare il modulo Picamera.

Passaggio 6: riconoscimento facciale - Determinazione della posizione

Image
Image

Questa parte non è il fulcro del corso Udemy, ma è stato un esercizio divertente.

Se fai qualche ricerca sul web per "riconoscimento facciale python opencv", troverai molti buoni esempi su come farlo, e tutti seguono praticamente gli stessi passaggi.

  1. carica il file del viso "haar"
  2. inizializzare la fotocamera
  3. inizia un ciclo in cui prendi un fotogramma
  4. convertire l'immagine a colori in scala di grigi
  5. dargli da mangiare all'opencv per fargli trovare il/i volto/i
  6. avvia un ciclo interno (per ogni faccia trovata) (nel mio caso, aggiungo codice per interrompere se più di 1 faccia)

A tal fine qui, una volta individuato un volto, conosciamo le X, Y, W e H del quadrato immaginario che delinea il volto.

Se vuoi che il robot si muova avanti o indietro, devi solo considerare W. Se W è troppo grande (troppo vicino), fai in modo che il robot si sposti indietro. Se W è troppo piccolo (troppo lontano), fai avanzare il robot.

Il movimento sinistra/destra è solo un po' più complicato ma non folle. Dai un'occhiata all'immagine di questa sezione che spiega come determinare la posizione del viso sinistro rispetto a quello destro.

NOTA:

Se esegui uno degli esempi OpenCV web, tutti mostrano la vista effettiva di ciò che opencv sta "vedendo", con la faccia delineata in un quadrato. Se osserverai, quel quadrato non è stabile (costante), anche se non ti muovi.

Questi valori che cambiano farebbero sì che il robot sia costantemente in movimento, avanti o indietro, a sinistra oa destra.

Pertanto, dovrai avere una sorta di delta sia per avanti/indietro che per sinistra/destra.

Prendiamo sinistra vs destra:

Dopo aver calcolato sinistra e destra, ottieni la differenza (delta):

delta = abs (sinistra - destra)

Devi prendere l'assoluto perché non sai quale sarà il numero più grande.

Quindi aggiungi del codice condizionale per tentare di spostare solo se il delta è maggiore di un minimo.

Faresti la stessa cosa per avanti vs indietro.

Passaggio 7: posizione del viso - Robot in movimento

Una volta che sai che hai bisogno che il robot si muova a sinistra oa destra, avanti o indietro, come fai?

Poiché questo Instructable è un work in process, al momento, ho appena copiato il codice dal mio grande robot da utilizzare per questo progetto. Dai un'occhiata alla mia playlist Robotics su youtube dove descrive tutto questo.

In breve, ho il codice a strati.

Lo script di riconoscimento facciale Python effettua richieste http al server Node.js

Il server Node.js ascolta le richieste http per le direzioni di spostamento, le converte in un protocollo seriale personalizzato

Protocollo seriale personalizzato tra il server Node.js e Arduino

Schizzo Arduino che esegue i comandi effettivi per spostare il robot

Il corso Udemy non lo fa come sopra. Ma poiché volevo fare buoni progressi e concentrarmi sull'effettivo riconoscimento delle immagini, per ora ho riutilizzato il mio codice precedente.

Consigliato: