Sisukord:

Iseõppiv kaootiline robot: 3 sammu
Iseõppiv kaootiline robot: 3 sammu

Video: Iseõppiv kaootiline robot: 3 sammu

Video: Iseõppiv kaootiline robot: 3 sammu
Video: 18 марта великое полнолуние в Деве, положите на подоконник денежную купюру и скажите эти слова 2024, November
Anonim
Iseõppiv kaootiline robot
Iseõppiv kaootiline robot

Kas olete huvitatud masinõppest, AI ja robotitest? Pole vaja töötada mõnes uhkes ülikoolis. See on minu kaootilise roboti kirjeldus. See on väga lihtne robot, mis demonstreerib, kuidas kasutada iseõppivat koodi ja kuidas seda arduino platvormile rakendada, antud juhul Arduino tähtajaks. See on väga odav platvorm!

Kood arendab robotit nii, et robot õpib roomama. See saab tagasisidet tagant tõmmatud hiirelt. Kood on "geneetiline". See tähendab, et mitmeid isendeid testitakse ja parimaid hoitakse ning neile sünnivad beebid. See tähendab, et kood areneb evolutsiooniliselt.

Samm: riistvara, robot

Riistvara AKA the Robot
Riistvara AKA the Robot
Riistvara AKA the Robot
Riistvara AKA the Robot
Riistvara AKA the Robot
Riistvara AKA the Robot

Sa vajad:

- 1 Arduino tähtaeg

- 8 mikroservot

- 1 PS/2 hiirt

- 1 taseme nihutaja

- mingi andurikilbi variant vms, väsisin andurikilbist ja keevitasin enda oma.

-juhtmed

-väline 5 V toiteallikas servodele

- mõned vanametalli tükid, mõned liimid ja mõned terasniidid. Ja lint!

Nii et pange Due põrandale. Pange servod selle ümber rõngasse. Pange need kokku vanametalli, liimi ja niidiga. See on kaose osa! Kuna selle disain on kaootiline, on ettearvamatu otsustada, kuidas liikuda, et see indekseerida. Seetõttu on õige tee iseõppiv kood!

Näpunäiteid: kasutage mõnda üsna rasket metallosa, see muudab roboti liikumise lihtsamaks.

Ühendage servod tähtajaga, minu puhul on need ühendatud D39, 41, 43, 45, 47, 49, 51, 53.

Ühendage servod välise 5V toiteallikaga. Selleks ehitage mingi kilp või kasutage andurikilpi vms. ÄRGE toite servosid tasulisest 5 V tihvtist, sellest ei piisa, Due põleb. Kasutasin väikest prototüüpplaati, et jagada 5 V kõigile servodele. Sellel plaadil on ka PS/2 hiirekella ja andmeliinide taseme nihutaja. Samuti toidab plaat hiirt 5V toitega. Pidage meeles, et ühendage maandus välisest toiteallikast Arduino maandusega! skeem näitab, kuidas seda kõike ühendada.

Ühendage PS/2 toiteallikaga (5 V) ja maandusega. Ühendage PS/2 kell ja andmeside nivooliga taseme nihutaja kaudu. (tähtaeg läheb 3.3V, PS/2 läheb 5V). Ühendage kell D12 ja andmed D13 -ga.

PS/2 protokolli kohta lisateabe saamiseks on see väga hea juhend:

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

Jazzycameli PS/2 raamatukogu, mida olen kasutanud:

2. samm: kood

Kood
Kood

Alustuseks lubage mul öelda: ma ei ole programmeerija. Mõned osad on väga ulatuslikud, osav programmeerija võiks seda muidugi lühendada ja nii ja naa.

Kood on iseõppiv ja see on projekti tuum. See on selle lõbus osa! See tähendab, et robot areneb ja läheb aina paremaks, sellisel juhul muutub see roomamisel paremaks. Hämmastav on see, et robot areneb selliseks, nagu te seda kunagi tagasiteate. Sel juhul tõmbab see PS/2 hiirt ja mida kauem hiir tõmmatakse, seda kõrgemaid punkte see saab.

See tähendab ka seda, et saate selle koodi abil õpetada oma robotit tegema midagi muud, kui see on mõõdetud ja robotile tagasi antud!

Nagu piltidelt näha, lohistatakse hiirt õhukese nööriga. Alguses tiriti see hiirekaablist sisse. Kaabel on aga kuidagi jäik, nii et robot õppis hiirt lohistama, mitte lohistama. Raputamine andis kõrgeid punkte …

Kood kasutab 50 isikut. Selle tuum on massiiv 50x50 baiti.

Üksikisik on baitide massiiv. Kui indiviidi kasutatakse roboti käitamiseks, saadetakse see üksus funktsioonile koodiga "tolken".

Jooksu alguses on 8 muutujat m1, m2, m3, m4, m5, m6, m7 ja m8 (üks iga servo kohta). Selles robotis on neil kõigil pidevad lähteväärtused. "Tolkenis" teisendatakse mś olendi väärtustest sõltuvalt juhtumi/vahetustsükliks. näiteks väärtus "1" täidab järgmist: m1 = m1 + m2.

Kui üksikisik on: 1, 2, 3, 0, 0, 0, 0….., siis muudetakse mś järgmiselt:

m1 = m1 + m2;

m1 = m1 + m3;

m1 = m1 + m4;

Tolken on 256 erineva matemaatilise toimingu loend, nii et üksikisikute massiivi kõik võimalikud väärtused esindavad m väärtuste matemaatilist muutust.

Tolken-protsess viiakse läbi 4 korda, lugedes iga ringi vahel, genereerides iga "m" jaoks neli erinevat mootorikoodi. Mootorikoodid on väärtused, mis hiljem servodele saadetakse.

Arengu igal sammul võistlevad roomamises 4 isendit. Kaks parimat isikut saavad kahe beebi vanemad, beebid asendavad kahte halvimat isendit. Kui beebid tehakse, vahetatakse ühe vanema "geneetilise koodi" splaiss teise vanema viilu vastu, see loob kaks uut isendit.

Kui ükski indiviid üldse ei toimi, toimub isendite muteerimine uute genereerimiseks.

Koodi leiate GitHubist:

3. samm: kuidas seda treenida?

See on keeruline osa. Selleks, et korralikult treenida, peate selle pärast iga jooksu "lähtestama". See tähendab, et peate selle iga kord samasse asendisse panema.

Olen koodi sisse pannud mõned kontrollpunktid, et veenduda, et robot on lähteasendis.

Nii et joondage robot ja laske tal töötada.

See testib 4 isikut ja seejärel valib kaks parimat lapsevanemaks. Pärast halvima asendamist beebidega prindib see mõned andmed üksikisikute jõudluse kohta. See prindib ka 50x50 massiivi. Mõistlik on see kopeerida Exceli lehele vms. (või kirjutage töötlemisel mõni vajadusekood) Kui tähtaeg lähtestatakse (see juhtub erinevatel põhjustel), ei kaota te oma treeningut. Saate massiivi koodi kopeerida/kleepida ja jätkata treenimist, kui te alles jäite.

Minu robot õppis paari tunni pärast roomama. Indekseerimiseks laadige video alla. See ei läinud selles suunas, nagu ma arvasin, et läheb!

Proovi ka erinevaid põrandaid! Minu robotil õnnestus kõige paremini nailonvaip.

Võimalikud parandused:

1. Oleks parem, kui PS/2 hiire lugemiseks oleks eraldi nano ja saadetaks töödeldud vahemaa üle nano. Minu PS/2 hiire lugemine muutus natuke värisevaks. See on põhjus, miks hiir koodi osi loeb/kustutab.

2. mingi katseseade, mis lohistas roboti tagasi algasendisse, kiirendaks treeningut.

3. Arvan, et on mõistlik treenida seda natuke aeglasemalt kui mina. Aeglasem treening tagab, et treenitakse "õiges suunas". Võimalik viis võiks olla mitme katsesõidu keskmine jõudlus.

Soovitan: