Innholdsfortegnelse:

AI i LEGO EV3 Maze-Driving Robot: 13 trinn
AI i LEGO EV3 Maze-Driving Robot: 13 trinn

Video: AI i LEGO EV3 Maze-Driving Robot: 13 trinn

Video: AI i LEGO EV3 Maze-Driving Robot: 13 trinn
Video: AI in LEGO EV3 Maze-Driving Robot 2024, Juli
Anonim
Image
Image
Hvordan en labyrint løses
Hvordan en labyrint løses

Dette er en enkel, autonom robot med litt kunstig intelligens. Den er designet for å utforske en labyrint og når den plasseres tilbake ved inngangen, for å kjøre gjennom til utkjørselen og unngå blindvei. Det er mye mer komplisert enn mitt forrige prosjekt, som rett og slett kjørte gjennom labyrinten. Her må roboten huske stien den har reist, fjerne blindveier, lagre den nye banen og deretter følge den nye banen.

Min forrige robot er beskrevet her:

Roboten er bygget ved hjelp av LEGO Mindstorms EV3. EV3 -programvaren kjører på en datamaskin og genererer et program, som deretter lastes ned til en mikrokontroller kalt en EV3 -murstein. Programmeringsmetoden er ikonbasert og på høyt nivå. Det er veldig enkelt og allsidig.

Rekvisita

DELER

  1. LEGO Mindstorms EV3 sett
  2. LEGO Mindstorms EV3 ultralydssensor. Det er ikke inkludert i EV3 -settet.
  3. Bølgepapp til labyrinten. To kartonger bør være tilstrekkelig.
  4. Et lite stykke tynn papp for å stabilisere noen hjørner og vegger.
  5. Lim og tape for å koble pappstykker sammen.
  6. En rød gratulasjonskortkonvolutt for å identifisere utgangen av labyrinten.

VERKTØY

  1. Verktøyskniv for å kutte papp.
  2. Linjal i stål for å hjelpe til med skjæreprosessen.

PROGRAMVARE

Programmet er her:

Trinn 1: Hvordan en labyrint løses

MAZE-DRIVING METODE

Det er flere metoder for å navigere i en labyrint. Hvis du er interessert i å studere dem, er de veldig godt beskrevet i følgende Wikipedia -artikkel:

Jeg valgte den venstre vegg-følgende metoden. Tanken er at roboten skal holde en vegg på venstre side ved å ta følgende beslutninger når den går gjennom labyrinten:

  1. Hvis det er mulig å svinge til venstre, gjør det.
  2. Ellers går du rett om mulig.
  3. Hvis det ikke kan gå til venstre eller rett, sving til høyre, hvis det er mulig.
  4. Hvis ingen av de ovennevnte er mulige, må dette være en blindvei. Snu.

En forsiktighet er at metoden kan mislykkes hvis labyrinten har en sløyfe i den. Avhengig av sløyfens plassering, kan roboten fortsette å gå rundt og rundt løkken. En mulig løsning på dette problemet ville være at roboten bytter til den høyre veggfølgerregelen hvis den innser at den går i en sløyfe. Jeg inkluderte ikke denne forbedringen i prosjektet mitt.

LØSNING AV MAZEN FOR Å FINNE EN DIREKTE STI

Mens du kjører gjennom labyrinten, må roboten huske banen den reiser og eliminere blindveier. Det oppnår dette ved å lagre hver sving og kryss i en matrise, se etter spesifikke kombinasjoner av svinger og kryss mens det går, og erstatte kombinasjonene som inkluderer en blindvei. Den siste listen over svinger og kryss er den direkte banen gjennom labyrinten.

De mulige svingene er: Venstre, Høyre, Bak (i en blindvei) og Rett (som er et kryss).

Kombinasjoner erstattes som følger:

  • "Venstre, bak, venstre" blir "rett".
  • "Venstre, bak, høyre" blir til "tilbake".
  • "Venstre, bak, rett" blir til "høyre".
  • "Høyre, bak, venstre" blir "tilbake".
  • "Rett, bak, venstre" blir til "høyre".
  • "Rett, tilbake, rett" blir til "tilbake".

HVORDAN ROBOTEN HÅNDTERER MIN DOLE

  1. Når roboten begynner å kjøre, ser den et mellomrom til høyre og lagrer Straight i listen i matrisen.
  2. Deretter svinger den til venstre og legger til venstre på listen. Listen inneholder nå: Rett, Venstre.
  3. Med en blindvei snur den seg og legger Tilbake til listen. Listen inneholder nå: Rett, Venstre, Bak.
  4. Den passerer banen den brukte fra inngangen, og legger Straight til listen. Listen inneholder nå: Rett, Venstre, Bak, Rett. Den gjenkjenner en kombinasjon og endrer venstre, bak, rett til høyre. Listen inneholder nå Straight, Right.
  5. Med en blindvei snur den seg og legger Tilbake til listen. Listen inneholder nå: Rett, Høyre, Bak.
  6. Etter venstresvingen inneholder listen Straight, Right, Back, Left. Den gjenkjenner en kombinasjon og endrer Høyre, Tilbake, Venstre til Bakside. Listen inneholder nå Straight, Back.
  7. Etter neste sving til venstre inneholder listen Straight, Back, Left. Den endrer denne kombinasjonen til Høyre. Listen inneholder nå bare Høyre.
  8. Den passerer et mellomrom og legger Straight til listen. Listen inneholder nå Right, Straight.
  9. Etter høyre sving inneholder listen Høyre, Rett, Høyre som er den direkte banen.

Trinn 2: Hensyn når du programmerer roboten

Hensyn til enhver mikrokontroller

Når roboten bestemmer seg for å snu, bør den enten gjøre en bred sving, eller gå frem et lite stykke før du svinger, og etter å ha svingt, gå et stykke videre fremover uten å kontrollere sensoren. Grunnen til den første korte distansen er at roboten ikke skulle støte på veggen etter svingen, og årsaken til den andre korte distansen er at etter at roboten har snudd, ville sensoren se den lange plassen den nettopp hadde kommet fra, og roboten skulle tro at den skulle snu igjen, noe som ikke er riktig å gjøre.

Når roboten føler et kryss på høyre side, men det ikke er en høyresving, har jeg funnet ut at det er godt å ha roboten til å kjøre 25 cm fremover uten å sjekke sensorene.

HENSYN TIL SPECIFIKKE FOR LEGO MINDSTORMS EV3

Selv om LEGO Mindstorms EV3 er veldig allsidig, tillater den ikke mer enn en av hver type sensor som er koblet til en murstein. To eller flere murstein kan være daisy-lenket, men jeg ønsket ikke å kjøpe en annen murstein, og derfor brukte jeg følgende sensorer (i stedet for tre ultralydsensorer): infrarød sensor, fargesensor og ultralydsensor. Dette fungerte bra.

Men fargesensoren har en veldig kort rekkevidde på ca. 5 cm, noe som fører til noen spesielle hensyn som beskrevet nedenfor:

  1. Når fargesensoren oppdager en vegg foran og roboten bestemmer seg for å svinge til høyre eller snu, bør den sikkerhetskopiere først for å gi seg selv nok plass til å snu uten å støte på veggen.
  2. Et komplisert problem oppstår med noen "rette" kryss. På grunn av fargesensors korte rekkevidde kan ikke roboten avgjøre om den registrerer et skikkelig "rett" kryss eller føringen til en høyresving. Jeg har prøvd å fikse dette problemet ved å sette programmet til å lagre en "rett" i listen hver gang roboten registrerer en, og deretter eliminere mer enn en "rett" på rad i listen. Dette fikser situasjonen der en høyresving følger en "rett" i labyrinten, men ikke situasjonen der det er en høyresving uten en "rett" før den. Jeg prøvde også å sette programmet til å eliminere en "rett" hvis den er like før en "høyre", men dette fungerer ikke hvis en høyresving følger en "rett". Jeg har ikke klart å finne en løsning som passer alle tilfeller, selv om jeg antar at det ville være mulig for roboten å se på tilbakelagt distanse (ved å lese motorrotasjonssensorene) og bestemme om det er en "rett" eller en rettighet sving. Jeg trodde ikke denne komplikasjonen var verdt å gjøre for å demonstrere AI -konseptet i dette prosjektet.
  3. En fordel med fargesensoren er at den skiller mellom det brune på en vegg og det røde på barrieren jeg brukte ved utgangen, og gir en enkel måte for roboten å bestemme når den er ferdig med labyrinten.

Trinn 3: Hovedprogrammet

Hovedprogrammet
Hovedprogrammet

LEGO Mindstorms EV3 har en veldig praktisk ikonbasert programmeringsmetode. Blokker vises nederst på skjermen på datamaskinen og kan dra og slippes inn i programmeringsvinduet for å bygge et program. EV3 Brick kan være koblet til datamaskinen enten med en USB-kabel, Wi-Fi eller Bluetooth, og programmet kan deretter lastes ned fra datamaskinen til mursteinen.

Programmet består av et hovedprogram og flere “My Blocks” som er underprogrammer. Den opplastede filen inneholder hele programmet, som er her:

Trinnene i hovedprogrammet er som følger:

  1. Definer og initialiser svingtellervariabelen og matrisen.
  2. Vent 5 sekunder og si "Gå".
  3. Start en sløyfe.
  4. Kjør gjennom labyrinten. Når utgangen er nådd, går sløyfen ut.
  5. Vis på mursteinens skjerm, kryssene som er funnet i labyrinten så langt.
  6. Sjekk om banen skal forkortes.
  7. Vis kryssene i den forkortede banen.
  8. Gå tilbake til trinn 4.
  9. Etter løkken, kjør den direkte banen.

Skjermbildet viser dette hovedprogrammet.

Trinn 4: My Blocks (Subroutines)

The My Blocks (Subroutines)
The My Blocks (Subroutines)

Naviger min blokk, som styrer hvordan roboten kjører gjennom labyrinten, vises. Utskriften er veldig liten og er kanskje ikke lesbar. Men det er et godt eksempel på hvor allsidig og kraftig if-setningene er (kalt Switches i LEGO EV3-systemet).

  1. Pil nr. 1 peker på en bryter som sjekker om den infrarøde sensoren ser et objekt mer enn en bestemt avstand unna. I så fall blir den øverste serien av blokker utført. Hvis ikke, sendes kontrollen til den store bunnserien med blokker, der pil nr. 2 er plassert.
  2. Pil #2 peker på en bryter som sjekker hvilken farge fargesensoren ser. Det er 3 tilfeller: ingen farge på toppen, rød i midten og brun nederst.
  3. To piler #3 peker på brytere som kontrollerer om ultralydssensoren ser et objekt mer enn en bestemt avstand unna. I så fall blir den øverste serien av blokker utført. Hvis ikke, sendes kontrollen til den nederste serien av blokker.

Mine blokker for å forkorte banen og for å kjøre den direkte stien er mer kompliserte og ville være helt uleselige, og de er derfor ikke inkludert i dette dokumentet.

Trinn 5: Begynner å bygge roboten: basen

Begynner å bygge roboten: basen
Begynner å bygge roboten: basen
Begynner å bygge roboten: basen
Begynner å bygge roboten: basen

Som nevnt tidligere tillater LEGO Mindstorms EV3 ikke mer enn en av hver type sensor som er koblet til en murstein. Jeg brukte følgende sensorer (i stedet for tre ultralydsensorer): infrarød sensor, fargesensor og ultralydsensor.

Parene nedenfor viser hvordan du bygger roboten. Det første bildet av hvert par viser delene som trengs, og det andre bildet viser de samme delene som er koblet sammen.

Det første trinnet er å bygge basen til roboten ved hjelp av delene som vises. Robotbasen vises opp ned. Den lille L-formede delen på baksiden av roboten er en støtte for ryggen. Den glir mens roboten beveger seg. Dette fungerer greit. EV3-settet har ikke en rullende balltype.

Trinn 6: Toppen av basen, 1

Toppen av basen, 1
Toppen av basen, 1
Toppen av basen, 1
Toppen av basen, 1

Dette trinnet og de neste to trinnene er for toppen av bunnen av roboten, fargesensoren og kablene, som alle er 26 cm (10 tommer) kabler.

Trinn 7: Toppen av basen, 2

Toppen av basen, 2
Toppen av basen, 2
Toppen av basen, 2
Toppen av basen, 2

Trinn 8: Toppen av basen, 3

Toppen av basen, 3
Toppen av basen, 3
Toppen av basen, 3
Toppen av basen, 3

Trinn 9: Infrarøde og ultralydsensorer

Infrarøde og ultralydsensorer
Infrarøde og ultralydsensorer
Infrarøde og ultralydsensorer
Infrarøde og ultralydsensorer

Deretter er den infrarøde sensoren (på venstre side av roboten) og den ultralydssensoren (til høyre). Også de 4 pinnene for å feste mursteinen på toppen.

De infrarøde og ultralydsensorene er plassert vertikalt i stedet for normal horisontal. Dette gir bedre identifisering av hjørnene eller endene på veggene.

Trinn 10: Kabler

Kabler
Kabler

Kablene kobles til mursteinen som følger:

  • Port B: venstre stor motor.
  • Port C: høyre stor motor.
  • Port 2: ultralydssensor.
  • Port 3: fargesensor.
  • Port 4: infrarød sensor.

Trinn 11: Siste trinn i å bygge roboten: dekorasjon

Siste trinn i byggingen av roboten: dekorasjon
Siste trinn i byggingen av roboten: dekorasjon
Siste trinn i byggingen av roboten: dekorasjon
Siste trinn i byggingen av roboten: dekorasjon

Vingene og finnene er bare til pynt.

Trinn 12: Bygg en labyrint

Bygg en labyrint
Bygg en labyrint
Bygg en labyrint
Bygg en labyrint

To bølgepappkartonger skulle være tilstrekkelig for labyrinten. Jeg laget labyrintveggene 12,5 cm høye, men 10 cm burde fungere like bra hvis du mangler bølgepapp.

Først kuttet jeg rundt veggene i kartongene, 25 cm fra bunnen. Så kuttet jeg rundt veggene 5 tommer fra bunnen. Dette gir flere 5-tommers vegger. Jeg kuttet også rundt bunnene på kartongene og etterlot omtrent 2,5 cm festet til veggene for stabilitet.

De forskjellige bitene kan klippes og limes eller teipes der det trengs for å danne labyrinten. Det bør være et mellomrom på 11 eller 12 tommer (30 cm) mellom sideveggene i en bane med blindvei. Lengden bør ikke være mindre enn 10 tommer (25 cm). Disse avstandene er nødvendige for at roboten skal snu.

Noen av hjørnene på labyrinten må kanskje forsterkes. Noen rette vegger må også hindres i å bøye seg hvis de inkluderer et rett kartonghjørne. Små biter av tynn papp skal limes til bunnen på disse stedene, som vist.

Utgangen har en rød barriere bestående av en halv rød gratulasjonskortkonvolutt og en base laget av 2 stykker tynn papp, som vist.

Trinn 13: Labyrinten

Labyrinten
Labyrinten

En forsiktighet er at labyrinten ikke skal være stor. Hvis robotens svinger er i en liten vinkel fra den riktige, øker avvikene etter noen få svinger, og roboten kan løpe inn i veggene. Jeg måtte fikle flere ganger med rotasjonsinnstillingene på svingene for å få en vellykket kjøretur gjennom selv den lille labyrinten jeg laget.

En måte å løse dette problemet på er å inkludere en rutine som retter opp veier som holder roboten en bestemt avstand fra venstre vegg. Jeg inkluderte ikke dette. Programmet er komplisert nok som det er, og det er tilstrekkelig for å demonstrere AI -konseptet i dette prosjektet.

AVSLUTTENDE MERKNAD

Dette var et morsomt prosjekt og en flott læringsopplevelse. Jeg håper du også synes det er interessant.

Anbefalt: