Sadržaj:

AI u LEGO EV3 robotu za upravljanje labirintom: 13 koraka
AI u LEGO EV3 robotu za upravljanje labirintom: 13 koraka

Video: AI u LEGO EV3 robotu za upravljanje labirintom: 13 koraka

Video: AI u LEGO EV3 robotu za upravljanje labirintom: 13 koraka
Video: Программирование – информатика для руководителей бизнеса 2016 2024, Juli
Anonim
Image
Image
Kako je labirint riješen
Kako je labirint riješen

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 robot mora zapamtiti put koji je prešao, ukloniti slijepe ulice, pohraniti novi put, a zatim slijediti novi put.

Moj prethodni robot opisan je ovdje:

Robot je napravljen pomoću LEGO Mindstorms EV3. EV3 softver radi na računaru i generira program koji se zatim preuzima na mikrokontroler pod nazivom EV3 Brick. Metoda programiranja je zasnovana na ikonama i na visokom nivou. Vrlo je jednostavan i svestran.

Supplies

DIJELOVI

  1. Komplet LEGO Mindstorms EV3
  2. LEGO ultrazvučni senzor M3 Mindstorms EV3. Nije uključeno u komplet EV3.
  3. Valoviti karton za labirint. Dva kartona bi trebala biti dovoljna.
  4. Mali komad tankog kartona koji pomaže u stabilizaciji nekih uglova i zidova.
  5. Ljepilo i traka za povezivanje kartonskih komada.
  6. Crvena koverta s čestitkom za identifikaciju izlaza iz labirinta.

ALATI

  1. Pomoćni nož za rezanje kartona.
  2. Čelično ravnalo koje pomaže procesu rezanja.

SOFTVER

Program je ovdje:

Korak 1: Kako se rješava labirint

METODA VOŽNJE U MAZU

Postoji nekoliko metoda navigacije 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 držati zid s lijeve strane donoseći sljedeće odluke dok prolazi kroz labirint:

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

Jedno upozorenje je da bi metoda mogla propasti ako labirint ima petlju. Ovisno o položaju petlje, robot bi se mogao stalno kretati oko i oko petlje. Moguće rješenje ovog problema bilo bi da se robot prebaci na pravilo praćenja zidova s desne strane ako shvati da ide u petlju. Ovo poboljšanje nisam uključio u svoj projekat.

RJEŠAVANJE LABORITETA DA SE NAĐE DIREKTNA PUT

Tokom vožnje kroz labirint, robot mora zapamtiti putanju kojom putuje i ukloniti slijepe ulice. To postiže spremanjem svakog skretanja i raskrižja u niz, provjerom specifičnih kombinacija skretanja i raskrižja u tijeku i zamjenom kombinacija koje uključuju slijepu ulicu. Konačna lista skretanja i raskrižja je direktna staza kroz labirint.

Moguća skretanja su: lijevo, desno, nazad (u slijepoj ulici) i ravno (što je raskrsnica).

Kombinacije se zamjenjuju na sljedeći način:

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

KAKO SE ROBOT RUKAVA SA MOJIM LABIRINOM

  1. Kada robot počne voziti, on vidi razmak s desne strane i pohranjuje Straight na listu u nizu.
  2. Zatim skreće lijevo i dodaje lijevo na listu. Lista sada sadrži: ravno, lijevo.
  3. Sa slijepe ulice, okreće se i dodaje Natrag na popis. Lista sada sadrži: Ravno, Lijevo, Nazad.
  4. Prolazeći trakom kojom se koristio od ulaza, dodaje Straight na listu. Lista sada sadrži: Ravno, Lijevo, Nazad, Ravno. Prepoznaje kombinaciju i mijenja lijevo, nazad, ravno udesno. Lista sada sadrži Ravno, Desno.
  5. Sa slijepe ulice, okreće se i dodaje Natrag na popis. Lista sada sadrži: Ravno, Desno, Nazad.
  6. Nakon skretanja ulijevo lista sadrži Ravno, Desno, Nazad, Lijevo. Prepoznaje kombinaciju i mijenja desno, natrag, slijeva na leđa. Lista sada sadrži Ravno, Nazad.
  7. Nakon sljedećeg skretanja ulijevo lista sadrži Ravno, Nazad, Lijevo. Mijenja tu kombinaciju u Desno. Lista sada sadrži samo Desno.
  8. Prolazi razmakom i dodaje Straight na listu. Lista sada sadrži Desno, Ravno.
  9. Nakon skretanja udesno lista sadrži Desno, Ravno, Desno što je direktna 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 ići naprijed kratku udaljenost prije okretanja, a nakon okretanja opet na kratku udaljenost bez provjere senzora. Razlog za prvu kratku udaljenost je taj što robot ne bi trebao udariti u zid nakon skretanja, a razlog za drugu kratku udaljenost je taj što bi nakon što se robot okrenuo, senzor vidio dugačak prostor iz kojeg je upravo došao, i robot bi pomislio da bi se trebao ponovo okrenuti, što nije ispravno učiniti.

Kada robot osjeti raskrižje 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 SPECIFIČNA 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 cigli mogle su biti vezane tratinčicom, ali nisam htio kupiti drugu ciglu, pa sam koristio sljedeće senzore (umjesto tri ultrazvučna senzora): infracrveni senzor, senzor boje i ultrazvučni senzor. Ovo je dobro prošlo.

Ali senzor boje ima vrlo kratak raspon, od oko 2 inča (5 cm), što dovodi do nekoliko posebnih razmatranja opisanih u nastavku:

  1. Kada senzor boje otkrije zid ispred i robot odluči skrenuti desno ili se okrenuti, prvo bi trebao napraviti sigurnosnu kopiju, kako bi sebi dao dovoljno prostora za okretanje bez udara u zid.
  2. Složen problem javlja se s nekim "pravim" raskrižjima. Zbog kratkog dometa senzora u boji, robot ne može odrediti da li osjeća pravilno “ravno” raskrižje ili vodi do skretanja udesno. Pokušao sam riješiti ovaj problem postavljanjem programa za spremanje "Straight" na listu svaki put kada robot osjeti jednu, a zatim eliminira više "Straight" zaredom na listi. 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 ovo ne funkcionira 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 okrenite se. 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 robotu pruža jednostavan način da odluči 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 ekrana na računaru i mogu se prevući i otpustiti u prozor za programiranje za izradu programa. EV3 Brick se može povezati s računarom putem USB kabela, Wi-Fi ili Bluetooth veze, 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. Otpremljena 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. Sačekajte 5 sekundi i recite "Idi".
  3. Započni petlju.
  4. Vozite kroz labirint. Kada se dođe do izlaza, petlja se napušta.
  5. Prikažite na Brick -ovom ekranu raskrižja koja su do sada pronađena u labirintu.
  6. Provjerite treba li put skratiti.
  7. Prikažite raskrsnice u skraćenoj putanji.
  8. Vratite se na korak 4.
  9. Nakon petlje vozite direktnom stazom.

Snimak ekrana 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. Ali to je dobar primjer koliko su if-naredbe svestrane i moćne (u LEGO EV3 sistemu se nazivaju 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 veliku, donju seriju 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 ukazuju 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 donju seriju blokova.

Moji blokovi za skraćivanje staze i za vožnju direktnom stazom su složeniji i bili bi potpuno nečitki, 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, koristeći prikazane dijelove. Baza robota prikazana je naglavačke. 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 kablove, koji su svi kablovi 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 cigle 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

Cables
Cables

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

  • Priključak B: lijevi veliki motor.
  • Priključak C: veliki desni motor.
  • Port 2: ultrazvučni senzor.
  • Port 3: senzor boje.
  • Port 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

Napravi labirint
Napravi labirint
Napravi labirint
Napravi 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 raditi jednako dobro ako vam nedostaje valovitog kartona.

Prvo sam izrezao zidove kartona, 10 inča (25 cm) od dna. Zatim sam izrezao zidove 5 inča od dna. Ovo pruža nekoliko zidova od 5 inča. 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 trakom gdje god je to potrebno za oblikovanje labirinta. Između bočnih zidova na bilo kojoj stazi sa slijepom ulicom trebao bi biti razmak od 11 ili 12 inča (30 cm). Dužina ne bi trebala biti manja od 10 inča (25 cm). Ove udaljenosti su 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 za dno na tim mjestima, kao što je prikazano.

Izlaz ima crvenu barijeru koja se sastoji od pola koverte s crvenom čestitkom i podloge od 2 komada tankog kartona, kako je prikazano.

Korak 13: Labirint

Labirint
Labirint

Jedno upozorenje je da labirint ne bi trebao biti velik. Ako su zavoji robota pod malim kutom od odgovarajućeg, odstupanja se povećavaju nakon nekoliko okreta i robot bi mogao naletjeti na zidove. Morao sam 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 AI koncepta 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čuje se: