Sadržaj:

Samoučeni haotični robot: 3 koraka
Samoučeni haotični robot: 3 koraka

Video: Samoučeni haotični robot: 3 koraka

Video: Samoučeni haotični robot: 3 koraka
Video: Джил Боулт Тейлор: Удивительный удар прозрения 2024, Juli
Anonim
Samoučeni kaotični robot
Samoučeni kaotični robot

Jeste li zainteresirani za strojno učenje, AI i roboti? Ne morate raditi na nekom otmjenom univerzitetu. Ovo je opis mog kaotičnog robota. To je vrlo jednostavan robot koji demonstrira kako koristiti kod za samostalno učenje i kako ga implementirati u arduino platformu, u ovom slučaju zbog Arduina. To je vrlo jeftina platforma!

Kod razvija robota tako da robot uči puzati. Dobija povratnu informaciju od miša koji je vučen iza. Kod je "genetski". To znači da se određeni broj pojedinaca testira, a najbolji zadržavaju i imat će bebe. To znači da se kôd razvija na evolucijski način.

Korak 1: Hardver AKA Robot

Hardver AKA Robot
Hardver AKA Robot
Hardver AKA Robot
Hardver AKA Robot
Hardver AKA Robot
Hardver AKA Robot

Ti trebas:

- 1 Arduino Due

- 8 mikroserva

- 1 miš/2 miša

- 1 menjač nivoa

- neka varijanta štitnika senzora ili slična, dosadio mi je štitnik senzora i zavario sam svoj.

-žiče

-vanjsko napajanje 5V za servomotore

- neki komadi metalnog otpada, malo ljepila i neki čelični konac. I traka!

Zato stavite Due na pod. Postavite servosisteme u prsten oko njega. Spojite ih metalnim otpadom, ljepilom i koncem. Ovo je dio haosa! Budući da je kaotičan po svom dizajnu, nepredvidivo je odrediti kako se kretati da bi puzao. Ovo je razlog zašto je kôd za samostalno učenje!

Savjeti: upotrijebite neke prilično teške metalne dijelove, što olakšava kretanje robota.

Spojite servomotore na dospijeće, u mom slučaju spojeni su na D39, 41, 43, 45, 47, 49, 51, 53.

Priključite servo pogone na vanjsko napajanje od 5 V. U tu svrhu izgradite neku vrstu štita ili upotrijebite štitnik senzora ili slično. NEMOJTE napajati servomotore sa 5V kontakta, to nije dovoljno, Due će izgorjeti. Koristio sam malu prototipnu ploču za distribuciju 5 V na sve servomotore. Ova ploča takođe sadrži prekidač nivoa za PS/2 sat miša i linije podataka. Ploča takođe napaja miša sa 5V. Ne zaboravite spojiti uzemljenje sa vanjskog napajanja na Arduino odgovarajuće uzemljenje! sheme pokazuju kako sve to povezati.

Priključite PS/2 na napajanje (5V) i uzemljenje. Spojite sat i podatkovnu liniju PS/2 na Due putem mjenjača nivoa. (zbog 3,3 V, PS/2 5 V). Povežite sat na D12 i podatke na D13.

Za detalje o PS/2 protokolu ovo je vrlo dobro uputstvo:

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

Biblioteka PS/2 autora jazzycamel koju sam koristio:

Korak 2: Kodeks

Kodeks
Kodeks

Isprva mi dozvolite da kažem: NISAM programer. Neki dijelovi su vrlo opsežni, vješt programer bi to naravno mogao skratiti i tako i tako.

Kôd se sam uči i to je srž projekta. Ovo je zabavan dio toga! To znači da se robot razvija i postaje sve bolji i bolji, u ovom slučaju postaje sve bolji u puzanju. Nevjerojatna stvar u vezi s ovim je da će robot evoluirati do onoga na što mu vratite povratnu informaciju. U ovom slučaju vuče PS/2 miš i što se miš duže vuče, dobiva više bodova.

To također znači da pomoću ovog koda možete naučiti svog robota da radi nešto drugo, sve dok se mjeri i šalje robotu!

Kao što možete vidjeti na slikama, miš se vuče po tankom kabelu. U početku se vukao po kablu miša. Međutim, kabel je nekako krut, pa je robot naučio tresti miša, umjesto da ga vuče. Tresenje je donijelo vrhunske rezultate…

Kôd koristi 50 osoba. Jezgra ovoga je niz od 50x50 bajtova.

Pojedinac je niz bajtova. Kada se pojedinac koristi za pokretanje robota, taj pojedinac se šalje na funkciju u kodu zvanom "tolken".

Na početku rada postoji 8 varijabli m1, m2, m3, m4, m5, m6, m7 i m8 (po jedna za svaki servo). U ovom robotu svi imaju konstantne početne vrijednosti. U "tolkenu" se mś pretvara u petlju slučaj/swich ovisno o vrijednostima pojedinca. na primjer vrijednost "1" izvršava sljedeće: m1 = m1 + m2.

Ako je pojedinac: 1, 2, 3, 0, 0, 0, 0….. tada će se mś transformirati na sljedeći način:

m1 = m1 + m2;

m1 = m1 + m3;

m1 = m1 + m4;

Tolken je popis od 256 različitih matematičkih operacija, pa svaka moguća vrijednost polja individs predstavlja matematičku promjenu m vrijednosti.

Tolken proces se vrši 4 puta, sa očitavanjem između svakog kruga, generirajući četiri različita koda motora za svaki "m". Kodovi motora su vrijednosti koje se kasnije šalju servo motorima.

U svakom koraku evolucije, 4 osobe se takmiče u puzanju. Najbolje dvije jedinke bit će roditelji dvije bebe, a one će zamijeniti dvije najgore jedinke. Kad se naprave bebe, spoj "genetskog koda" jednog roditelja mijenja se za krišku drugog roditelja, to stvara dvije nove jedinke.

Ako nijedan pojedinac uopće ne nastupa, doći će do mutacije individua kako bi se stvorile nove.

Kôd možete pronaći na GitHub-u:

Korak 3: Kako to trenirati?

Ovo je lukav dio. Da biste pravilno trenirali, morate ga "resetirati" nakon svakog trčanja. To znači da ga morate svaki put staviti u isti položaj.

U kodu sam stavio nekoliko kontrolnih tačaka kako bih se uvjerio da je robot u svom početnom položaju.

Zato poravnajte robota i pustite ga da radi.

Testira 4 osobe, a zatim bira 2 najbolja za roditelje. Nakon što najgore zamijeni bebama, ispisuje neke podatke o učinku pojedinaca. Takođe štampa niz 50x50. Mudro je ovo kopirati u excel list ili slično. (ili napišite neki potreban kod u obradi) Ako se Due vrati (to se događa iz različitih razloga), nećete izgubiti svoj rad na obuci. Niz možete kopirati/zalijepiti u kôd i nastaviti s obukom.

Moj robot je naučio puzati nakon nekoliko sati. Preuzmite videozapis da biste ga indeksirali. Nije išlo u smjeru u kojem sam mislio da hoće!

Isprobajte i različite podove! Moj robot se najbolje pokazao na najlonskom tepihu.

Moguća poboljšanja:

1. Bilo bi bolje da imate zaseban nano za čitanje PS/2 miša i da pošaljete obrađenu udaljenost premještenu preko serijske u nano. Čitanje mog PS/2 miša pomalo je klimavo. Ovo je razlog zašto miš čita/briše dijelove koda.

2. neka vrsta probne opreme koja je robota odvukla natrag u početni položaj ubrzala bi obuku.

3. Mislim da je pametno vježbati malo sporije nego ja. Sporiji trening osigurava da se trenira "u pravom smjeru". Prosječna izvedba nekoliko probnih vožnji mogla bi biti mogući način.

Preporučuje se: