Turinys:

AI LEGO EV3 labirintą vairuojančiame robote: 13 žingsnių
AI LEGO EV3 labirintą vairuojančiame robote: 13 žingsnių

Video: AI LEGO EV3 labirintą vairuojančiame robote: 13 žingsnių

Video: AI LEGO EV3 labirintą vairuojančiame robote: 13 žingsnių
Video: AI in LEGO EV3 Maze-Driving Robot 2024, Liepa
Anonim
Image
Image
Kaip išsprendžiamas labirintas
Kaip išsprendžiamas labirintas

Tai paprastas, autonomiškas robotas su tam tikru dirbtiniu intelektu. Jis skirtas tyrinėti labirintą ir, kai jis vėl pastatytas prie įėjimo, važiuoti per išėjimą ir išvengti aklavietės. Tai daug sudėtingiau nei mano ankstesnis projektas, kuris tiesiog vedė labirintą. Čia robotas turi prisiminti nuvažiuotą kelią, pašalinti aklavietes, išsaugoti naują kelią ir tada eiti nauju keliu.

Mano ankstesnis robotas aprašytas čia:

Robotas sukurtas naudojant „LEGO Mindstorms EV3“. „EV3“programinė įranga veikia kompiuteryje ir sukuria programą, kuri vėliau atsisiunčiama į mikrovaldiklį, vadinamą „EV3 Brick“. Programavimo metodas pagrįstas piktogramomis ir yra aukšto lygio. Tai labai lengva ir universalu.

Prekės

DALYS

  1. LEGO Mindstorms EV3 rinkinys
  2. LEGO ultragarso jutiklis „Mindstorms EV3“. Jis neįeina į EV3 rinkinį.
  3. Gofruotas kartonas labirintui. Dviejų dėžių turėtų pakakti.
  4. Mažas plono kartono gabalas, padedantis stabilizuoti kai kuriuos kampus ir sienas.
  5. Klijai ir juostelė, skirta sujungti kartono gabalus.
  6. Raudonas sveikinimo atviruko vokas, skirtas identifikuoti išėjimą iš labirinto.

ĮRANKIAI

  1. Naudingas peilis kartonui pjaustyti.
  2. Plieninė liniuotė, padedanti pjaustyti.

PROGRAMINĖ ĮRANGA

Programa yra čia:

1 žingsnis: kaip išsprendžiamas labirintas

VAIRUOTOJIMO METODAS

Yra keletas būdų, kaip naršyti labirintą. Jei jus domina jų studijavimas, jie labai gerai aprašyti šiame Vikipedijos straipsnyje:

Aš pasirinkau kairiosios sienos sekimo metodą. Idėja yra ta, kad robotas laikys sieną kairėje pusėje, priimdamas šiuos sprendimus, eidamas per labirintą:

  1. Jei įmanoma pasukti į kairę, padarykite tai.
  2. Priešingu atveju, jei įmanoma, eikite tiesiai.
  3. Jei jis negali eiti į kairę arba tiesiai, jei įmanoma, pasukite į dešinę.
  4. Jei nė vienas iš aukščiau išvardytų dalykų neįmanomas, tai turi būti aklavietė. Apsisuk.

Vienas įspėjimas yra tas, kad metodas gali nepavykti, jei labirinte yra kilpa. Priklausomai nuo kilpos padėties, robotas galėtų nuolat judėti aplink ir aplink kilpą. Galimas šios problemos sprendimas būtų, jei robotas persijungtų į dešiniojo sienos sekimo taisyklę, jei suprastų, kad eina ciklu. Aš neįtraukiau šio patobulinimo į savo projektą.

TINKLIUOTI TIESIOGINĮ KELIĄ

Važiuodamas per labirintą, robotas turi įsiminti savo kelią ir pašalinti aklavietes. Jis tai pasiekia išsaugodamas kiekvieną posūkį ir sankryžą masyve, tikrindamas, ar nėra konkrečių posūkių ir sankryžų derinių, ir pakeis derinius, apimančius aklavietę. Galutinis posūkių ir sankryžų sąrašas yra tiesioginis kelias per labirintą.

Galimi posūkiai: kairė, dešinė, atgal (aklavietėje) ir tiesus (tai yra sankryža).

Deriniai pakeičiami taip:

  • „Kairė, atgal, kairė“tampa „tiesia“.
  • „Kairė, atgal, dešinė“tampa „atgal“.
  • „Kairė, atgal, tiesiai“tampa „teisinga“.
  • „Dešinė, atgal, kairė“tampa „atgal“.
  • „Tiesiai, atgal, kairėn“tampa „teisinga“.
  • „Tiesiai, atgal, tiesiai“tampa „Atgal“.

KAIP ROBOTAS Tvarkosi su mano labirintais

  1. Kai robotas pradeda važiuoti, jis mato tarpą dešinėje ir išsaugo „Straight“masyvo sąraše.
  2. Tada jis pasuka į kairę ir įtraukia sąrašą į kairę. Dabar sąraše yra: tiesiai, kairėn.
  3. Aklavietėje jis apsisuka ir įtraukia atgal į sąrašą. Sąraše dabar yra: tiesiai, kairėn, atgal.
  4. Pravažiavęs eismo juostą nuo įėjimo, jis įtraukia sąrašą tiesiai. Dabar sąraše yra: Tiesus, Kairysis, Nugara, Tiesus. Jis atpažįsta derinį ir keičia kairę, nugarą, tiesiai į dešinę. Sąraše dabar yra tiesiai, dešinė.
  5. Aklavietėje jis apsisuka ir įtraukia atgal į sąrašą. Dabar sąraše yra: tiesiai, dešinėn, atgal.
  6. Pasukus į kairę, sąraše yra tiesi, dešinė, atgal, kairė. Jis atpažįsta derinį ir keičia dešinę, atgal, kairę atgal. Sąraše dabar yra tiesiai, atgal.
  7. Po kito posūkio į kairę sąraše yra tiesi, atgal, kairė. Tai pakeičia šį derinį į dešinę. Sąraše dabar yra tik Teisė.
  8. Jis praleidžia tarpą ir įtraukia sąrašą tiesiai. Sąraše dabar yra Teisė, tiesiai.
  9. Po posūkio į dešinę sąraše yra dešinysis, tiesusis, dešinysis, kuris yra tiesioginis kelias.

2 žingsnis: svarstymai programuojant robotą

BET KOKIO MIKROVALDYTOJO SĄVOKOS

Kai robotas nusprendžia pasukti, jis turi arba plačiai pasukti, arba prieš apsisukdamas eiti į priekį, o pasukus - vėl trumpą atstumą, nepatikrinęs jutiklio. Pirmojo trumpo atstumo priežastis yra ta, kad robotas po posūkio neturėtų atsitrenkti į sieną, o antro trumpo atstumo priežastis yra ta, kad pasukus robotą jutiklis matytų ilgą erdvę, iš kurios ką tik atėjo, ir robotas manytų, kad jis turėtų vėl suktis, o tai nėra tinkamas dalykas.

Kai robotas suvokia sankryžą dešinėje, bet tai nėra posūkis į dešinę, pastebėjau, kad gerai, kad robotas važiuoja į priekį apie 10 colių (25 cm), nepatikrinęs jo jutiklių.

LEGO MINDSTORMS EV3

Nors „LEGO Mindstorms EV3“yra labai universalus, prie vieno kaladėlės galima prijungti ne daugiau kaip vieną kiekvieno tipo jutiklį. Dvi ar daugiau plytų gali būti surištos grandine, bet aš nenorėjau pirkti kitos plytos, todėl naudoju šiuos jutiklius (vietoj trijų ultragarso jutiklių): infraraudonųjų spindulių jutiklį, spalvų jutiklį ir ultragarso jutiklį. Tai gerai pavyko.

Tačiau spalvų jutiklis turi labai trumpą diapazoną - apie 2 colius (5 cm), todėl reikia atsižvelgti į keletą specialių aplinkybių, kaip aprašyta toliau:

  1. Kai spalvų jutiklis aptinka priešais esančią sieną ir robotas nusprendžia pasukti į dešinę arba apsisukti, jis pirmiausia turėtų atsarginę kopiją, kad paliktų pakankamai vietos apsisukti, nesitrenkdamas į sieną.
  2. Sudėtinga problema kyla su kai kuriomis „tiesiomis“sankryžomis. Dėl trumpo spalvų jutiklio nuotolio robotas negali nustatyti, ar jis jaučia tinkamą „tiesią“sankryžą, ar posūkį į dešinę. Aš bandžiau išspręsti šią problemą, nustatydamas programą, kad sąraše kiekvieną kartą, kai robotas aptiks vieną, išsaugotų „tiesią“ir pašalintų daugiau nei vieną „tiesią“iš eilės sąraše. Tai ištaiso situaciją, kai posūkis į dešinę labirinte eina po „tiesios“, bet ne situacija, kai posūkis į dešinę be „tiesios“prieš jį. Aš taip pat bandžiau nustatyti programą, kad pašalintų „tiesią“, jei ji yra priešais „dešinę“, bet tai neveikia, jei posūkis į dešinę eina po „tiesios“. Man nepavyko rasti sprendimo, tinkančio visiems atvejams, nors manau, kad robotas galėtų pažvelgti į nuvažiuotą atstumą (skaitydamas variklio sukimosi jutiklius) ir nuspręsti, ar tai „tiesus“, ar teisingas pasukti. Nemaniau, kad šią komplikaciją verta daryti siekiant parodyti AI koncepciją šiame projekte.
  3. Spalvų jutiklio pranašumas yra tas, kad jis išskiria rudą sienos sieną ir raudoną užtvarą, kurią naudoju prie išėjimo, ir suteikia paprastą būdą robotui nuspręsti, kada jis baigė labirintą.

3 žingsnis: pagrindinė programa

Pagrindinė programa
Pagrindinė programa

LEGO Mindstorms EV3 turi labai patogų piktogramų programavimo metodą. Blokai rodomi kompiuterio ekrano apačioje ir gali būti nuvilkti į programavimo langą, kad būtų sukurta programa. „EV3 Brick“gali būti prijungtas prie kompiuterio USB kabeliu, „Wi-Fi“arba „Bluetooth“ryšiu, tada programa gali būti atsisiųsta iš kompiuterio į „Brick“.

Programa susideda iš pagrindinės programos ir kelių „Mano blokų“, kurie yra paprogramės. Įkeltame faile yra visa programa, kuri yra čia:

Pagrindinės programos veiksmai yra šie:

  1. Apibrėžkite ir inicijuokite posūkių skaičiavimo kintamąjį ir masyvą.
  2. Palaukite 5 sekundes ir pasakykite „Eik“.
  3. Pradėkite ciklą.
  4. Važiuokite per labirintą. Pasiekus išėjimą, kilpa išeina.
  5. Rodyti plytų ekrane, iki šiol labirinte rastos sankryžos.
  6. Patikrinkite, ar kelias neturėtų būti sutrumpintas.
  7. Pateikite sutrumpinto kelio sankryžas.
  8. Grįžkite prie 4 veiksmo.
  9. Po ciklo važiuokite tiesioginiu keliu.

Ekrano kopijoje parodyta ši pagrindinė programa.

4 žingsnis: „Mano blokai“(paprogramės)

Mano blokai (paprogramės)
Mano blokai (paprogramės)

Rodomas „Navigate My Block“, kuris valdo, kaip robotas važiuoja per labirintą. Spausdinimas yra labai mažas ir gali būti neįskaitomas. Bet tai geras pavyzdys, kaip universalūs ir galingi yra teiginiai „if“(LEGO EV3 sistemoje vadinami jungikliais).

  1. 1 rodyklė rodo jungiklį, kuris patikrina, ar infraraudonųjų spindulių jutiklis mato objektą daugiau nei tam tikru atstumu. Jei taip, vykdoma aukščiausia blokų serija. Jei ne, tada valdymas perduodamas didelei, apatinei blokų serijai, kur yra rodyklė Nr. 2.
  2. 2 rodyklė rodo jungiklį, kuris tikrina, kokią spalvą mato spalvų jutiklis. Yra 3 atvejai: viršuje nėra spalvos, viduryje - raudona, o apačioje - ruda.
  3. Dvi rodyklės Nr. 3 rodo jungiklius, kurie tikrina, ar ultragarso jutiklis mato objektą daugiau nei tam tikru atstumu. Jei taip, vykdoma aukščiausia blokų serija. Jei ne, tada valdymas perduodamas apatinei blokų serijai.

Mano blokai, skirti sutrumpinti kelią ir važiuoti tiesioginiu keliu, yra sudėtingesni ir būtų visiškai neįskaitomi, todėl jie nėra įtraukti į šį dokumentą.

5 žingsnis: Pradėkite kurti robotą: bazę

Pradėti kurti robotą: bazę
Pradėti kurti robotą: bazę
Pradėti kurti robotą: bazę
Pradėti kurti robotą: bazę

Kaip minėta anksčiau, „LEGO Mindstorms EV3“leidžia prijungti ne daugiau kaip vieną kiekvieno tipo jutiklį, prijungtą prie vienos plytos. Aš naudoju šiuos jutiklius (vietoj trijų ultragarso jutiklių): infraraudonųjų spindulių jutiklį, spalvų jutiklį ir ultragarsinį jutiklį.

Žemiau pateiktose nuotraukų porose parodyta, kaip sukurti robotą. Pirmoje kiekvienos poros nuotraukoje matomos reikalingos dalys, o antroje - tos pačios dalys, sujungtos kartu.

Pirmasis žingsnis yra sukurti roboto pagrindą, naudojant parodytas dalis. Roboto bazė parodyta aukštyn kojom. Maža L formos dalis roboto gale yra atrama nugarai. Robotui judant jis slysta. Tai veikia gerai. EV3 komplekte nėra riedėjimo rutulio tipo detalės.

6 žingsnis: pagrindo viršuje, 1

Pagrindo viršuje, 1
Pagrindo viršuje, 1
Pagrindo viršuje, 1
Pagrindo viršuje, 1

Šis ir kiti 2 veiksmai yra skirti roboto pagrindo viršuje, spalvų jutikliui ir kabeliams, kurie visi yra 10 colių (26 cm) kabeliai.

7 žingsnis: pagrindo viršuje, 2

Pagrindo viršuje, 2
Pagrindo viršuje, 2
Pagrindo viršuje, 2
Pagrindo viršuje, 2

8 žingsnis: pagrindo viršuje, 3

Pagrindo viršuje, 3
Pagrindo viršuje, 3
Pagrindo viršuje, 3
Pagrindo viršuje, 3

9 žingsnis: infraraudonųjų spindulių ir ultragarso jutikliai

Infraraudonųjų spindulių ir ultragarso jutikliai
Infraraudonųjų spindulių ir ultragarso jutikliai
Infraraudonųjų spindulių ir ultragarso jutikliai
Infraraudonųjų spindulių ir ultragarso jutikliai

Toliau yra infraraudonųjų spindulių jutiklis (kairėje roboto pusėje) ir ultragarsinis jutiklis (dešinėje). Be to, 4 kaiščiai, skirti viršuje pritvirtinti plytą.

Infraraudonųjų spindulių ir ultragarso jutikliai yra vertikaliai, o ne įprastai horizontaliai. Tai leidžia geriau identifikuoti sienų kampus ar galus.

10 žingsnis: Kabeliai

Kabeliai
Kabeliai

Kabeliai prijungiami prie plytų taip:

  • B prievadas: kairysis didelis variklis.
  • C prievadas: dešinysis didelis variklis.
  • 2 prievadas: ultragarso jutiklis.
  • 3 prievadas: spalvų jutiklis.
  • 4 prievadas: infraraudonųjų spindulių jutiklis.

11 žingsnis: Paskutinis roboto kūrimo žingsnis: dekoravimas

Paskutinis roboto kūrimo žingsnis: dekoravimas
Paskutinis roboto kūrimo žingsnis: dekoravimas
Paskutinis roboto kūrimo žingsnis: dekoravimas
Paskutinis roboto kūrimo žingsnis: dekoravimas

Sparnai ir pelekai skirti tik dekoravimui.

12 žingsnis: sukurkite labirintą

Sukurkite labirintą
Sukurkite labirintą
Sukurkite labirintą
Sukurkite labirintą

Labirinte turėtų pakakti dviejų gofruoto kartono dėžių. Labirinto sienas padariau 5 colių (12,5 cm) aukščio, tačiau 4 coliai (10 cm) turėtų veikti taip pat gerai, jei trūksta gofruoto kartono.

Pirma, aš supjaustau dėžutės sienas, 10 colių (25 cm) nuo apačios. Tada aš supjaustiau aplink sienas 5 colius nuo apačios. Tai suteikia keletą 5 colių sienų. Be to, aš supjaustau dėžutės dugną, kad stabilumas būtų maždaug 2,5 cm.

Įvairūs gabalai gali būti supjaustyti ir klijuoti arba užklijuoti juostele, kur reikia, kad susidarytų labirintas. Bet kokiame kelyje su aklavietėmis tarp šoninių sienų turi būti 11 ar 12 colių (30 cm) tarpas. Ilgis turi būti ne mažesnis kaip 10 colių (25 cm). Šie atstumai reikalingi robotui apsisukti.

Kai kuriuos labirinto kampus gali tekti sutvirtinti. Be to, kai kurios tiesios sienos turi būti sulenktos, jei jose yra ištiesintas kartoninis kampas. Mažos plono kartono dalys turėtų būti priklijuotos prie dugno tose vietose, kaip parodyta.

Išėjime yra raudona užtvara, kurią sudaro pusė raudono sveikinimo atviruko voko ir pagrindas, pagamintas iš 2 plono kartono dalių, kaip parodyta.

13 žingsnis: labirintas

Labirintas
Labirintas

Vienas įspėjimas - labirintas neturėtų būti didelis. Jei roboto posūkiai yra šiek tiek kampu nuo tinkamo, po kelių posūkių neatitikimai padidėja ir robotas gali bėgti į sienas. Turėjau keletą kartų pagroti posūkių nustatymus, kad galėčiau sėkmingai važiuoti net ir nedideliu labirutu, kurį padariau.

Vienintelis būdas išspręsti šią problemą yra įtraukti kelio tiesinimo procedūrą, kuri palaikytų robotą tam tikru atstumu nuo kairiosios sienos. Šito neįtraukiau. Programa yra pakankamai sudėtinga tokia, kokia ji yra, ir jos pakanka demonstruoti AI koncepciją šiame projekte.

PABAIGA PASTABA

Tai buvo įdomus projektas ir puiki mokymosi patirtis. Tikiuosi, kad jums taip pat bus įdomu.

Rekomenduojamas: