Kazalo:

Samoučen kaotični robot: 3 koraki
Samoučen kaotični robot: 3 koraki

Video: Samoučen kaotični robot: 3 koraki

Video: Samoučen kaotični robot: 3 koraki
Video: World's Largest FREE WILL Debate w/ Top Physicists & Philosophers 2024, December
Anonim
Samoučen kaotični robot
Samoučen kaotični robot

Vas zanima strojno učenje, AI in roboti? Ni vam treba delati na kakšni elegantni univerzi. To je opis mojega kaotičnega robota. To je zelo preprost robot, ki dokazuje, kako uporabiti kodo za samoučenje in kako jo implementirati v platformo arduino, v tem primeru zaradi Arduina. To je zelo poceni platforma!

Koda razvija robota tako, da se robot nauči plaziti. Prejema povratne informacije od miške, ki je vlečena zadaj. Koda je "genetska". To pomeni, da se testirajo številni posamezniki, najboljši pa obdržijo in bodo imeli dojenčke. To pomeni, da se koda razvija evolucijsko.

1. korak: Strojna oprema, imenovana Robot

Strojna oprema AKA Robot
Strojna oprema AKA Robot
Strojna oprema AKA Robot
Strojna oprema AKA Robot
Strojna oprema AKA Robot
Strojna oprema AKA Robot

Potrebujete:

- 1 Arduino Due

- 8 mikroservojev

- 1 miška PS/2

- 1 preklopnik stopenj

- kakšna varianta senzorskega ščita ali podobno, naveličal sem se senzorskega ščita in zvaril svojega.

-žice

-zunanji 5V napajalnik za servomotorje

- nekaj odpadnih kovin, nekaj lepila in nekaj jeklenih niti. In trak!

Zato postavite Due na tla. Servomotorje postavite v obroč okoli njega. Zložite jih z odpadno kovino, lepilom in nitjo. To je del kaosa! Ker je v svoji zasnovi kaotičen, je nepredvidljivo določiti, kako se premakniti, da bo lezel. Zato je koda za samoučenje prava pot!

Nasveti: uporabite nekaj precej težkih kovinskih delov, ki olajšajo premikanje robota.

Priključite servomotorje na zapadlost, v mojem primeru so povezani z D39, 41, 43, 45, 47, 49, 51, 53.

Servomotorje priključite na zunanji 5V napajalnik. V ta namen zgradite nekakšen ščit ali uporabite senzorski ščit ali podobno. NE napajajte servomotorjev z vtiča 5V za plačilo, to ni dovolj, Due bo zagorel. Uporabil sem majhno prototipno ploščo za distribucijo 5 V na vse servomotorje. Ta plošča vsebuje tudi premik nivoja za uro miške PS/2 in podatkovne linije. Miška napaja tudi miško s 5V. Ne pozabite priključiti tal iz zunanjega napajanja na Arduino ustrezno ozemljitev! sheme prikazujejo, kako vse to povezati.

PS/2 priključite na napajanje (5V) in ozemljitev. Priključite uro in podatkovno linijo PS/2 na Due zaradi menjalnika nivoja. (zapad 3,3 V, PS/2 5 V). Povežite uro na D12 in podatke na D13.

Za podrobnosti o protokolu PS/2 je to zelo dobro navodilo:

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

Knjižnica PS/2 avtorja jazzycamel, ki sem jo uporabljal:

2. korak: Koda

Kodeks
Kodeks

Najprej naj povem: Nisem programer. Nekateri deli so zelo obsežni, usposobljeni programer bi jih seveda lahko skrajšal in tako in tako.

Koda se samouči in to je jedro projekta. To je zabaven del tega! To pomeni, da se robot razvija in postaja vse boljši, v tem primeru je boljši pri plazenju. Pri tem je neverjetno, da se bo robot razvil v tisto, kar mu boste dali nazaj. V tem primeru vleče miško PS/2 in dlje ko miško vleče, višje točke dobi.

To tudi pomeni, da lahko s to kodo naučite svojega robota, da stori kaj drugega, če se le ta izmeri in robot pošlje nazaj!

Kot lahko vidite na slikah, se miška vleče po tanki vrvici. Sprva so ga vlekli v kabel miške. Vendar je kabel nekako trd, zato se je robot naučil tresti miško, namesto da bi jo vlekel. Tresenje je prineslo vrhunske točke …

Koda uporablja 50 posameznikov. Jedro tega je niz 50x50 bajtov.

Posameznik je niz bajtov. Ko se posameznik uporablja za izvajanje robota, se ta posameznik pošlje v funkcijo v kodi, imenovani "tolken".

Na začetku teka je 8 spremenljivk m1, m2, m3, m4, m5, m6, m7 in m8 (po ena za vsak servo). V tem robotu imajo vsi konstantne izhodiščne vrednosti. V "tolken" se mś pretvorijo v zanko case/swich, odvisno od vrednosti posameznika. na primer vrednost "1" izvede naslednje: m1 = m1 + m2.

Če je posameznik: 1, 2, 3, 0, 0, 0, 0….., se bo mś spremenil na naslednji način:

m1 = m1 + m2;

m1 = m1 + m3;

m1 = m1 + m4;

Tolken je seznam 256 različnih matematičnih operacij, zato vsaka možna vrednost matrike individs predstavlja matematično spremembo m vrednosti.

Tolken-proces se izvede 4-krat, z odčitkom med vsakim krogom, ki ustvari štiri različne kode motorja za vsak "m". Kode motorja so vrednosti, ki se kasneje pošljejo servomotorjem.

Na vsakem koraku evolucije 4 posamezniki tekmujejo v plazenju. Najboljša dva posameznika bosta starša dvema otrokoma, otroka bosta nadomestila dva najslabša posameznika. Ko se rodijo dojenčki, se delček "genetske kode" enega od staršev zamenja za rezino drugega starša, kar ustvari dve novi osebi.

Če noben posameznik sploh ne nastopi, bo prišlo do mutacije posameznikov za ustvarjanje novih.

Kodo najdete na GitHubu:

3. korak: Kako ga trenirati?

To je zapleten del. Če želite pravilno trenirati, ga morate po vsakem teku "ponastaviti". To pomeni, da ga morate vsakič postaviti v isti položaj.

V kodo sem vstavil nekaj kontrolnih točk, da bi zagotovil, da je robot v začetnem položaju.

Zato poravnajte robota in ga pustite delovati.

Testira 4 posameznike, nato pa izbere 2 najboljša za starša. Po zamenjavi najslabšega z dojenčki natisne nekaj podatkov o uspešnosti posameznikov. Natisne tudi matriko 50x50. Pametno je to kopirati v Excelov list ali podobno. (ali v obdelavo napišite kodo za potrebo) Če se rok ponastavi (to se zgodi iz različnih razlogov), ne boste izgubili svojega usposabljanja. Polje lahko kopirate/prilepite v kodo in nadaljujete z usposabljanjem.

Moj robot se je po nekaj urah naučil plaziti. Prenesite videoposnetek, če ga želite preiskati. Ni šlo v smer, za katero sem mislil, da bo!

Poskusite tudi z različnimi tlemi! Moj robot se je najbolje odrezal na najlonski preprogi.

Možne izboljšave:

1. Za branje miške PS/2 in pošiljanje obdelane razdalje, ki se premakne čez serijo, na nano bi bilo bolje imeti ločeno nano. Branje moje miške PS/2 je nekoliko tresoče. To je razlog, da miška prebere/počisti dele kode.

2. nekakšna testna naprava, ki je robota povlekla nazaj v začetni položaj, bi pospešila usposabljanje.

3. Mislim, da ga je pametno trenirati nekoliko počasneje kot jaz. Počasnejše usposabljanje zagotavlja, da se trenira "v pravo smer". Povprečna uspešnost več preskusov je lahko možen način.

Priporočena: