Sadržaj:

AI u LEGO EV3 robotu za vožnju labirintom: 13 koraka
AI u LEGO EV3 robotu za vožnju labirintom: 13 koraka

Video: AI u LEGO EV3 robotu za vožnju labirintom: 13 koraka

Video: AI u LEGO EV3 robotu za vožnju labirintom: 13 koraka
Video: #1 Bauanleitung Lego-Technic Scania - LKW - Kran 2024, Srpanj
Anonim
Image
Image
Kako je riješen labirint
Kako je riješen labirint

Ovo je jednostavan, autonomni robot s nešto umjetne inteligencije. Dizajniran je za istraživanje labirinta, a kad se vrati na ulaz, za vožnju kroz izlaz i izbjegavanje slijepih ulica. Mnogo je složeniji od mog prethodnog projekta, koji je jednostavno prošao kroz labirint. Ovdje se robot mora sjetiti puta koji je prešao, ukloniti slijepe ulice, pohraniti novi put, a zatim slijediti novi put.

Moj prethodni robot opisan je ovdje:

Robot je izrađen pomoću LEGO Mindstorms EV3. EV3 softver radi na računalu i generira program koji se zatim preuzima na mikrokontroler pod nazivom EV3 Brick. Metoda programiranja temelji se na ikonama i na visokoj je razini. Vrlo je jednostavan i svestran.

Pribor

DIJELOVI

  1. Komplet LEGO Mindstorms EV3
  2. LEGO ultrazvučni senzor EV3 Mindstorms EV3. Nije uključen u set EV3.
  3. Valoviti karton za labirint. Dva kartona bi trebala biti dovoljna.
  4. Mali komad tankog kartona za stabilizaciju nekih uglova i zidova.
  5. Ljepilo i traka za povezivanje kartonskih komada.
  6. Crvena omotnica s čestitkom za identifikaciju izlaza iz labirinta.

ALATI

  1. Pomoćni nož za rezanje kartona.
  2. Čelično ravnalo za pomoć pri rezanju.

SOFTVER

Program je ovdje:

Korak 1: Kako se rješava labirint

METODA VOŽNJE U LABORITU

Postoji nekoliko metoda kretanja labirintom. Ako ste zainteresirani za njihovo proučavanje, oni su vrlo dobro opisani u sljedećem članku na Wikipediji:

Odabrao sam metodu slijeđenja lijevog zida. Ideja je da će robot zadržati zid s lijeve strane donoseći sljedeće odluke dok prolazi kroz labirint:

  1. Ako je moguće skrenuti ulijevo, učinite to.
  2. U suprotnom, idite ravno ako je moguće.
  3. Ako ne može ići lijevo ili ravno, ako je moguće, skrenite desno.
  4. Ako ništa od gore navedenog nije moguće, ovo mora biti slijepa ulica. Okrenuti se.

Jedan je upozorenje da bi metoda mogla uspjeti ako labirint ima petlju. Ovisno o položaju petlje, robot bi se mogao stalno kretati oko petlje. Moguće rješenje za ovaj problem bilo bi da robot pređe na pravilo praćenja zidova s desne strane ako shvati da ide u petlju. Ovo poboljšanje nisam uključio u svoj projekt.

RJEŠAVANJE LABORITETA DA SE NAĐE IZRAVNI PUT

Tijekom vožnje kroz labirint robot mora zapamtiti put kojim putuje i ukloniti slijepe ulice. To postiže spremanjem svakog zavoja i raskrižja u niz, provjerom specifičnih kombinacija zavoja i raskrižja u tijeku te zamjenom kombinacija koje uključuju slijepu ulicu. Konačni popis skretanja i raskrižja izravan je put kroz labirint.

Mogući zavoji su: lijevo, desno, natrag (u slijepoj ulici) i ravno (što je raskrižje).

Kombinacije se zamjenjuju na sljedeći način:

  • "Lijevo, natrag, lijevo" postaje "ravno".
  • "Lijevo, natrag, desno" postaje "natrag".
  • "Lijevo, natrag, ravno" postaje "desno".
  • "Desno, natrag, nalijevo" postaje "natrag".
  • "Ravno, natrag, nalijevo" postaje "desno".
  • "Ravno, natrag, ravno" postaje "natrag".

KAKO ROBOT RUKAVA S MOJIM LABIRINOM

  1. Kada robot počne voziti, vidi prostor s desne strane i pohranjuje Straight na popis u nizu.
  2. Zatim skreće ulijevo i dodaje Lijevo na popis. Popis sada sadrži: ravno, lijevo.
  3. S slijepe ulice, okreće se i dodaje Natrag na popis. Popis sada sadrži: ravno, lijevo, natrag.
  4. Prolazeći trakom kojom se koristio od ulaza, dodaje Straight na popis. Popis sada sadrži: ravno, lijevo, natrag, ravno. Prepoznaje kombinaciju i mijenja lijevo, natrag, ravno udesno. Popis sada sadrži Ravno, Desno.
  5. S slijepe ulice, okreće se i dodaje Natrag na popis. Popis sada sadrži: ravno, desno, natrag.
  6. Nakon skretanja ulijevo popis sadrži Ravno, Desno, Nazad, Lijevo. Prepoznaje kombinaciju i mijenja desno, natrag, slijeva na leđa. Popis sada sadrži ravno, natrag.
  7. Nakon sljedećeg skretanja ulijevo popis sadrži Ravno, Nazad, Lijevo. Mijenja tu kombinaciju u Desno. Popis sada sadrži samo Desno.
  8. Prolazi razmakom i dodaje Straight na popis. Popis sada sadrži Desno, Ravno.
  9. Nakon skretanja udesno popis sadrži Desno, Ravno, Desno što je izravna staza.

Korak 2: Razmatranja pri programiranju robota

RAZMATRANJA ZA BILO KOJI MIKROKONTROLER

Kad se robot odluči okrenuti, trebao bi ili napraviti veliki zaokret, ili otići nakratko naprijed prije skretanja, a nakon skretanja opet nakratko naprijed bez provjere senzora. Razlog za prvu kratku udaljenost je taj što se robot ne bi trebao zabiti u zid nakon skretanja, a razlog za drugu kratku udaljenost je taj što bi nakon što se robot okrenuo, senzor vidio dugačak prostor s kojeg je upravo došao, i robot bi pomislio da bi se trebao ponovno okrenuti, što nije ispravno učiniti.

Kad robot osjeti križanje s desne strane, ali to nije desno skretanje, otkrio sam da je dobro da robot vozi naprijed oko 25 inča (25 cm) bez provjere njegovih senzora.

RAZMATRANJA POSEBNA ZA LEGO MINDSTORMS EV3

Iako je LEGO Mindstorms EV3 vrlo svestran, ne dopušta više od jednog tipa senzora spojenog na jednu ciglu. Dvije ili više opeka mogle su biti vezane tratinčicom, ali nisam htio kupiti drugu opeku, pa sam upotrijebio sljedeće senzore (umjesto tri ultrazvučna senzora): infracrveni senzor, senzor boje i ultrazvučni senzor. Ovo je dobro ispalo.

No, senzor boje ima vrlo kratak raspon, od oko 2 inča (5 cm), što dovodi do nekoliko posebnih razmatranja kako je dolje opisano:

  1. Kad senzor boje otkrije zid ispred i robot odluči skrenuti udesno ili se okrenuti, trebao bi se prvo povući, kako bi sebi dao dovoljno prostora za okretanje, a da ne naleti na zid.
  2. Složen problem javlja se s nekim "ravno" raskrižjima. Zbog kratkog dometa senzora boje, robot ne može odrediti je li osjetio ispravno “ravno” raskrižje ili je doveo do skretanja udesno. Pokušao sam riješiti ovaj problem postavljanjem programa tako da pohranjuje "Ravno" na popis svaki put kada ga robot osjeti, a zatim eliminira više od jednog "Ravnog" zaredom na popisu. Ovo popravlja situaciju u kojoj skretanje udesno slijedi "Ravno" u labirintu, ali ne i situaciju u kojoj postoji skretanje udesno bez "Ravne" prije njega. Također sam pokušao postaviti program tako da eliminira "Ravno" ako je neposredno prije "Desno", ali to ne uspijeva ako skretanje udesno slijedi "Ravno". Nisam uspio pronaći rješenje koje odgovara svim slučajevima, iako pretpostavljam da bi bilo moguće da robot pogleda prijeđenu udaljenost (čitanjem senzora rotacije motora) i odluči je li to "Ravno" ili desno skretanje. Nisam mislio da je ovu komplikaciju vrijedno učiniti u svrhu demonstriranja koncepta umjetne inteligencije u ovom projektu.
  3. Prednost senzora boje je u tome što razlikuje smeđu boju zida i crvenu barijeru koju sam koristio na izlazu te omogućuje robotu jednostavan način odlučivanja kada je završio labirint.

Korak 3: Glavni program

Glavni program
Glavni program

LEGO Mindstorms EV3 ima vrlo prikladnu metodu programiranja zasnovanu na ikonama. Blokovi su prikazani pri dnu zaslona na računalu i mogu se povući i ispustiti u prozor za programiranje za izradu programa. EV3 Brick može biti spojen na računalo putem USB kabela, Wi-Fi-ja ili Bluetootha, a program se tada može preuzeti s računala na Brick.

Program se sastoji od glavnog programa i nekoliko "Mojih blokova" koji su potprogrami. Učitana datoteka sadrži cijeli program koji se nalazi ovdje:

Koraci u glavnom programu su sljedeći:

  1. Definirajte i inicijalizirajte varijablu brojanja skretanja i niz.
  2. Pričekajte 5 sekundi i recite "Idi".
  3. Započni petlju.
  4. Vozite kroz labirint. Kad se dođe do izlaza, petlja se napušta.
  5. Prikažite na Brick -ovom ekranu, raskrižja pronađena u labirintu do sada.
  6. Provjerite treba li put skratiti.
  7. Prikažite raskrižja na skraćenoj putanji.
  8. Povratak na korak 4.
  9. Nakon petlje vozite izravnom stazom.

Snimka zaslona prikazuje ovaj glavni program.

Korak 4: Moji blokovi (potprogrami)

Moji blokovi (potprogrami)
Moji blokovi (potprogrami)

Prikazan je Navigate My Block, koji kontrolira kako robot vozi kroz labirint. Otisak je vrlo mali i možda neće biti čitljiv. No, to je dobar primjer koliko su if-naredbe svestrane i moćne (u sustavu LEGO EV3 nazivaju se prekidači).

  1. Strelica 1 pokazuje na prekidač koji provjerava vidi li infracrveni senzor objekt udaljen više od određene udaljenosti. Ako je tako, izvršava se gornja serija blokova. Ako nije, tada se kontrola prenosi na veliki, donji niz blokova, gdje se nalazi strelica #2.
  2. Strelica 2 pokazuje na prekidač koji provjerava boju koju senzor boje vidi. Postoje 3 slučaja: bez boje pri vrhu, crvena u sredini i smeđa pri dnu.
  3. Dvije strelice #3 pokazuju na Prekidače koji provjeravaju vidi li ultrazvučni senzor objekt udaljen više od određene udaljenosti. Ako je tako, izvršava se gornja serija blokova. Ako nije, tada se kontrola prenosi na donji niz blokova.

Moji blokovi za skraćivanje puta i vožnju izravnim putem složeniji su i bili bi potpuno nečitljivi, pa nisu uključeni u ovaj dokument.

Korak 5: Početak izgradnje robota: baza

Početak izgradnje robota: baza
Početak izgradnje robota: baza
Početak izgradnje robota: baza
Početak izgradnje robota: baza

Kao što je ranije spomenuto, LEGO Mindstorms EV3 ne dopušta više od jednog tipa senzora spojenog na jednu ciglu. Koristio sam sljedeće senzore (umjesto tri ultrazvučna senzora): infracrveni senzor, senzor boje i ultrazvučni senzor.

Parovi fotografija u nastavku pokazuju kako izgraditi robota. Prva fotografija svakog para prikazuje potrebne dijelove, a druga fotografija prikazuje iste dijelove povezane zajedno.

Prvi korak je izgradnja baze robota, pomoću prikazanih dijelova. Baza robota prikazana je naopako. Mali dio u obliku slova L na stražnjoj strani robota potpora je za leđa. Klizi dok se robot kreće. Ovo radi u redu. Komplet EV3 nema dio tipa kotrljajuće kugle.

Korak 6: Vrh baze, 1

Vrh baze, 1
Vrh baze, 1
Vrh baze, 1
Vrh baze, 1

Ovaj korak i sljedeća 2 koraka odnose se na vrh baze robota, senzor boje i kabele, koji su svi kabeli od 10 inča (26 cm).

Korak 7: Vrh baze, 2

Vrh baze, 2
Vrh baze, 2
Vrh baze, 2
Vrh baze, 2

Korak 8: Vrh baze, 3

Vrh baze, 3
Vrh baze, 3
Vrh baze, 3
Vrh baze, 3

Korak 9: Infracrveni i ultrazvučni senzori

Infracrveni i ultrazvučni senzori
Infracrveni i ultrazvučni senzori
Infracrveni i ultrazvučni senzori
Infracrveni i ultrazvučni senzori

Zatim su infracrveni senzor (s lijeve strane robota) i ultrazvučni senzor (s desne strane). Također, 4 igle za pričvršćivanje opeke na vrh.

Infracrveni i ultrazvučni senzori nalaze se okomito umjesto normalne vodoravne. To omogućuje bolju identifikaciju uglova ili krajeva zidova.

Korak 10: Kablovi

Kablovi
Kablovi

Kablovi se spajaju s opekom na sljedeći način:

  • Priključak B: lijevi veliki motor.
  • Priključak C: veliki desni motor.
  • Priključak 2: ultrazvučni senzor.
  • Priključak 3: senzor boje.
  • Priključak 4: infracrveni senzor.

Korak 11: Posljednji korak u izgradnji robota: Dekoracija

Posljednji korak u izgradnji robota: Dekoracija
Posljednji korak u izgradnji robota: Dekoracija
Posljednji korak u izgradnji robota: Dekoracija
Posljednji korak u izgradnji robota: Dekoracija

Krila i peraje služe samo za ukras.

Korak 12: Izgradite labirint

Izgradite labirint
Izgradite labirint
Izgradite labirint
Izgradite labirint

Dva kartona od valovitog kartona trebala bi biti dovoljna za labirint. Napravio sam zidove labirinta visine 5 inča (12,5 cm), ali 4 inča (10 cm) bi trebali djelovati jednako dobro ako vam nedostaje valovitog kartona.

Prvo sam izrezao zidove kartona, 10 inča (25 cm) od dna. Zatim sam izrezao zidove 5 centimetara od dna. Time se dobiva nekoliko 5-inčnih zidova. Također sam rezao oko dna kartona, ostavljajući oko 1 inč (2,5 cm) pričvršćen na zidove radi stabilnosti.

Različiti komadi mogu se rezati i lijepiti ili lijepiti ljepljivom trakom gdje god je to potrebno za oblikovanje labirinta. Između bočnih stijenki na bilo kojoj stazi sa slijepom ulicom trebao bi biti razmak od 11 ili 12 inča (30 cm). Duljina ne smije biti manja od 10 inča (25 cm). Te su udaljenosti potrebne da bi se robot okrenuo.

Neki od uglova labirinta možda će morati biti pojačani. Također, neke ravne zidove treba čuvati od savijanja ako uključuju poravnati kartonski ugao. Male komade tankog kartona treba zalijepiti na dno na tim mjestima, kao što je prikazano.

Izlaz ima crvenu barijeru koja se sastoji od polovine crvene omotnice s čestitkom i podloge od 2 komada tankog kartona, kako je prikazano.

Korak 13: Labirint

Labirint
Labirint

Jedan je upozorenje da labirint ne smije biti velik. Ako su zavoji robota pod malim kutom od odgovarajućeg, odstupanja se zbrajaju nakon nekoliko zavoja i robot bi mogao naletjeti na zidove. Morao sam se nekoliko puta petljati s postavkama rotacije zavoja kako bih uspio proći čak i kroz mali labirint koji sam napravio.

Zaobilaženje tog problema je uključivanje rutine ispravljanja puta koja bi zadržala robota na određenoj udaljenosti od lijevog zida. Ovo nisam uključio. Program je dovoljno kompliciran i dovoljan je za demonstraciju koncepta umjetne inteligencije u ovom projektu.

ZAKLJUČNA NAPOMENA

Ovo je bio zabavan projekt i veliko iskustvo učenja. Nadam se da će vam i to biti zanimljivo.

Preporučeni: