Sommario:

Robot caotico ad autoapprendimento: 3 passaggi
Robot caotico ad autoapprendimento: 3 passaggi

Video: Robot caotico ad autoapprendimento: 3 passaggi

Video: Robot caotico ad autoapprendimento: 3 passaggi
Video: Il Tuo Nuovo Aiutante in Casa: Un Robot Che Fa TUTTO dal Caffè alle Pulizie 2024, Dicembre
Anonim
Robot caotico ad autoapprendimento
Robot caotico ad autoapprendimento

Ti interessa l'apprendimento automatico, l'intelligenza artificiale e i robot? Non hai bisogno di lavorare in qualche università di lusso. Questa è una descrizione del mio caotico robot. È un robot molto semplice per dimostrare come utilizzare il codice di autoapprendimento e come implementarlo in una piattaforma arduino, in questo caso un Arduino due. È una piattaforma molto economica!

Il codice fa evolvere il robot in modo che il robot impari a gattonare. Riceve feedback dal mouse che viene trascinato dietro. Il codice è "genetico". Ciò significa che un numero di individui viene testato e i migliori vengono mantenuti e avranno bambini. Ciò significa che il codice si evolve in modo evolutivo.

Passaggio 1: hardware AKA il robot

Hardware AKA il Robot
Hardware AKA il Robot
Hardware AKA il Robot
Hardware AKA il Robot
Hardware AKA il Robot
Hardware AKA il Robot

Hai bisogno:

- 1 Arduino Due

- 8 microservi

- 1 mouse PS/2

- 1 cambio di livello

- qualche variante di un sensore-scudo o simile, mi sono stancato dello scudo del sensore e ho saldato il mio.

-fili

-alimentazione esterna 5V per i servi

- alcuni pezzi di ferraglia, un po' di colla e un po' di filo d'acciaio. E nastro!

Quindi metti il Due sul pavimento. Metti i servi in un anello attorno ad esso. Mettili insieme con rottami metallici, colla e filo. Questa è la parte del caos! Poiché è caotico nel suo design, è imprevedibile determinare come muoversi per farlo strisciare. Ecco perché il codice di autoapprendimento è la strada da percorrere!

Suggerimenti: utilizzare delle parti metalliche abbastanza pesanti, facilita lo spostamento del robot.

Collegate i servi al dovuto, nel mio caso sono collegati a D39, 41, 43, 45, 47, 49, 51, 53.

Collegare i servi all'alimentazione esterna 5V. Per questo, costruisci una sorta di scudo o usa uno scudo per sensori o simili. NON alimentare i servi dal pin 5V dovuto, non è abbastanza, Due brucerà. Ho usato una piccola scheda prototipo per distribuire i 5 V a tutti i servi. Questa scheda contiene anche il cambio di livello per il clock del mouse PS/2 e le linee dati. La scheda alimenta anche il mouse con 5V. Ricorda di collegare la terra dall'alimentazione esterna ad Arduino a causa della terra! lo schema mostra come collegare il tutto.

Collegare PS/2 all'alimentazione (5V) e alla terra. Collega il clock e la linea dati del PS/2 al Due attraverso un traslatore di livello. (due va a 3,3 V, PS/2 a 5 V). Collegare l'orologio su D12 e i dati su D13.

Per i dettagli sul protocollo PS/2, questo è un ottimo tutorial:

www.instructables.com/id/Optical-Mouse-Od…

La libreria PS/2 di jazzycamel che ho usato:

Passaggio 2: il codice

Il codice
Il codice

Per prima cosa lasciatemi dire: NON sono un programmatore. Alcune parti sono molto estese, un programmatore esperto potrebbe ovviamente accorciarle e così e così.

Il codice è autoapprendente e questo è il cuore del progetto. Questa è la parte divertente! Significa che il robot si evolve e migliora sempre di più, in questo caso migliora nel gattonare. La cosa sorprendente di questo è che il robot si evolverà in base a ciò che gli dai un feed-back. In questo caso trascina un mouse PS/2 e più a lungo viene trascinato il mouse, più punti ottiene.

Ciò significa anche che puoi usare questo codice per addestrare il tuo robot a fare qualcos'altro, a patto che venga misurato e restituito al robot!

Come puoi vedere nelle immagini, il mouse viene trascinato su un filo sottile. All'inizio è stato trascinato nel cavo del mouse. Tuttavia, il cavo è un po' rigido, quindi il robot ha imparato a scuotere il mouse, invece di trascinarlo. L'agitazione ha prodotto punti alti…

Il codice utilizza 50 individui. Il nucleo di questo è un array di 50x50 byte.

Un individuo è un array di byte. Quando l'individuo viene utilizzato per eseguire il robot, questo individuo viene inviato a una funzione nel codice chiamata "tolken".

All'inizio di una corsa ci sono 8 variabili m1, m2, m3, m4, m5, m6, m7 e m8 (una per ogni servo). In questo robot hanno tutti valori iniziali costanti. In "tolken" i mś vengono trasformati in un loop case/swich a seconda dei valori dell'individ. ad esempio un valore "1" esegue quanto segue: m1 = m1 + m2.

Se un individuo è: 1, 2, 3, 0, 0, 0, 0….. allora il mś sarà trasformato nel modo seguente:

m1 = m1 + m2;

m1 = m1 + m3;

m1 = m1 + m4;

Tolken è un elenco di 256 diverse operazioni matematiche, quindi ogni possibile valore dell'array individs rappresenta un cambiamento matematico degli m valori.

Il processo Tolken viene ripetuto 4 volte, con lettura ad ogni giro, generando quattro differenti codici motore per ogni "m". I codici motore sono i valori che in seguito vengono inviati ai servi.

In ogni fase dell'evoluzione, 4 individui competono nel gattonare. I due migliori individui saranno genitori di due bambini, i bambini sostituiranno i due peggiori individui. Quando i bambini vengono creati, una giunzione di "codice genetico" di un genitore viene scambiata con una fetta dell'altro genitore, questo crea due nuovi individui.

Se nessun individuo si esibisce affatto, la mutazione degli individui avverrà per generarne di nuovi.

Puoi trovare il codice su GitHub:

Passaggio 3: come addestrarlo?

Questa è la parte difficile. Per allenarsi correttamente, è necessario "reimpostarlo" dopo ogni corsa. Ciò significa che devi metterlo nella stessa posizione ogni volta.

Ho inserito alcuni punti di controllo all'interno del codice per assicurarmi che il robot sia nella posizione di partenza.

Quindi allinea il robot e lascialo funzionare.

Mette alla prova 4 individui e poi sceglie i 2 migliori per essere genitori. Dopo aver sostituito il peggio con i bambini, stampa alcuni dati sulle prestazioni degli individui. Stampa anche l'array 50x50. È consigliabile copiarlo in un foglio excel o simile. (o scrivere del codice necessario durante l'elaborazione) Se il Due si ripristina (questo accade per vari motivi) non perderai il tuo lavoro di formazione. Puoi copiare/incollare l'array nel codice e continuare ad allenarti dove sei rimasto.

Il mio robot ha imparato a gattonare dopo un paio d'ore. Scarica il video per vederlo strisciare. Non è andata nella direzione in cui pensavo!

Prova anche piani diversi! Il mio robot si è comportato meglio su un tappeto di nylon.

Possibili miglioramenti:

1. Sarebbe meglio avere un nano separato per leggere il mouse PS/2 e inviare la distanza elaborata spostata su seriale al nano. La lettura del mio mouse PS/2 è un po' traballante. Questo è il motivo per cui il mouse legge/cancella parti del codice.

2. una sorta di test rig che riportasse il robot nella posizione di partenza velocizzava l'addestramento.

3. Penso che sia saggio allenarlo un po' più lentamente di me. Un allenamento più lento assicura che sia addestrato "nella giusta direzione". La media delle prestazioni di diversi test potrebbe essere un modo possibile.

Consigliato: