Turinys:

Savaime besimokantis chaotiškas robotas: 3 žingsniai
Savaime besimokantis chaotiškas robotas: 3 žingsniai

Video: Savaime besimokantis chaotiškas robotas: 3 žingsniai

Video: Savaime besimokantis chaotiškas robotas: 3 žingsniai
Video: Lietuva kalba | 2024-01-24 2024, Lapkritis
Anonim
Savaime besimokantis chaotiškas robotas
Savaime besimokantis chaotiškas robotas

Ar jus domina mašinų mokymasis, AI ir robotai? Jums nereikia dirbti kokiame nors išgalvotame universitete. Tai mano chaotiško roboto aprašymas. Tai labai paprastas robotas, parodantis, kaip naudoti savarankiškai besimokantį kodą ir kaip jį įdiegti į „arduino“platformą, šiuo atveju „Arduino“. Tai labai pigi platforma!

Kodas tobulina robotą taip, kad robotas išmoktų ropoti. Jis gauna grįžtamąjį ryšį iš pelės, kuri yra už nugaros. Kodas yra „genetinis“. Tai reiškia, kad nemažai individų yra testuojami, o geriausi laikomi ir turės kūdikių. Tai reiškia, kad kodas vystosi evoliuciniu būdu.

1 žingsnis: Aparatūra, dar vadinama robotu

Techninė įranga, dar žinoma kaip robotas
Techninė įranga, dar žinoma kaip robotas
Techninė įranga, dar žinoma kaip robotas
Techninė įranga, dar žinoma kaip robotas
Techninė įranga, dar žinoma kaip robotas
Techninė įranga, dar žinoma kaip robotas

Tau reikia:

- 1 „Arduino Due“

- 8 mikroservisai

- 1 PS/2 pelė

- 1 lygio perjungiklis

- kažkoks jutiklio skydo variantas ar panašiai, aš pavargau nuo jutiklio skydo ir suvirinau savo.

-laidai

-išorinis 5 V maitinimo šaltinis servo sistemoms

- kai kurie metalo laužo gabaliukai, dalis klijų ir dalis plieninių siūlų. Ir juosta!

Taigi padėkite „Due“ant grindų. Padėkite servo žiedą aplink jį. Sudėkite juos kartu su metalo laužu, klijais ir siūlais. Tai yra chaoso dalis! Kadangi jo dizainas yra chaotiškas, nenuspėjama nuspręsti, kaip judėti, kad jis nuskaitytų. Štai kodėl kelias į savarankišką mokymąsi!

Patarimai: naudokite gana sunkias metalines dalis, todėl robotui bus lengviau judėti.

Prijunkite servo prie termino, mano atveju jie yra prijungti prie D39, 41, 43, 45, 47, 49, 51, 53.

Prijunkite servo prie išorinio 5 V maitinimo šaltinio. Norėdami tai padaryti, pastatykite tam tikrą skydą arba naudokite jutiklio skydą ar pan. NENAUDOKITE servo iš 5 V kaiščio, to nepakanka, dėl to degs. Aš naudoju mažą prototipo plokštę, kad paskirstyčiau 5 V visiems servo įrenginiams. Šioje plokštėje taip pat yra PS/2 pelės laikrodžio ir duomenų linijų lygio perjungiklis. Lenta taip pat maitina pelę 5V. Nepamirškite prijungti įžeminimo iš išorinio maitinimo šaltinio prie „Arduino“! schema rodo, kaip visa tai sujungti.

Prijunkite PS/2 prie maitinimo (5 V) ir įžeminkite. Prijunkite PS/2 laikrodį ir duomenų liniją prie „Due“per lygio perjungiklį. (mokama 3,3 V, PS/2 - 5 V). Prijunkite laikrodį D12 ir duomenis D13.

Norėdami gauti daugiau informacijos apie PS/2 protokolą, tai labai gera instrukcija:

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

Mano naudojama jazzycamel PS/2 biblioteka:

2 žingsnis: kodas

Kodas
Kodas

Iš pradžių leiskite man pasakyti: aš nesu programuotojas. Kai kurios dalys yra labai plačios, kvalifikuotas programuotojas, žinoma, galėtų jį sutrumpinti ir taip.

Kodas yra savarankiškas mokymasis ir tai yra projekto esmė. Tai linksma jo dalis! Tai reiškia, kad robotas vystosi ir tampa vis geresnis, šiuo atveju jis vis geriau ropoja. Nuostabus dalykas yra tai, kad robotas išsivystys į tai, kuo kada nors grįšite. Šiuo atveju ji tempia PS/2 pelę ir kuo ilgiau pelė traukiama, tuo daugiau taškų ji gauna.

Tai taip pat reiškia, kad naudodami šį kodą galite išmokyti savo robotą daryti ką nors kita, jei tik jis bus išmatuotas ir grąžintas robotui!

Kaip matote paveikslėliuose, pelė tempiama ant plono laido. Iš pradžių jis buvo tempiamas pelės laidu. Tačiau kabelis yra standus, todėl robotas išmoko kratyti pelę, o ne vilkti. Drebulys sukėlė aukščiausius taškus …

Kodeksas naudoja 50 asmenų. Jo esmė yra 50x50 baitų masyvas.

Individas yra baitų masyvas. Kai asmuo naudojamas robotui paleisti, šis asmuo siunčiamas į funkciją, pavadintą „tolken“.

Bėgimo pradžioje yra 8 kintamieji m1, m2, m3, m4, m5, m6, m7 ir m8 (po vieną kiekvienai servo sistemai). Šiame robote jie visi turi pastovias pradines vertes. „Tolken“mś yra transformuojami į atvejo/perjungimo kilpą, atsižvelgiant į individo vertybes. pavyzdžiui, reikšmė "1" atlieka šiuos veiksmus: m1 = m1 + m2.

Jei asmuo yra: 1, 2, 3, 0, 0, 0, 0….., tada mś bus pakeistas taip:

m1 = m1 + m2;

m1 = m1 + m3;

m1 = m1 + m4;

„Tolken“yra 256 skirtingų matematinių operacijų sąrašas, todėl visos galimos individų masyvo reikšmės reiškia matematinį m reikšmių pokytį.

Tolken procesas atliekamas 4 kartus, rodmenys rodomi tarp kiekvieno rato, generuojant keturis skirtingus variklio kodus kiekvienam „m“. Automobilių kodai yra vertės, kurios vėliau siunčiamos į servus.

Kiekviename evoliucijos etape 4 individai konkuruoja nuskaitydami. Geriausi du asmenys bus dviejų kūdikių tėvai, kūdikiai pakeis du blogiausius asmenis. Kai kūdikiai yra pagaminti, vieno iš tėvų „genetinio kodo“sujungimas keičiamas į kito tėvo gabalą, todėl sukuriami du nauji individai.

Jei nė vienas individas apskritai neatlieka, individų mutacija įvyks, kad atsirastų naujų.

Kodą rasite „GitHub“:

3 žingsnis: kaip tai išmokyti?

Tai sudėtinga dalis. Norint tinkamai treniruotis, po kiekvieno bėgimo reikia jį „iš naujo nustatyti“. Tai reiškia, kad kiekvieną kartą turite pastatyti į tą pačią padėtį.

Įdėjau keletą kontrolinių taškų į kodą, kad įsitikinčiau, jog robotas yra pradinėje padėtyje.

Taigi sulygiuokite robotą ir leiskite jam veikti.

Jis išbando 4 asmenis ir tada pasirenka 2 geriausius tėvus. Pakeitus blogiausius kūdikiams, jis atspausdina tam tikrus duomenis apie individų našumą. Taip pat spausdinamas 50x50 masyvas. Išmintinga tai nukopijuoti į „Excel“lapą ar pan. (arba parašykite apdorojimo poreikio kodą) Jei „Due“atstatomas (tai atsitinka dėl įvairių priežasčių), jūs neprarasite savo treniruočių. Galite nukopijuoti/įklijuoti masyvą į kodą ir toliau mokytis, jei likote.

Mano robotas išmoko ropoti po poros valandų. Atsisiųskite vaizdo įrašą, kad pamatytumėte jį. Tai nenuėjo ta kryptimi, kuria aš maniau!

Taip pat išbandykite skirtingas grindis! Mano robotas geriausiai pasirodė ant nailoninio kilimo.

Galimi patobulinimai:

1. Būtų geriau turėti atskirą nano, kad būtų galima perskaityti PS/2 pelę, o nusiųstą atstumą perkelti į seriją nano. Mano PS/2 pelės rodmenys šiek tiek drebėjo. Dėl šios priežasties pelė skaito/valo kodo dalis.

2. kažkoks bandomasis įrenginys, kuris robotą traukė atgal į pradinę padėtį, paspartintų mokymą.

3. Manau, kad protinga jį treniruoti šiek tiek lėčiau nei aš. Lėtesnis mokymas užtikrina, kad jis treniruojamas „teisinga linkme“. Vidutinis kelių bandymų atlikimas galėtų būti galimas būdas.

Rekomenduojamas: