Innholdsfortegnelse:

Selvlærende kaotisk robot: 3 trinn
Selvlærende kaotisk robot: 3 trinn

Video: Selvlærende kaotisk robot: 3 trinn

Video: Selvlærende kaotisk robot: 3 trinn
Video: Joris Krijger Etika AI Odgovorna Uporaba AI 2024, November
Anonim
Selvlærende kaotisk robot
Selvlærende kaotisk robot

Er du interessert i maskinlæring, AI og roboter? Du trenger ikke jobbe på et fancy universitet. Dette er en beskrivelse av min kaotiske robot. Det er en veldig enkel robot for å demonstrere hvordan du bruker selvlæringskode og hvordan du implementerer den i en arduino -plattform, i dette tilfellet en Arduino på grunn. Det er en veldig billig plattform!

Koden utvikler roboten slik at roboten lærer å krype. Den får tilbakemelding fra musen som er draget bak. Koden er "genetisk". Dette betyr at en rekke enkeltpersoner blir testet og de beste blir beholdt og vil ha babyer. Dette betyr at koden utvikler seg på en evolusjonær måte.

Trinn 1: Maskinvare AKA the Robot

Maskinvare AKA the Robot
Maskinvare AKA the Robot
Maskinvare AKA the Robot
Maskinvare AKA the Robot
Maskinvare AKA the Robot
Maskinvare AKA the Robot

Du trenger:

- 1 Arduino Due

- 8 mikroservoer

- 1 PS/2 mus

- 1 nivåskift

- en eller annen variant av et sensor-skjold eller lignende, jeg ble lei av sensor-skjoldet og sveiset mitt eget.

-ledninger

-ekstern 5V strømforsyning for servoene

- noen metallbiter, litt lim og litt ståltråd. Og tape!

Så legg Due på gulvet. Sett servoene i en ring rundt den. Legg dem sammen med metallskrap, lim og tråd. Dette er kaosdelen! Siden den er kaotisk i utformingen, er det uforutsigbart å bestemme hvordan den skal bevege seg for å få den til å krype. Det er derfor selvlæringskode er veien å gå!

Tips: bruk noen ganske tunge metalldeler, det gjør det lettere for roboten å bevege seg.

Koble servoene til due, i mitt tilfelle er de koblet til D39, 41, 43, 45, 47, 49, 51, 53.

Koble servoene til den eksterne 5V strømforsyningen. For dette må du bygge en slags skjold, eller bruke et sensorskjerm eller lignende. IKKE mate servoene fra kontingentets 5V pin, det er ikke nok, Due vil brenne. Jeg brukte et lite prototypekort for å distribuere 5 V til alle servoer. Dette brettet holder også nivåskifteren for PS/2 museklokke og datalinjer. Brettet mater også musen med 5V. Husk å koble bakken fra ekstern strøm til Arduino due ground! skjematikk viser hvordan du kobler det hele sammen.

Koble PS/2 til strøm (5V) og jord. Koble klokken og datalinjen til PS/2 til Due gjennom en nivåskifter. (forfaller 3,3V, PS/2 går 5V). Koble klokken på D12 og data på D13.

For detaljer om PS/2 -protokollen, er dette en veldig god instruks:

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

PS/2 -biblioteket av jazzycamel som jeg har brukt:

Trinn 2: Koden

Koden
Koden

La meg først si: Jeg er IKKE programmerer. Noen deler er veldig omfattende, en dyktig programmerer kan selvfølgelig forkorte det og så og så.

Koden er selvlæring, og dette er kjernen i prosjektet. Dette er den morsomme delen av det! Det betyr at roboten utvikler seg og blir bedre og bedre, i dette tilfellet blir den bedre i å krype. Det fantastiske med dette er at roboten vil utvikle seg til det du noen gang gir den tilbakemelding på. I dette tilfellet drar den en PS/2 -mus, og jo lenger musen dras, desto høyere poeng får den.

Dette betyr også at du kan bruke denne koden til å lære roboten din å gjøre noe annet, så lenge den måles og mates tilbake til roboten!

Som du kan se på bildene, dras musen på en tynn snor. Først ble den dratt inn i musekabelen. Kabelen er imidlertid litt stiv, så roboten lærte å riste musen i stedet for å dra den. Risting ga høydepunkter …

Koden bruker 50 enkeltpersoner. Kjernen i dette er en matrise på 50x50 byte.

En individ er en rekke byte. Når individet brukes til å kjøre roboten, sendes denne personen til en funksjon i koden kalt "tolken".

Ved starten av et løp er det 8 variabler m1, m2, m3, m4, m5, m6, m7 og m8 (en for hver servo). I denne roboten har de alle konstante startverdier. I "tolken" transformeres mś i en case/swich loop avhengig av individets verdier. for eksempel utfører verdien av "1" følgende: m1 = m1 + m2.

Hvis en person er: 1, 2, 3, 0, 0, 0, 0….. så blir mś transformert på følgende måte:

m1 = m1 + m2;

m1 = m1 + m3;

m1 = m1 + m4;

Tolken er en liste over 256 forskjellige matematiske operasjoner, så hver mulig verdi av individs array representerer en matematisk endring av m -verdiene.

Tolken-prosessen utføres 4 ganger, med avlesning mellom hver runde, og genererer fire forskjellige motorkoder for hver "m". Motorkodene er verdiene som senere sendes til servoene.

I hvert trinn i utviklingen konkurrerer 4 enkeltindivider om å krype. De to beste enkeltpersonene vil være foreldre til to babyer, babyene vil erstatte de to verste enkeltpersonene. Når babyer lages, byttes en skive med "genetisk kode" fra den ene forelder for et stykke fra den andre forelder, dette skaper to nye individer.

Hvis ingen enkeltpersoner presterer i det hele tatt, vil mutasjon av individer finne sted for å generere nye.

Du finner koden på GitHub:

Trinn 3: Hvordan trene det?

Dette er den vanskelige delen. For å trene skikkelig må du "tilbakestille" den etter hvert løp. Dette betyr at du må sette den i samme posisjon hver gang.

Jeg har satt noen sjekkpunkter inne i koden for å sikre at roboten er i utgangsposisjon.

Så juster roboten og la den gå.

Den tester 4 enkeltpersoner, og deretter velger den de 2 beste å være foreldre. Etter å ha erstattet det verste med babyene, skriver det ut noen data om enkeltpersoners ytelse. Den skriver også ut 50x50 -matrisen. Det er lurt å kopiere dette til et Excel -ark eller lignende. (eller skriv en behovskode under behandling) Hvis forfallet tilbakestilles (dette skjer av forskjellige årsaker) vil du ikke miste treningsarbeidet. Du kan kopiere/lime inn matrisen i koden og fortsette å trene der du forlot.

Min robot lærte å krype etter et par timer. Last ned videoen for å se den gjennomgå. Det gikk ikke i den retningen jeg trodde det ville!

Prøv også forskjellige etasjer! Roboten min fungerte best på et nylonteppe.

Mulige forbedringer:

1. Det ville være bedre å ha en egen nano for å lese PS/2 -musen, og sende den behandlede distansen flyttet over serienummer til nano. Når jeg leser min PS/2 -mus, er det litt ristet. Dette er grunnen til at musen leser/sletter deler av koden.

2. en slags testrigg som dro roboten tilbake til utgangsposisjonen, ville øke treningen.

3. Jeg tror det er lurt å trene det litt saktere enn jeg gjorde. Langsommere trening sikrer at den er trent "i riktig retning". Gjennomsnittlig ytelse for flere testkjøringer kan være en mulig måte.

Anbefalt: