Sommario:

L'intelligenza artificiale nel robot labirinto LEGO EV3: 13 passaggi
L'intelligenza artificiale nel robot labirinto LEGO EV3: 13 passaggi

Video: L'intelligenza artificiale nel robot labirinto LEGO EV3: 13 passaggi

Video: L'intelligenza artificiale nel robot labirinto LEGO EV3: 13 passaggi
Video: Using ArcuCodes with a Robot AI vision sensor to select a path in a maze 2024, Luglio
Anonim
Image
Image
Come si risolve un labirinto
Come si risolve un labirinto

Questo è un robot semplice e autonomo con una certa intelligenza artificiale. È progettato per esplorare un labirinto e quando viene riposto all'ingresso, per guidare fino all'uscita ed evitare i vicoli ciechi. È molto più complicato del mio progetto precedente, che ha semplicemente attraversato il labirinto. Qui, il robot deve ricordare il percorso che ha percorso, rimuovere i vicoli ciechi, memorizzare il nuovo percorso e quindi seguire il nuovo percorso.

Il mio robot precedente è descritto qui:

Il robot è costruito utilizzando LEGO Mindstorms EV3. Il software EV3 viene eseguito su un computer e genera un programma, che viene quindi scaricato su un microcontrollore chiamato EV3 Brick. Il metodo di programmazione è basato su icone e di alto livello. È molto facile e versatile.

Forniture

PARTI

  1. Set LEGO Mindstorms EV3
  2. Sensore a ultrasuoni LEGO Mindstorms EV3. Non è incluso nel set EV3.
  3. Cartone ondulato per il labirinto. Due cartoni dovrebbero essere sufficienti.
  4. Un piccolo pezzo di cartone sottile per aiutare a stabilizzare alcuni angoli e pareti.
  5. Colla e nastro adesivo per unire i pezzi di cartone.
  6. Una busta rossa per biglietti d'auguri per identificare l'uscita dal labirinto.

UTENSILI

  1. Coltello multiuso per tagliare il cartone.
  2. Righello in acciaio per facilitare il processo di taglio.

SOFTWARE

Il programma è qui:

Passaggio 1: come viene risolto un labirinto

METODO DI GUIDA DEL LABIRINTO

Esistono diversi metodi per navigare in un labirinto. Se sei interessato a studiarli, sono descritti molto bene nel seguente articolo di Wikipedia:

Ho scelto il metodo seguendo il muro di sinistra. L'idea è che il robot manterrà un muro sul lato sinistro prendendo le seguenti decisioni mentre attraversa il labirinto:

  1. Se è possibile svoltare a sinistra, fallo.
  2. Altrimenti, vai dritto se possibile.
  3. Se non può andare a sinistra o dritto, gira a destra, se possibile.
  4. Se nessuno dei precedenti è possibile, questo deve essere un vicolo cieco. Girarsi.

Un avvertimento è che il metodo potrebbe fallire se il labirinto contiene un loop. A seconda della posizione dell'anello, il robot potrebbe continuare a girare intorno all'anello. Una possibile soluzione a questo problema sarebbe che il robot passasse alla regola del seguace del muro di destra se si rendesse conto che stava andando in loop. Non ho incluso questo perfezionamento nel mio progetto.

RISOLVERE IL LABIRINTO PER TROVARE UN PERCORSO DIRETTO

Durante la guida attraverso il labirinto, il robot deve memorizzare il percorso che sta percorrendo ed eliminare i vicoli ciechi. Lo fa memorizzando ogni svolta e intersezione in una matrice, controllando combinazioni specifiche di svolte e intersezioni mentre procede e sostituendo le combinazioni che includono un vicolo cieco. L'elenco finale di svolte e incroci è il percorso diretto attraverso il labirinto.

Le possibili svolte sono: Sinistra, Destra, Indietro (in un vicolo cieco) e Dritto (che è un'intersezione).

Le combinazioni sono sostituite come segue:

  • "Sinistra, Indietro, Sinistra" diventa "Dritto".
  • "Sinistra, Indietro, Destra" diventa "Indietro".
  • "Sinistra, Indietro, Dritto" diventa "Destra".
  • "Destra, Indietro, Sinistra" diventa "Indietro".
  • "Dritto, Indietro, Sinistra" diventa "Destra".
  • "Dritto, indietro, dritto" diventa "indietro".

COME IL ROBOT GESTISCE IL MIO LABIRINTO

  1. Quando il robot inizia a guidare, vede uno spazio a destra e memorizza Straight nell'elenco nell'array.
  2. Quindi gira a sinistra e aggiunge Sinistra all'elenco. L'elenco ora contiene: Dritto, Sinistra.
  3. Con un vicolo cieco, si gira e aggiunge Back alla lista. L'elenco ora contiene: Dritto, Sinistra, Indietro.
  4. Superando la corsia utilizzata dall'ingresso, aggiunge Dritto all'elenco. L'elenco ora contiene: Dritto, Sinistra, Indietro, Dritto. Riconosce una combinazione e cambia Sinistra, Indietro, Dritto a Destra. L'elenco ora contiene Dritto, Destra.
  5. Con un vicolo cieco, si gira e aggiunge Back alla lista. L'elenco ora contiene: Dritto, Destra, Indietro.
  6. Dopo la svolta a sinistra l'elenco contiene Dritto, Destra, Indietro, Sinistra. Riconosce una combinazione e cambia Destra, Indietro, Sinistra in Indietro. L'elenco ora contiene Dritto, Indietro.
  7. Dopo la prossima svolta a sinistra l'elenco contiene Dritto, Indietro, Sinistra. Cambia quella combinazione in Destra. L'elenco ora contiene solo Right.
  8. Passa uno spazio e aggiunge Straight alla lista. L'elenco ora contiene Destra, Dritta.
  9. Dopo la svolta a destra l'elenco contiene Destra, Dritto, Destra che è il percorso diretto.

Fase 2: Considerazioni sulla programmazione del robot

CONSIDERAZIONI PER QUALSIASI MICROCONTROLLORE

Quando il robot decide di svoltare, dovrebbe compiere un'ampia virata, oppure avanzare per un breve tratto prima di svoltare e dopo aver svoltato procedere nuovamente per un breve tratto senza controllare il sensore. Il motivo della prima breve distanza è che il robot non dovrebbe urtare il muro dopo la svolta, e il motivo della seconda breve distanza è che dopo che il robot si è girato, il sensore vedrebbe lo spazio lungo da cui è appena arrivato, e il robot penserebbe di dover girare di nuovo, il che non è la cosa giusta da fare.

Quando il robot rileva un'intersezione a destra ma non è una svolta a destra, ho scoperto che è opportuno che il robot guidi in avanti di circa 10 pollici (25 cm) senza controllare i suoi sensori.

CONSIDERAZIONI SPECIFICHE PER LEGO MINDSTORMS EV3

Sebbene LEGO Mindstorms EV3 sia molto versatile, non consente più di un sensore di ogni tipo collegato a un mattoncino. Due o più mattoncini potevano essere collegati a margherita, ma non volevo acquistare un altro mattoncino, quindi ho utilizzato i seguenti sensori (invece di tre sensori a ultrasuoni): sensore a infrarossi, sensore di colore e sensore a ultrasuoni. Questo ha funzionato bene.

Ma il sensore di colore ha una portata molto corta, di circa 2 pollici (5 cm), che porta ad alcune considerazioni speciali come descritto di seguito:

  1. Quando il sensore di colore rileva un muro di fronte e il robot decide di girare a destra o girarsi, dovrebbe prima tornare indietro, in modo da darsi abbastanza spazio per girare senza sbattere contro il muro.
  2. Un problema complicato si verifica con alcune intersezioni "dritte". A causa della portata ridotta del sensore di colore, il robot non è in grado di determinare se rileva un'intersezione "Diritta" corretta o l'avvicinamento a una svolta a destra. Ho provato a risolvere questo problema impostando il programma in modo che memorizzi un "Dritto" nell'elenco ogni volta che il robot ne rileva uno, quindi elimina più di un "Dritto" di fila nell'elenco. Questo risolve la situazione in cui una svolta a destra segue un "Dritto" nel labirinto ma non la situazione in cui c'è una svolta a destra senza un "Dritto" prima di esso. Ho anche provato a impostare il programma per eliminare un "Dritto" se è appena prima di un "Dritto" ma questo non funziona se una svolta a destra segue un "Dritto". Non sono riuscito a trovare una soluzione adatta a tutti i casi, anche se suppongo che sarebbe possibile per il robot guardare la distanza percorsa (leggendo i sensori di rotazione del motore) e decidere se è un "Dritto" o un diritto giro. Non pensavo che valesse la pena fare questa complicazione allo scopo di dimostrare il concetto di intelligenza artificiale in questo progetto.
  3. Un vantaggio del sensore di colore è che distingue tra il marrone di un muro e il rosso della barriera che ho usato all'uscita e fornisce un modo semplice per il robot di decidere quando ha finito il labirinto.

Passaggio 3: il programma principale

Il programma principale
Il programma principale

LEGO Mindstorms EV3 ha un metodo di programmazione basato su icone molto conveniente. I blocchi vengono visualizzati nella parte inferiore dello schermo del computer e possono essere trascinati nella finestra di programmazione per creare un programma. Il mattoncino EV3 può essere collegato al computer tramite un cavo USB, Wi-Fi o Bluetooth, e il programma può quindi essere scaricato dal computer al mattoncino.

Il programma è composto da un programma principale e da diversi “My Blocks” che sono sottoprogrammi. Il file caricato contiene l'intero programma, che è qui:

Le fasi del programma principale sono le seguenti:

  1. Definire e inizializzare la variabile contagiri e l'array.
  2. Attendi 5 secondi e dì "Vai".
  3. Avvia un ciclo.
  4. Guida attraverso il labirinto. Quando si raggiunge l'uscita, si esce dal ciclo.
  5. Visualizza sullo schermo del mattoncino gli incroci trovati finora nel labirinto.
  6. Controlla se il percorso deve essere accorciato.
  7. Visualizza le intersezioni nel percorso accorciato.
  8. Torna al passaggio 4.
  9. Dopo il ciclo, percorri il percorso diretto.

La schermata mostra questo programma principale.

Passaggio 4: I miei blocchi (subroutine)

I miei blocchi (subroutine)
I miei blocchi (subroutine)

Viene mostrato il Navigate My Block, che controlla come il robot guida attraverso il labirinto. La stampa è molto piccola e potrebbe non essere leggibile. Ma è un buon esempio di quanto siano versatili e potenti le istruzioni if (chiamate Switch nel sistema LEGO EV3).

  1. La freccia n. 1 indica un interruttore che controlla se il sensore a infrarossi vede un oggetto a più di una distanza specifica. In tal caso, viene eseguita la prima serie di blocchi. In caso contrario, il controllo viene passato alla grande serie inferiore di blocchi, dove si trova la freccia n.
  2. La freccia n. 2 indica un interruttore che controlla il colore che vede il sensore di colore. Ci sono 3 casi: nessun colore in alto, rosso al centro e marrone in basso.
  3. Due frecce n. 3 puntano agli interruttori che controllano se il sensore a ultrasuoni vede un oggetto a più di una distanza specifica. In tal caso, viene eseguita la prima serie di blocchi. In caso contrario, il controllo viene passato alla serie inferiore di blocchi.

I My Blocks per accorciare il percorso e per guidare il percorso diretto sono più complicati e sarebbero totalmente illeggibili, quindi non sono inclusi in questo documento.

Passaggio 5: iniziare a costruire il robot: la base

Iniziare a costruire il robot: la base
Iniziare a costruire il robot: la base
Iniziare a costruire il robot: la base
Iniziare a costruire il robot: la base

Come accennato in precedenza, LEGO Mindstorms EV3 non consente più di un sensore di ogni tipo collegato a un mattoncino. Ho usato i seguenti sensori (invece di tre sensori a ultrasuoni): sensore a infrarossi, sensore di colore e sensore a ultrasuoni.

Le coppie di foto sotto mostrano come costruire il robot. La prima foto di ogni coppia mostra le parti necessarie e la seconda foto mostra le stesse parti collegate tra loro.

Il primo passo è costruire la base del robot, utilizzando le parti mostrate. La base del robot è mostrata capovolta. La piccola parte a forma di L nella parte posteriore del robot è un supporto per la schiena. Scivola mentre il robot si muove. Funziona bene. Il kit EV3 non ha una parte a sfera rotante.

Passaggio 6: parte superiore della base, 1

Parte superiore della base, 1
Parte superiore della base, 1
Parte superiore della base, 1
Parte superiore della base, 1

Questo passaggio e i successivi 2 riguardano la parte superiore della base del robot, il sensore di colore e i cavi, che sono tutti cavi da 10 pollici (26 cm).

Passaggio 7: parte superiore della base, 2

Parte superiore della base, 2
Parte superiore della base, 2
Parte superiore della base, 2
Parte superiore della base, 2

Passaggio 8: parte superiore della base, 3

Parte superiore della base, 3
Parte superiore della base, 3
Parte superiore della base, 3
Parte superiore della base, 3

Passaggio 9: sensori a infrarossi e ad ultrasuoni

Sensori a infrarossi e ad ultrasuoni
Sensori a infrarossi e ad ultrasuoni
Sensori a infrarossi e ad ultrasuoni
Sensori a infrarossi e ad ultrasuoni

Successivamente, ci sono il sensore a infrarossi (sul lato sinistro del robot) e il sensore a ultrasuoni (a destra). Inoltre, i 4 perni per attaccare il Brick sulla parte superiore.

I sensori a infrarossi e a ultrasuoni sono posizionati verticalmente anziché orizzontalmente. Ciò fornisce una migliore identificazione degli angoli o delle estremità delle pareti.

Passaggio 10: cavi

Cavi
Cavi

I cavi si collegano al Brick come segue:

  • Porta B: motore grande sinistro.
  • Porta C: motore grande destro.
  • Porta 2: sensore a ultrasuoni.
  • Porta 3: sensore di colore.
  • Porta 4: sensore a infrarossi.

Passaggio 11: passaggio finale nella costruzione del robot: decorazione

Fase finale nella costruzione del robot: decorazione
Fase finale nella costruzione del robot: decorazione
Fase finale nella costruzione del robot: decorazione
Fase finale nella costruzione del robot: decorazione

Le ali e le pinne sono solo per la decorazione.

Passaggio 12: costruisci un labirinto

Costruisci un labirinto
Costruisci un labirinto
Costruisci un labirinto
Costruisci un labirinto

Due cartoni di cartone ondulato dovrebbero essere sufficienti per il labirinto. Ho realizzato le pareti del labirinto alte 5 pollici (12,5 cm), ma 4 pollici (10 cm) dovrebbero funzionare altrettanto bene se sei a corto di cartone ondulato.

Per prima cosa, ho tagliato intorno alle pareti dei cartoni, a 10 pollici (25 cm) dal fondo. Poi ho tagliato intorno alle pareti 5 pollici dal fondo. Ciò fornisce diverse pareti da 5 pollici. Inoltre, ho tagliato il fondo dei cartoni, lasciando circa 2,5 cm attaccati alle pareti per stabilità.

I vari pezzi possono essere tagliati e incollati o incollati ovunque sia necessario per formare il labirinto. Dovrebbe esserci uno spazio di 11 o 12 pollici (30 cm) tra le pareti laterali in qualsiasi percorso con un vicolo cieco. La lunghezza non deve essere inferiore a 10 pollici (25 cm). Queste distanze sono necessarie per far girare il robot.

Potrebbe essere necessario rinforzare alcuni angoli del labirinto. Inoltre, è necessario evitare che alcune pareti dritte si pieghino se includono un angolo di cartone raddrizzato. Piccoli pezzi di cartone sottile dovrebbero essere incollati sul fondo in quei punti, come mostrato.

L'uscita ha una barriera rossa composta da mezza busta rossa per biglietti di auguri e una base composta da 2 pezzi di cartoncino sottile, come mostrato.

Fase 13: Il labirinto

Il labirinto
Il labirinto

Un avvertimento è che il labirinto non dovrebbe essere grande. Se le virate del robot sono leggermente inclinate rispetto a quella corretta, le discrepanze si sommano dopo alcune virate e il robot potrebbe andare a sbattere contro le pareti. Ho dovuto giocherellare più volte con le impostazioni di rotazione delle curve per ottenere una guida di successo anche nel piccolo labirinto che ho fatto.

Un modo per aggirare questo problema è includere una routine di raddrizzamento del percorso che manterrebbe il robot a una distanza specifica dalla parete sinistra. Non ho incluso questo. Il programma è abbastanza complicato così com'è ed è sufficiente per dimostrare il concetto di intelligenza artificiale in questo progetto.

OSSERVAZIONE CONCLUSIVA

Questo è stato un progetto divertente e una grande esperienza di apprendimento. Spero che anche tu lo trovi interessante.

Consigliato: