Indholdsfortegnelse:

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

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

Video: AI i LEGO EV3 Maze-Driving Robot: 13 trin
Video: LEGO MINDSTORMS Robot Inventor 5in1 | Designer Video | FIVE new LEGO Robots 2020 2024, Juli
Anonim
Image
Image
Sådan løses en labyrint
Sådan løses en labyrint

Dette er en simpel, autonom robot med noget kunstig intelligens. Den er designet til at udforske en labyrint og når den placeres tilbage ved indgangen, til at køre igennem til udgangen og undgå blindgyder. Det er meget mere kompliceret end mit tidligere projekt, som simpelthen kørte igennem labyrinten. Her skal robotten huske den vej, den har kørt, fjerne blindgange, gemme den nye sti og derefter følge den nye sti.

Min tidligere robot er beskrevet her:

Robotten er bygget ved hjælp af LEGO Mindstorms EV3. EV3 -softwaren kører på en computer og genererer et program, som derefter downloades til en mikrokontroller kaldet en EV3 Brick. Programmeringsmetoden er ikonbaseret og på højt niveau. Det er meget let og alsidigt.

Forbrugsvarer

DELE

  1. LEGO Mindstorms EV3 sæt
  2. LEGO Mindstorms EV3 ultralydssensor. Det er ikke inkluderet i EV3 -sættet.
  3. Bølgepap til labyrinten. To kartoner bør være tilstrækkelige.
  4. Et lille stykke tyndt pap, der hjælper med at stabilisere nogle hjørner og vægge.
  5. Lim og tape til at forbinde papstykker sammen.
  6. En rød lykønskningskonvolut til identifikation af labyrintens udgang.

VÆRKTØJ

  1. Brugskniv til at skære pap.
  2. Stållineal til hjælp ved skæringsprocessen.

SOFTWARE

Programmet er her:

Trin 1: Sådan løses en labyrint

MAZE-DRIVING METODE

Der er flere metoder til at navigere i en labyrint. Hvis du er interesseret i at studere dem, beskrives de meget godt i følgende Wikipedia -artikel:

Jeg valgte den venstre væg-følgende metode. Ideen er, at robotten vil holde en væg på sin venstre side ved at træffe følgende beslutninger, når den går gennem labyrinten:

  1. Hvis det er muligt at dreje til venstre, gør det.
  2. Ellers skal du gå direkte, hvis det er muligt.
  3. Hvis det ikke kan gå til venstre eller lige, skal du dreje til højre, hvis det er muligt.
  4. Hvis ingen af ovenstående er mulige, må dette være en blindgyde. Vend om.

En forsigtighed er, at metoden kan mislykkes, hvis labyrinten har en loop i den. Afhængigt af placeringen af sløjfen kunne robotten blive ved med at gå rundt og rundt om løkken. En mulig løsning på dette problem ville være, at robotten skiftede til den højre væg-tilhænger-regel, hvis den indså, at den gik i en loop. Jeg inkluderede ikke denne forfining i mit projekt.

LØSNING AF MAZEN FOR AT FINDE EN DIREKTE STI

Under kørslen gennem labyrinten skal robotten huske den sti, den kører, og fjerne blindgange. Det opnår dette ved at lagre hver sving og kryds i en matrix, kontrollere for bestemte kombinationer af sving og kryds, mens det går, og erstatte de kombinationer, der indeholder en blindgyde. Den sidste liste over sving og kryds er den direkte vej gennem labyrinten.

De mulige sving er: Venstre, Højre, Tilbage (i en blindgyde) og Lige (som er et kryds).

Kombinationer erstattes som følger:

  • "Venstre, tilbage, venstre" bliver til "lige".
  • "Venstre, tilbage, højre" bliver til "tilbage".
  • "Venstre, tilbage, lige" bliver til "højre".
  • "Højre, tilbage, venstre" bliver til "tilbage".
  • "Lige, tilbage, venstre" bliver til "højre".
  • "Straight, Back, Straight" bliver til "Back".

HVORDAN ROBOTEN HÅNDTERER MIN MAZE

  1. Når robotten begynder at køre, ser den et mellemrum til højre og gemmer Straight på listen i arrayet.
  2. Derefter drejer den til venstre og tilføjer Venstre til listen. Listen indeholder nu: Straight, Left.
  3. Med en blindgyde vender den om og tilføjer Tilbage til listen. Listen indeholder nu: Straight, Left, Back.
  4. Ved at passere den bane, den brugte fra indgangen, føjes den lige til listen. Listen indeholder nu: Straight, Left, Back, Straight. Den genkender en kombination og ændrer Venstre, Tilbage, Lige til højre. Listen indeholder nu Straight, Right.
  5. Med en blindgyde vender den om og tilføjer Tilbage til listen. Listen indeholder nu: Straight, Right, Back.
  6. Efter venstresvinget indeholder listen Straight, Right, Back, Left. Den genkender en kombination og ændrer højre, tilbage, venstre til tilbage. Listen indeholder nu Straight, Back.
  7. Efter det næste venstresving indeholder listen Straight, Back, Left. Det ændrer denne kombination til højre. Listen indeholder nu kun Right.
  8. Det passerer et mellemrum og tilføjer Straight til listen. Listen indeholder nu Right, Straight.
  9. Efter højresving indeholder listen højre, lige, højre, som er den direkte vej.

Trin 2: Overvejelser ved programmering af robotten

HENSYN TIL ALLE MIKROKONTROLLERE

Når robotten beslutter sig for at dreje, skal den enten foretage et bredt sving eller gå et stykke fremad inden drejning og efter drejning gå en kort afstand frem igen uden at kontrollere sensoren. Grunden til den første korte afstand er, at robotten ikke skulle støde ind i væggen efter svinget, og årsagen til den anden korte afstand er, at efter at robotten har drejet, ville sensoren se det lange rum, den lige var kommet fra, og robotten ville mene, at den skulle vende igen, hvilket ikke er det rigtige at gøre.

Når robotten registrerer et kryds til højre, men det ikke er et højresving, har jeg fundet ud af, at det er godt at have robotten til at køre frem omkring 25 cm uden at kontrollere dens sensorer.

HENSYN TIL SPECIFIKKE FOR LEGO MINDSTORMS EV3

Selvom LEGO Mindstorms EV3 er meget alsidig, tillader den ikke mere end en af hver type sensor, der er forbundet til en mursten. To eller flere mursten kunne være daisy-lænket, men jeg ville ikke købe en anden mursten, og derfor brugte jeg følgende sensorer (i stedet for tre ultralydssensorer): infrarød sensor, farvesensor og ultralydssensor. Dette fungerede godt.

Men farvesensoren har en meget kort rækkevidde på ca. 5 cm, hvilket fører til et par særlige overvejelser som beskrevet nedenfor:

  1. Når farvesensoren registrerer en væg foran, og robotten beslutter at dreje til højre eller vende, skal den først bakke op for at give sig selv nok plads til at dreje uden at støde ind i væggen.
  2. Et kompliceret problem opstår med nogle "lige" kryds. På grund af farvesensors korte rækkevidde kan robotten ikke afgøre, om den føler et ordentligt "lige" kryds eller op til et højresving. Jeg har forsøgt at løse dette problem ved at indstille programmet til at gemme en "Straight" på listen hver gang robotten registrerer en og derefter fjerne mere end en "Straight" i træk på listen. Dette løser situationen, hvor et højresving følger en "Straight" i labyrinten, men ikke situationen, hvor der er en højresving uden en "Straight" før den. Jeg prøvede også at indstille programmet til at eliminere en "Straight", hvis den er lige før en "Right", men dette virker ikke, hvis en højresving følger en "Straight". Jeg har ikke været i stand til at finde en løsning, der passer til alle tilfælde, selvom jeg formoder, at det ville være muligt for robotten at se på den tilbagelagte afstand (ved at aflæse motorens rotationssensorer) og beslutte, om det er en “Straight” eller en højre tur. Jeg syntes ikke, at denne komplikation var værd at gøre med det formål at demonstrere AI -konceptet i dette projekt.
  3. En fordel ved farvesensoren er, at den skelner mellem den brune på en væg og den røde af barrieren, jeg brugte ved udgangen, og giver robotten en nem måde at beslutte, hvornår den er færdig med labyrinten.

Trin 3: Hovedprogrammet

Hovedprogrammet
Hovedprogrammet

LEGO Mindstorms EV3 har en meget praktisk ikonbaseret programmeringsmetode. Blokke vises nederst på skærmen på computeren og kan trækkes og slippes ind i programmeringsvinduet for at opbygge et program. EV3-klodsen kan være tilsluttet computeren enten med et USB-kabel, Wi-Fi eller Bluetooth, og programmet kan derefter downloades fra computeren til klodsen.

Programmet består af et hovedprogram og flere “My Blocks”, som er underprogrammer. Den uploadede fil indeholder hele programmet, som er her:

Trinene i hovedprogrammet er som følger:

  1. Definer og initialiser turn-counting-variablen og arrayet.
  2. Vent 5 sekunder, og sig "Gå".
  3. Start en loop.
  4. Kør gennem labyrinten. Når udgangen er nået, forlades sløjfen.
  5. Vis på murstenets skærm de kryds, der er fundet i labyrinten hidtil.
  6. Kontroller, om stien skal forkortes.
  7. Vis krydsene i den forkortede sti.
  8. Gå tilbage til trin 4.
  9. Efter sløjfen køres den direkte sti.

Skærmbilledet viser dette hovedprogram.

Trin 4: Mine blokke (underrutiner)

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

Naviger min blok, der styrer, hvordan robotten kører gennem labyrinten, vises. Udskriften er meget lille og er muligvis ikke læselig. Men det er et godt eksempel på, hvor alsidige og kraftfulde if-udsagnene er (kaldet Switches i LEGO EV3-systemet).

  1. Pil nr. 1 peger på en switch, der kontrollerer, om den infrarøde sensor ser et objekt mere end en bestemt afstand væk. I så fald udføres den øverste serie af blokke. Hvis ikke, overføres kontrollen til den store, nederste serie af blokke, hvor pil nr. 2 er placeret.
  2. Pil #2 peger på en switch, der kontrollerer, hvilken farve farvesensoren ser. Der er 3 tilfælde: ingen farve øverst, rød i midten og brun i bunden.
  3. To pile #3 peger på kontakter, der kontrollerer, om ultralydssensoren ser et objekt mere end en bestemt afstand væk. I så fald udføres den øverste serie af blokke. Hvis ikke, overføres kontrollen til den nederste serie af blokke.

Mine blokke til at forkorte stien og til at køre den direkte vej er mere komplicerede og ville være totalt ulæselige, og de er derfor ikke inkluderet i dette dokument.

Trin 5: Begynd at bygge robotten: basen

Begynder at bygge robotten: basen
Begynder at bygge robotten: basen
Begynder at bygge robotten: basen
Begynder at bygge robotten: basen

Som tidligere nævnt tillader LEGO Mindstorms EV3 ikke mere end en af hver type sensor, der er forbundet til en mursten. Jeg brugte følgende sensorer (i stedet for tre ultralydssensorer): infrarød sensor, farvesensor og ultralydssensor.

Fotosparene herunder viser, hvordan man bygger robotten. Det første foto af hvert par viser de nødvendige dele, og det andet foto viser de samme dele forbundet.

Det første trin er at bygge robotens base ved hjælp af de viste dele. Robotbasen vises på hovedet. Den lille L-formede del bag på robotten er en støtte til ryggen. Den glider, når robotten bevæger sig. Dette fungerer okay. EV3-sættet har ikke en kugleformet del.

Trin 6: Øverst på basen, 1

Toppen af basen, 1
Toppen af basen, 1
Toppen af basen, 1
Toppen af basen, 1

Dette trin og de næste 2 trin er foroven på bunden af robotten, farvesensoren og kablerne, der alle er 10 tommer (26 cm) kabler.

Trin 7: Toppen af basen, 2

Toppen af basen, 2
Toppen af basen, 2
Toppen af basen, 2
Toppen af basen, 2

Trin 8: Øverst på basen, 3

Toppen af basen, 3
Toppen af basen, 3
Toppen af basen, 3
Toppen af basen, 3

Trin 9: Infrarøde og ultralydssensorer

Infrarøde og ultralydssensorer
Infrarøde og ultralydssensorer
Infrarøde og ultralydssensorer
Infrarøde og ultralydssensorer

Dernæst er den infrarøde sensor (på robotens venstre side) og ultralydssensoren (til højre). Også de 4 ben til fastgørelse af mursten ovenpå.

De infrarøde og ultralydssensorer er placeret lodret i stedet for den normale vandrette. Dette giver en bedre identifikation af væggenes hjørner eller ender.

Trin 10: Kabler

Kabler
Kabler

Kablerne tilsluttes til mursten som følger:

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

Trin 11: Sidste trin i opbygningen af robotten: dekoration

Sidste trin i opbygningen af robotten: dekoration
Sidste trin i opbygningen af robotten: dekoration
Sidste trin i opbygningen af robotten: dekoration
Sidste trin i opbygningen af robotten: dekoration

Vingerne og finnerne er kun til pynt.

Trin 12: Byg en labyrint

Byg en labyrint
Byg en labyrint
Byg en labyrint
Byg en labyrint

To bølgepapkartoner skulle være tilstrækkelige til labyrinten. Jeg lavede labyrintvæggene 12,5 cm høje, men 10 cm skulle fungere lige så godt, hvis du mangler bølgepap.

Først skar jeg rundt om kartonernes vægge, 25 cm fra bunden. Derefter skar jeg rundt om væggene 5 tommer fra bunden. Dette giver flere 5-tommer vægge. Jeg skar også rundt om kartonernes bund og efterlod omkring 2,5 cm fastgjort til væggene for at sikre stabilitet.

De forskellige stykker kan skæres og limes eller tapes, hvor det er nødvendigt for at danne labyrinten. Der skal være et mellemrum på 11 eller 12 tommer (30 cm) mellem sidevæggene i enhver sti med en blindgyde. Længden bør ikke være mindre end 25 cm. Disse afstande er nødvendige for at robotten kan vende om.

Nogle af hjørnerne på labyrinten skal muligvis forstærkes. Nogle lige vægge skal også undgå at bøje, hvis de indeholder et rettet kartonhjørne. Små stykker tynd pap skal limes til bunden på disse steder, som vist.

Udgangen har en rød barriere bestående af en halv rød lykønskningskonvolut og en base lavet af 2 stykker tynd pap, som vist.

Trin 13: Labyrinten

Labyrinten
Labyrinten

En forsigtighed er, at labyrinten ikke skal være stor. Hvis robotens sving er i en lille vinkel fra den rigtige, tilføjer uoverensstemmelserne sig efter et par omgange, og robotten kan løbe ind i væggene. Jeg var nødt til flere gange at rode med rotationsindstillingerne på svingene for at få en vellykket køretur gennem selv den lille labyrint, jeg lavede.

En vej udenom dette problem er at inkludere en ruteføring, der ville rette robotten en bestemt afstand fra venstre væg. Jeg inkluderede ikke dette. Programmet er kompliceret nok som det er, og det er tilstrækkeligt til at demonstrere AI -konceptet i dette projekt.

AFSLUTTENDE BEMÆRKNING

Dette var et sjovt projekt og en stor læringsoplevelse. Jeg håber, at du også finder det interessant.

Anbefalede: