Indholdsfortegnelse:

Selvlærende kaotisk robot: 3 trin
Selvlærende kaotisk robot: 3 trin

Video: Selvlærende kaotisk robot: 3 trin

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

Er du interesseret i maskinlæring, AI og robotter? Du behøver ikke at arbejde på et fancy universitet. Dette er en beskrivelse af min kaotiske robot. Det er en meget enkel robot at demonstrere, hvordan man bruger selvlærende kode, og hvordan man implementerer den i en arduino -platform, i dette tilfælde en Arduino, der skyldes. Det er en meget billig platform!

Koden udvikler robotten, så robotten lærer at kravle. Den får feedback fra musen, der er slæbt bagved. Koden er "genetisk". Det betyder, at en række enkeltpersoner testes, og de bedste bevares og får babyer. Det betyder, at koden udvikler sig på en evolutionær måde.

Trin 1: Hardware AKA the Robot

Hardware AKA the Robot
Hardware AKA the Robot
Hardware AKA the Robot
Hardware AKA the Robot
Hardware AKA the Robot
Hardware AKA the Robot

Du mangler:

- 1 Arduino Due

- 8 mikroservoer

- 1 PS/2 mus

- 1 niveauskift

- en eller anden variant af et sensor-skjold eller lignende, jeg blev træt af sensor-skjoldet og svejste mit eget.

-ledninger

-ekstern 5V strømforsyning til servoerne

- nogle metalskrotstykker, noget lim og noget ståltråd. Og tape!

Så læg Due på gulvet. Sæt servoerne i en ring omkring den. Læg dem sammen med metalskrot, lim og tråd. Dette er kaosdelen! Da det er kaotisk i sit design, er det uforudsigeligt at bestemme, hvordan man bevæger sig for at få det til at kravle. Derfor er selvlærende kode vejen frem!

Tips: brug nogle ret tunge metaldele, det gør det lettere for robotten at bevæge sig.

Tilslut servoerne til due, i mit tilfælde er de forbundet til D39, 41, 43, 45, 47, 49, 51, 53.

Tilslut servoer til den eksterne 5V strømforsyning. Til dette skal du bygge en slags skjold, eller bruge et sensorskærm eller lignende. Foder IKKE servoer fra kontingentets 5V pin, det er ikke nok, Due brænder. Jeg brugte et lille prototypekort til at distribuere 5 V til alle servoer. Dette bord indeholder også niveauskifteren til PS/2 -musuret og datalinjer. Brættet fodrer også musen med 5V. Husk tilslut jord fra ekstern strøm til Arduino due ground! skema viser, hvordan man forbinder det hele.

Tilslut PS/2 til strøm (5V) og jord. Tilslut uret og datalinjen på PS/2 til Due gennem en niveauskifter. (forfalder 3.3V, PS/2 går 5V). Tilslut uret på D12 og data på D13.

For detaljer om PS/2 -protokollen er dette en meget god instruerbar:

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

PS/2 -biblioteket af jazzycamel, som jeg har brugt:

Trin 2: Koden

Koden
Koden

Lad mig først sige: Jeg er IKKE en programmør. Nogle dele er meget omfattende, en dygtig programmør kunne naturligvis forkorte det og så og så.

Koden er selvlærende, og dette er kernen i projektet. Dette er den sjove del af det! Det betyder, at robotten udvikler sig og bliver bedre og bedre, i dette tilfælde bliver den bedre til at kravle. Det fantastiske ved dette er, at robotten vil udvikle sig til det, du nogensinde giver den feedback på. I dette tilfælde trækker den en PS/2 -mus, og jo længere musen trækkes, jo højere point får den.

Dette betyder også, at du kan bruge denne kode til at træne din robot gøre noget andet, så længe den måles og føres tilbage til robotten!

Som du kan se på billederne, trækkes musen på en tynd snor. Først blev det trukket i musekablet. Kablet er dog lidt stift, så robotten lærte at ryste musen i stedet for at trække den. Rystelser producerede højdepunkter …

Koden bruger 50 enkeltpersoner. Kernen i dette er en matrix på 50x50 bytes.

En individ er en række bytes. Når individet bruges til at køre robotten, sendes denne person til en funktion i koden kaldet "tolken".

Ved starten af et løb er der 8 variabler m1, m2, m3, m4, m5, m6, m7 og m8 (en for hver servo). I denne robot har de alle konstante startværdier. I "tolken" transformeres mś i en case/swich loop afhængigt af individets værdier. for eksempel udfører værdien "1" følgende: m1 = m1 + m2.

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

m1 = m1 + m2;

m1 = m1 + m3;

m1 = m1 + m4;

Tolken er en liste over 256 forskellige matematiske operationer, så enhver mulig værdi af det individuelle array repræsenterer en matematisk ændring af m -værdierne.

Tolken-processen udføres 4 gange, med aflæsning mellem hver omgang, hvilket genererer fire forskellige motorkoder for hver "m". Motorkoderne er de værdier, der senere sendes til servoerne.

I hvert trin i udviklingen konkurrerer 4 enkeltpersoner om crawling. De to bedste enkeltpersoner vil være forældre til to babyer, babyerne vil erstatte de to værste enkeltpersoner. Når der laves babyer, byttes en skive "genetisk kode" fra den ene forælder til et stykke fra den anden forælder, dette skaber to nye enkeltpersoner.

Hvis ingen person overhovedet præsterer, vil mutation af de enkelte finde sted for at generere nye.

Du kan finde koden på GitHub:

Trin 3: Hvordan træner man det?

Dette er den vanskelige del. For at træne korrekt skal du "nulstille" det efter hvert løb. Det betyder, at du skal sætte den i samme position hver gang.

Jeg har sat et par kontrolpunkter inde i koden for at sikre, at robotten er i sin startposition.

Så juster robotten og lad den køre.

Det tester 4 enkeltpersoner, og derefter vælger det de bedste 2 at være forældre. Efter at have udskiftet det værste med babyerne, udskriver det nogle data om enkeltpersoners præstationer. Det udskriver også 50x50 -arrayet. Det er klogt at kopiere dette til et excelark eller lignende. (eller skriv en brugskode under behandling) Hvis forfaldet nulstilles (dette sker af forskellige årsager), mister du ikke dit træningsarbejde. Du kan kopiere/indsætte arrayet i koden og fortsætte med at træne, hvis du forlod.

Min robot lærte at kravle efter et par timer. Download videoen for at se den gennemgå. Det gik ikke i den retning, jeg troede, det ville!

Prøv også forskellige etager! Min robot klarede sig bedst på et nylontæppe.

Mulige forbedringer:

1. Det ville være bedre at have en separat nano til at læse PS/2 -musen og sende den behandlede afstand flyttet over seriel til nano. Læsning af min PS/2 -mus er lidt rystet. Dette er årsagen til, at musen læser/sletter dele af koden.

2. en slags testrigg, der trak robotten tilbage til sin startposition, ville fremskynde træningen.

3. Jeg synes, det er klogt at træne det lidt langsommere, end jeg gjorde. Langsommere træning sikrer, at den trænes "i den rigtige retning". Den gennemsnitlige ydelse af flere testkørsler kan være en mulig måde.

Anbefalede: