Sisällysluettelo:

Itseoppiva kaoottinen robotti: 3 vaihetta
Itseoppiva kaoottinen robotti: 3 vaihetta

Video: Itseoppiva kaoottinen robotti: 3 vaihetta

Video: Itseoppiva kaoottinen robotti: 3 vaihetta
Video: Itseoppiva robotti: "Vautsi :D" Part 2 2024, Marraskuu
Anonim
Itseoppiva kaoottinen robotti
Itseoppiva kaoottinen robotti

Oletko kiinnostunut koneoppimisesta, AI ja robotit? Sinun ei tarvitse työskennellä hienossa yliopistossa. Tämä on kuvaus kaoottisesta robotistani. Se on hyvin yksinkertainen robotti, joka osoittaa, kuinka käyttää itseoppivaa koodia ja kuinka se voidaan asentaa arduino -alustalle, tässä tapauksessa Arduinolle. Se on erittäin halpa alusta!

Koodi kehittää robottia niin, että robotti oppii indeksoimaan. Se saa palautetta hiirestä, joka vedetään taakse. Koodi on "geneettinen". Tämä tarkoittaa, että useita yksilöitä testataan ja parhaat pidetään ja saavat lapsia. Tämä tarkoittaa sitä, että koodi kehittyy evoluutiolla.

Vaihe 1: Laitteisto, kuten robotti

Laitteisto, kuten robotti
Laitteisto, kuten robotti
Laitteisto, kuten robotti
Laitteisto, kuten robotti
Laitteisto, kuten robotti
Laitteisto, kuten robotti

Tarvitset:

- 1 Arduino Due

- 8 mikroservoa

- 1 PS/2 -hiiri

- 1 tasonvaihtaja

- jonkinlainen anturisuoja tai vastaava, kyllästyin anturisuojaan ja hitsasin oman.

-johdot

-ulkoinen 5V virtalähde servoille

- jotkut metalliromut, osa liimaa ja osa teräslankaa. Ja nauha!

Joten laita Due lattialle. Laita servot renkaaseen sen ympärille. Laita ne yhteen metalliromun, liiman ja langan kanssa. Tämä on kaaoksen osa! Koska se on rakenteeltaan kaoottinen, on arvaamatonta määrittää, miten liikkua saada se indeksoimaan. Siksi itseoppiva koodi on oikea tapa edetä!

Vinkkejä: käytä melko raskaita metalliosia, se helpottaa robotin liikkumista.

Liitä servot erääntyneeseen, minun tapauksessani ne on liitetty D39, 41, 43, 45, 47, 49, 51, 53.

Liitä servot ulkoiseen 5 V: n virtalähteeseen. Rakenna tätä varten jonkinlainen suoja tai käytä anturisuojaa tai vastaavaa. ÄLÄ syötä servoja 5V: n liittimistä, se ei riitä, Due palaa. Käytin pientä prototyyppikorttia jakamaan 5 V kaikille servoille. Tämä kortti sisältää myös tasonsiirtimen PS/2 -hiiren kellolle ja datalinjoille. Taulu syöttää myös hiirtä 5V jännitteellä. Muista kytkeä maadoitus ulkoisesta virtalähteestä Arduinon maadoitukseen! kaaviot osoittavat, miten kaikki yhdistetään.

Liitä PS/2 virtalähteeseen (5 V) ja maahan. Liitä PS/2: n kello ja datalinja Due -tasoon tasonsiirtimen kautta. (erääntyy 3,3 V, PS/2 5 V). Yhdistä kello D12: een ja data D13: een.

Lisätietoja PS/2 -protokollasta on tämä erittäin hyvä ohje:

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

Käyttämäni jazzycamelin PS/2 -kirjasto:

Vaihe 2: Koodi

Koodi
Koodi

Aluksi haluan sanoa: En ole ohjelmoija. Jotkut osat ovat erittäin laajoja, taitava ohjelmoija voisi tietysti lyhentää sitä ja niin.

Koodi on itseoppiva ja tämä on projektin ydin. Tämä on hauska osa sitä! Se tarkoittaa, että robotti kehittyy ja paranee ja paranee, tässä tapauksessa se paranee indeksoinnissa. Hämmästyttävää tässä on se, että robotti kehittyy sellaiseksi kuin koskaan palautat sen. Tässä tapauksessa se vetää PS/2 -hiirtä ja mitä kauemmin hiirtä vedetään, sitä korkeammat pisteet se saa.

Tämä tarkoittaa myös sitä, että voit käyttää tätä koodia opettaaksesi robottiasi tekemään jotain muuta, kunhan se mitataan ja syötetään takaisin robotille!

Kuten kuvista näkyy, hiirtä vedetään ohuella narulla. Aluksi se vedettiin hiiren kaapelista. Kaapeli on kuitenkin jotenkin jäykkä, joten robotti oppi ravistamaan hiirtä sen vetämisen sijaan. Ravistaminen tuotti kohokohtia…

Koodi käyttää 50 yksilöä. Tämän ydin on 50 x 50 tavua.

Yksilö on joukko tavuja. Kun henkilöä käytetään robotin ajamiseen, tämä henkilö lähetetään koodiin "tolken".

Ajon alussa on 8 muuttujaa m1, m2, m3, m4, m5, m6, m7 ja m8 (yksi kullekin servolle). Tässä robotissa heillä kaikilla on vakio lähtöarvot. "Tolkenissa" mś muunnetaan tapauksen/vaihtosilmukan mukaan yksilöiden arvoista riippuen. esimerkiksi arvo "1" suorittaa seuraavan: m1 = m1 + m2.

Jos henkilö on: 1, 2, 3, 0, 0, 0, 0….., mś muutetaan seuraavalla tavalla:

m1 = m1 + m2;

m1 = m1 + m3;

m1 = m1 + m4;

Tolken on luettelo 256 erilaisesta matemaattisesta operaatiosta, joten yksilöiden matriisin kaikki mahdolliset arvot edustavat m -arvojen matemaattista muutosta.

Tolken-prosessi suoritetaan 4 kertaa, ja lukema on jokaisen kierroksen välillä, jolloin jokaiselle "m": lle luodaan neljä erilaista moottorikoodia. Moottorikoodit ovat arvoja, jotka myöhemmin lähetetään servoille.

Kehityksen jokaisessa vaiheessa 4 yksilöä kilpailee indeksoinnissa. Kaksi parasta yksilöä ovat kahden vauvan vanhemmat, vauvat korvaavat kaksi pahinta yksilöä. Kun vauvoja tehdään, toisen vanhemman "geneettisen koodin" liitos vaihdetaan toisen vanhemman viipaleeksi, jolloin syntyy kaksi uutta yksilöä.

Jos yksikään yksilö ei toimi ollenkaan, yksilöiden mutaatio tapahtuu uusien luomiseksi.

Löydät koodin GitHubista:

Vaihe 3: Kuinka kouluttaa sitä?

Tämä on hankala osa. Jotta voisit treenata kunnolla, sinun on "nollattava" se jokaisen ajon jälkeen. Tämä tarkoittaa, että sinun on asetettava se samaan asentoon joka kerta.

Olen laittanut koodiin muutamia tarkistuspisteitä varmistaakseni, että robotti on lähtöasennossaan.

Kohdista robotti ja anna sen käydä.

Se testaa neljä henkilöä ja valitsee sitten kaksi parasta vanhemmiksi. Kun pahimmat on korvattu vauvoilla, se tulostaa joitain tietoja yksilöiden suorituskyvystä. Se tulostaa myös 50x50 -taulukon. On viisasta kopioida tämä Excel -taulukkoon tai vastaavaan. (tai kirjoita tarvittava koodi käsittelyssä) Jos Due palautuu (tämä johtuu eri syistä), et menetä harjoitustyötäsi. Voit kopioida/liittää taulukon koodiin ja jatkaa harjoittelua, jos jäit.

Robotini oppi ryömimään parin tunnin kuluttua. Lataa video nähdäksesi sen indeksoinnin. Se ei mennyt siihen suuntaan kuin luulin sen menevän!

Kokeile myös erilaisia kerroksia! Robottini toimi parhaiten nailonmatolla.

Mahdolliset parannukset:

1. Olisi parempi hankkia erillinen nano PS/2 -hiiren lukemiseen ja lähettää sarjassa siirretty etäisyys nanolle. PS/2 -hiiren lukema oli hieman heikko. Tästä syystä hiiri lukee/tyhjentää koodin osia.

2. jonkinlainen testauslaite, joka veti robotin takaisin lähtöasentoonsa, nopeuttaisi harjoittelua.

3. Mielestäni on viisasta harjoittaa sitä hieman hitaammin kuin minä. Hitaampi harjoittelu varmistaa, että se on koulutettu "oikeaan suuntaan". Useiden testiajojen keskimääräinen suorituskyky voisi olla mahdollinen tapa.

Suositeltava: