Innehållsförteckning:

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

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

Video: AI i LEGO EV3 Maze-Driving Robot: 13 steg
Video: LEGO MINDSTORMS EV3 Smart AI-Powered LEGO Bird Learns How To Sort Bricks 2024, Juli
Anonim
Image
Image
Hur en labyrint löses
Hur en labyrint löses

Detta är en enkel, autonom robot med viss artificiell intelligens. Den är utformad för att utforska en labyrint och när den placeras tillbaka vid ingången, för att köra igenom till utgången och undvika återvändsgränderna. Det är mycket mer komplicerat än mitt tidigare projekt, som helt enkelt körde igenom labyrinten. Här måste roboten komma ihåg den väg den har färdats, ta bort återvändsgränder, lagra den nya vägen och sedan följa den nya vägen.

Min tidigare robot beskrivs här:

Roboten är byggd med LEGO Mindstorms EV3. EV3 -programvaran körs på en dator och genererar ett program som sedan laddas ner till en mikrokontroller kallad EV3 Brick. Programmeringsmetoden är ikonbaserad och på hög nivå. Det är väldigt enkelt och mångsidigt.

Tillbehör

DELAR

  1. LEGO Mindstorms EV3 -set
  2. LEGO Mindstorms EV3 ultraljudssensor. Det ingår inte i EV3 -setet.
  3. Wellpapp för labyrinten. Två kartonger bör räcka.
  4. En liten bit tunn kartong för att stabilisera vissa hörn och väggar.
  5. Lim och tejp för att ansluta kartongbitar ihop.
  6. Ett rött gratulationskortkuvert för att identifiera utgången från labyrinten.

VERKTYG

  1. Verktygskniv för att skära kartongen.
  2. Linjal i stål för att underlätta skärprocessen.

PROGRAMVARA

Programmet finns här:

Steg 1: Hur en labyrint löses

MAZE-DRIVING METOD

Det finns flera metoder för att navigera i en labyrint. Om du är intresserad av att studera dem beskrivs de mycket bra i följande Wikipedia -artikel:

Jag valde den vänstra väggföljande metoden. Tanken är att roboten ska hålla en vägg på vänster sida genom att fatta följande beslut när den går genom labyrinten:

  1. Om det är möjligt att svänga vänster, gör det.
  2. Annars, gå direkt om möjligt.
  3. Om det inte går åt vänster eller rakt, sväng höger, om möjligt.
  4. Om inget av ovanstående är möjligt måste detta vara en återvändsgränd. Vänd dig om.

En försiktighet är att metoden kan misslyckas om labyrinten har en slinga i den. Beroende på slingans placering kan roboten fortsätta att gå runt och runt öglan. En möjlig lösning för detta problem skulle vara att roboten byter till den högra väggföljaren om den inser att den går i en loop. Jag inkluderade inte denna förfining i mitt projekt.

LÖSNING AV LÖNKOREN FÖR ATT HITTA EN DIREKT STI

Under körningen genom labyrinten måste roboten komma ihåg vägen den färdas och eliminera återvändsgränder. Det uppnår detta genom att lagra varje sväng och korsning i en array, leta efter specifika kombinationer av svängar och korsningar när det går och ersätta kombinationerna som inkluderar en återvändsgränd. Den sista listan över svängar och korsningar är den direkta vägen genom labyrinten.

De möjliga svängarna är: Vänster, Höger, Bakåt (i en återvändsgränd) och Rak (som är en korsning).

Kombinationer ersätts enligt följande:

  • "Vänster, bak, vänster" blir "rak".
  • "Vänster, bakåt, höger" blir "tillbaka".
  • "Vänster, bak, rak" blir "höger".
  • "Höger, bakåt, vänster" blir "tillbaka".
  • "Rakt, bakåt, vänster" blir "höger".
  • "Straight, Back, Straight" blir "Back".

HUR ROBOTEN HANTERAR MIN LÖN

  1. När roboten börjar köra ser den ett mellanslag till höger och lagrar Straight i listan i arrayen.
  2. Sedan svänger den till vänster och lägger till vänster i listan. Listan innehåller nu: Straight, Left.
  3. Med en återvändsgränd vänder den och lägger tillbaka till listan. Listan innehåller nu: Straight, Left, Back.
  4. Genom att passera körfältet som det använde från ingången lägger det till Straight i listan. Listan innehåller nu: Straight, Left, Back, Straight. Den känner igen en kombination och ändrar vänster, bak, rakt till höger. Listan innehåller nu Straight, Right.
  5. Med en återvändsgränd vänder den och lägger tillbaka till listan. Listan innehåller nu: Straight, Right, Back.
  6. Efter vänster sväng innehåller listan Straight, Right, Back, Left. Den känner igen en kombination och ändrar höger, bak, vänster till baksida. Listan innehåller nu Straight, Back.
  7. Efter nästa vänster sväng innehåller listan Straight, Back, Left. Den ändrar den kombinationen till höger. Listan innehåller nu endast Right.
  8. Det passerar ett mellanslag och lägger till Straight i listan. Listan innehåller nu Right, Straight.
  9. Efter höger sväng innehåller listan höger, rak, höger vilket är den direkta vägen.

Steg 2: Överväganden när du programmerar roboten

ÖVERSIKT FÖR NÅGON MIKROKONTROLL

När roboten bestämmer sig för att vända ska den antingen göra ett brett varv, eller gå fram en kort sträcka innan den svänger och efter att ha svängt gå fram en kort sträcka igen utan att kontrollera sensorn. Anledningen till det första korta avståndet är att roboten inte skulle stöta på väggen efter svängen, och anledningen till det andra korta avståndet är att efter att roboten har vänt, skulle sensorn se det långa utrymmet den just hade kommit ifrån, och roboten skulle tro att den borde vända igen, vilket inte är det rätta.

När roboten känner av en korsning till höger men det inte är en höger sväng, har jag funnit att det är bra att ha roboten att köra fram cirka 10 tum (25 cm) utan att kontrollera sina sensorer.

ÖVRIGA HÄNDELSER FÖR LEGO MINDSTORMS EV3

Även om LEGO Mindstorms EV3 är mycket mångsidig tillåter den inte mer än en av varje typ av sensorer som är anslutna till en tegelsten. Två eller flera tegelstenar kan vara kedjiga, men jag ville inte köpa en annan tegelsten, så jag använde följande sensorer (istället för tre ultraljudssensorer): infraröd sensor, färgsensor och ultraljudssensor. Detta fungerade bra.

Men färgsensorn har en mycket kort räckvidd, cirka 5 cm, vilket leder till några speciella överväganden som beskrivs nedan:

  1. När färgsensorn upptäcker en vägg framför och roboten bestämmer sig för att svänga åt höger eller vända, bör den backa först för att ge sig själv tillräckligt med utrymme att vända utan att stöta på väggen.
  2. Ett komplicerat problem uppstår med några "raka" korsningar. På grund av färgsensorns korta räckvidd kan roboten inte avgöra om den känner av en riktig "rak" korsning eller inledningen till en höger sväng. Jag har försökt att åtgärda problemet genom att ställa in programmet för att lagra en "Straight" i listan varje gång roboten känner av en och sedan eliminera mer än en "Straight" i rad i listan. Detta fixar situationen där en höger sväng följer en "Straight" i labyrinten men inte situationen där det finns en höger sväng utan en "Straight" före den. Jag försökte också ställa in programmet för att eliminera en "Straight" om det är precis före en "Right" men det fungerar inte om en höger sväng följer en "Straight". Jag har inte lyckats hitta en lösning som passar alla fall, även om jag antar att det skulle vara möjligt för roboten att titta på avståndet (genom att läsa av motorrotationssensorerna) och avgöra om det är en "rak" eller en höger sväng. Jag tyckte inte att denna komplikation var värd att göra för att demonstrera AI -konceptet i detta projekt.
  3. En fördel med färgsensorn är att den skiljer mellan det bruna på en vägg och det röda på barriären som jag använde vid utgången, och ger ett enkelt sätt för roboten att bestämma när den har avslutat labyrinten.

Steg 3: Huvudprogrammet

Huvudprogrammet
Huvudprogrammet

LEGO Mindstorms EV3 har en mycket bekväm ikonbaserad programmeringsmetod. Block visas längst ner på skärmen på datorn och kan dras och släppas in i programmeringsfönstret för att bygga ett program. EV3 Brick kan vara ansluten till datorn antingen med en USB-kabel, Wi-Fi eller Bluetooth, och programmet kan sedan laddas ner från datorn till brickan.

Programmet består av ett huvudprogram och flera "Mina block" som är underprogram. Den uppladdade filen innehåller hela programmet som finns här:

Stegen i huvudprogrammet är följande:

  1. Definiera och initiera varvräknaren och matrisen.
  2. Vänta 5 sekunder och säg "Go".
  3. Starta en loop.
  4. Kör genom labyrinten. När utgången nås, avslutas slingan.
  5. Visa på tegelstenens skärm de korsningar som hittills hittats i labyrinten.
  6. Kontrollera om vägen ska förkortas.
  7. Visa korsningarna i den förkortade vägen.
  8. Gå tillbaka till steg 4.
  9. Efter slingan, kör den direkta vägen.

Skärmbilden visar detta huvudprogram.

Steg 4: The My Blocks (Subroutines)

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

Navigera mitt block, som styr hur roboten kör genom labyrinten, visas. Utskriften är mycket liten och kanske inte läsbar. Men det är ett bra exempel på hur mångsidiga och kraftfulla if-satserna (kallas Switches i LEGO EV3-systemet).

  1. Pil #1 pekar på en switch som kontrollerar om den infraröda sensorn ser ett objekt mer än ett visst avstånd bort. Om så är fallet utförs den översta serien av block. Om inte, överförs kontrollen till den stora, nedre serien av block, där pil nr 2 finns.
  2. Pil #2 pekar på en switch som kontrollerar vilken färg färgsensorn ser. Det finns tre fall: ingen färg överst, röd i mitten och brun längst ner.
  3. Två pilar #3 pekar på switchar som kontrollerar om ultraljudssensorn ser ett objekt mer än ett visst avstånd bort. Om så är fallet utförs den översta serien av block. Om inte, överförs kontrollen till den nedre serien av block.

Mina block för att förkorta vägen och för att köra den direkta vägen är mer komplicerade och skulle vara helt oläsliga, och därför ingår de inte i detta dokument.

Steg 5: Börja bygga roboten: basen

Börjar bygga roboten: basen
Börjar bygga roboten: basen
Börjar bygga roboten: basen
Börjar bygga roboten: basen

Som tidigare nämnts tillåter LEGO Mindstorms EV3 inte mer än en av varje typ av sensorer ansluten till en tegelsten. Jag använde följande sensorer (istället för tre ultraljudssensorer): infraröd sensor, färgsensor och ultraljudssensor.

Paren nedan visar hur du bygger roboten. Det första fotot av varje par visar de delar som behövs, och det andra fotot visar samma delar som är sammankopplade.

Det första steget är att bygga robotens bas med hjälp av de visade delarna. Robotbasen visas upp och ner. Den lilla L-formade delen på baksidan av roboten är ett stöd för ryggen. Den glider när roboten rör sig. Det här fungerar okej. EV3-kitet har ingen del av rullboll.

Steg 6: Överst på basen, 1

Ovanpå basen, 1
Ovanpå basen, 1
Ovanpå basen, 1
Ovanpå basen, 1

Det här steget och de två nästa stegen är för toppen av roboten, färgsensorn och kablarna, som alla är 10 tum (26 cm) kablar.

Steg 7: Överst på basen, 2

Ovanpå basen, 2
Ovanpå basen, 2
Ovanpå basen, 2
Ovanpå basen, 2

Steg 8: Överst på basen, 3

Ovanpå basen, 3
Ovanpå basen, 3
Ovanpå basen, 3
Ovanpå basen, 3

Steg 9: Infraröda och ultraljudssensorer

Infraröda och ultraljudssensorer
Infraröda och ultraljudssensorer
Infraröda och ultraljudssensorer
Infraröda och ultraljudssensorer

Därefter är den infraröda sensorn (på robotens vänstra sida) och ultraljudssensorn (till höger). Dessutom de 4 stiften för att fästa brickan ovanpå.

De infraröda och ultraljudssensorerna är placerade vertikalt istället för den normala horisontalen. Detta ger bättre identifiering av hörnen eller ändarna på väggarna.

Steg 10: Kablar

Kablar
Kablar

Kablarna ansluts till brickan enligt följande:

  • Port B: vänster stor motor.
  • Port C: höger stor motor.
  • Port 2: ultraljudssensor.
  • Port 3: färggivare.
  • Port 4: infraröd sensor.

Steg 11: Sista steget i att bygga roboten: dekoration

Sista steget i att bygga roboten: dekoration
Sista steget i att bygga roboten: dekoration
Sista steget i att bygga roboten: dekoration
Sista steget i att bygga roboten: dekoration

Vingarna och fenorna är endast för dekoration.

Steg 12: Bygg en labyrint

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

Två wellpappkartonger bör räcka för labyrinten. Jag gjorde labyrintväggarna 12,5 cm höga, men 10 cm borde fungera lika bra om du saknar wellpapp.

Först skar jag runt kartongernas väggar, 25 cm från botten. Sedan skar jag runt väggarna 5 tum från botten. Detta ger flera 5-tums väggar. Jag skar också runt kartongernas bottnar och lämnade cirka 2,5 cm (2,5 cm) fäst på väggarna för stabilitet.

De olika bitarna kan klippas och limas eller tejpas där det behövs för att bilda labyrinten. Det bör finnas ett 11 eller 12 tum (30 cm) utrymme mellan sidoväggarna i alla banor med en återvändsgränd. Längden bör inte vara mindre än 10 tum (25 cm). Dessa avstånd behövs för att roboten ska vända.

Några av labyrintens hörn kan behöva förstärkas. Vissa raka väggar måste också undvikas att böjas om de inkluderar ett rakt kartonghörn. Små bitar av tunn kartong ska limmas i botten på dessa platser, som visas.

Utgången har en röd barriär bestående av ett halvt rött gratulationskortkuvert och en sockel gjord av 2 bitar tunn kartong, som visas.

Steg 13: Labyrinten

Labyrinten
Labyrinten

En försiktighet är att labyrinten inte ska vara stor. Om robotens svängar har en liten vinkel från den rätta, ökar avvikelserna efter några varv och roboten kan springa in i väggarna. Jag var tvungen att tjata flera gånger med rotationsinställningarna för svängarna för att få en lyckad körning genom till och med den lilla labyrinten jag gjorde.

Ett sätt att kringgå den frågan är att inkludera en rutin som riktar vägen som skulle hålla roboten ett visst avstånd från vänster vägg. Jag inkluderade inte detta. Programmet är tillräckligt komplicerat som det är, och det är tillräckligt för att demonstrera AI -konceptet i detta projekt.

SLUTSATSANMÄRKNING

Detta var ett roligt projekt och en stor lärandeupplevelse. Jag hoppas att du också tycker att det är intressant.

Rekommenderad: