Kazalo:

AI v robotu za vožnjo z labirintom LEGO EV3: 13 korakov
AI v robotu za vožnjo z labirintom LEGO EV3: 13 korakov

Video: AI v robotu za vožnjo z labirintom LEGO EV3: 13 korakov

Video: AI v robotu za vožnjo z labirintom LEGO EV3: 13 korakov
Video: Программирование – информатика для руководителей бизнеса 2016 2024, November
Anonim
Image
Image
Kako je rešen labirint
Kako je rešen labirint

To je preprost, avtonomen robot z nekaj umetne inteligence. Zasnovan je za raziskovanje labirinta in, ko je postavljen nazaj na vhod, za vožnjo skozi izhod in izogibanje slepih ulic. Je veliko bolj zapleteno kot moj prejšnji projekt, ki je preprosto peljal skozi labirint. Tu si mora robot zapomniti prehojeno pot, odstraniti slepe ulice, shraniti novo pot in nato slediti novi poti.

Moj prejšnji robot je opisan tukaj:

Robot je izdelan z uporabo LEGO Mindstorms EV3. Programska oprema EV3 deluje v računalniku in ustvari program, ki se nato prenese v mikrokrmilnik, imenovan EV3 Brick. Način programiranja temelji na ikonah in je na visoki ravni. Je zelo enostaven in vsestranski.

Zaloge

DELI

  1. Komplet LEGO Mindstorms EV3
  2. LEGO ultrazvočni senzor Mindstorms EV3. Ni vključen v komplet EV3.
  3. Valovit karton za labirint. Zadostujeta dve škatli.
  4. Majhen kos tankega kartona za stabilizacijo nekaterih vogalov in sten.
  5. Lepilo in trak za povezovanje kartonskih kosov skupaj.
  6. Rdeča ovojnica z voščilnico za prepoznavanje izhoda iz labirinta.

ORODJA

  1. Nož za rezanje kartona.
  2. Jekleno ravnilo za pomoč pri rezanju.

PROGRAMSKA OPREMA

Program je tukaj:

1. korak: Kako se rešuje labirint

METODA VOŽNJE Z LABOROM

Obstaja več načinov krmarjenja po labirintu. Če jih želite preučiti, so zelo dobro opisani v naslednjem članku Wikipedije:

Izbral sem metodo sledenja levi steni. Ideja je, da bo robot obdržal steno na levi strani, tako da bo sprejel naslednje odločitve, ko gre skozi labirint:

  1. Če je mogoče zaviti levo, to storite.
  2. V nasprotnem primeru pojdite naravnost, če je mogoče.
  3. Če ne more levo ali naravnost, po možnosti zavijte desno.
  4. Če nič od naštetega ni mogoče, mora biti to slepa ulica. Obrni se.

Eno opozorilo je, da lahko metoda ne uspe, če ima labirint zanko. Odvisno od namestitve zanke bi lahko robot še naprej hodil okoli zanke. Možna rešitev za to težavo bi bila, če bi robot prešel na pravilo sledilnika desne stene, če bi spoznal, da gre v zanko. Te izboljšave nisem vključil v svoj projekt.

REŠITEV LABORITKA ZA NAJDENJE PREKO POTI

Robot si mora med vožnjo skozi labirint zapomniti pot, ki jo prevozi, in odpraviti slepe ulice. To doseže tako, da vsak zavoj in križišče shrani v matriko, preveri, ali obstajajo posebne kombinacije ovinkov in križišč, in zamenja kombinacije, ki vključujejo slepo ulico. Končni seznam ovinkov in križišč je neposredna pot skozi labirint.

Možni zavoji so: levo, desno, nazaj (v slepi ulici) in naravnost (ki je križišče).

Kombinacije se zamenjajo na naslednji način:

  • "Levo, nazaj, levo" postane "naravnost".
  • "Levo, Nazaj, Desno" postane "Nazaj".
  • "Levo, nazaj, naravnost" postane "desno".
  • "Desno, nazaj, levo" postane "Nazaj".
  • "Ravno, nazaj, levo" postane "desno".
  • "Naravnost, nazaj, naravnost" postane "nazaj".

KAKO ROBOT ROČA MOJ LABORITET

  1. Ko začne robot voziti, na desni vidi prostor in shrani Straight na seznam v matriki.
  2. Nato zavije levo in na seznam doda Left. Seznam zdaj vsebuje: naravnost, levo.
  3. Z slepo ulico se obrne in doda nazaj na seznam. Seznam zdaj vsebuje: naravnost, levo, nazaj.
  4. Mimo pasu, ki ga je uporabljal od vhoda, na seznam doda Straight. Seznam zdaj vsebuje: naravnost, levo, nazaj, naravnost. Prepozna kombinacijo in spremeni levo, nazaj, naravnost v desno. Seznam zdaj vsebuje naravnost, desno.
  5. Z slepo ulico se obrne in doda nazaj na seznam. Seznam zdaj vsebuje: naravnost, desno, nazaj.
  6. Po zavoju levo seznam vsebuje naravnost, desno, nazaj, levo. Prepozna kombinacijo in spremeni desno, nazaj, levo proti hrbtu. Seznam zdaj vsebuje naravnost, nazaj.
  7. Po naslednjem zavoju v levo seznam vsebuje naravnost, nazaj, levo. To kombinacijo spremeni v desno. Seznam zdaj vsebuje samo desno.
  8. Prenese presledek in na seznam doda naravnost. Seznam zdaj vsebuje desno, naravnost.
  9. Za desnim zavojem seznam vsebuje Desno, Ravno, Desno, ki je neposredna pot.

2. korak: Upoštevajte pri programiranju robota

MISLITVE O KAKRŠNEM MIKROKONTROLORJU

Ko se robot odloči zavijati, naj naredi širok zavoj ali pa gre pred vrtenjem na kratko razdaljo naprej, po zavoju pa spet na kratko, ne da bi preveril senzor. Razlog za prvo kratko razdaljo je, da se robot po zavoju ne bi zaletel v steno, razlog za drugo kratko razdaljo pa je, da bi po tem, ko se je robot obrnil, senzor videl dolg prostor, iz katerega je pravkar prišel, in robot bi mislil, da bi se moral spet obrniti, kar ni pravilno.

Ko robot zazna križišče na desni strani, vendar to ni desni ovinek, sem ugotovil, da je dobro, da se robot pripelje približno 10 centimetrov (25 cm) naprej, ne da bi preveril svoje senzorje.

MERITVE, POSEBNE ZA LEGO MINDSTORMS EV3

Čeprav je LEGO Mindstorms EV3 zelo vsestranski, ne omogoča več kot enega od vsakega tipa senzorja, povezanega z eno opeko. Dve ali več opek bi lahko bile vezane z marjeticami, vendar nisem hotel kupiti druge opeke, zato sem uporabil naslednje senzorje (namesto treh ultrazvočnih senzorjev): infrardeči senzor, barvni senzor in ultrazvočni senzor. To se je dobro izšlo.

Toda barvni senzor ima zelo kratek razpon, približno 2 cm (5 cm), kar vodi do nekaj posebnih premislekov, opisanih spodaj:

  1. Ko barvni senzor zazna steno spredaj in se robot odloči zaviti desno ali se obrniti, se mora najprej vrniti nazaj, da bi si dal dovolj prostora za obračanje, ne da bi se zaletel v steno.
  2. Zapletena težava se pojavi pri nekaterih križiščih »naravnost«. Zaradi kratkega dosega barvnega senzorja robot ne more ugotoviti, ali zazna pravilno križišče »Ravno« ali vodi v desno. To težavo sem poskušal odpraviti tako, da sem nastavil program, da shrani "Straight" na seznam vsakič, ko ga robot zazna, nato pa na seznamu odstrani več kot "Straight". To odpravlja situacijo, ko zavijanje desno sledi "naravnost" v labirintu, ne pa situacije, ko je zavoj desno brez "naravnost" pred njim. Poskusil sem tudi nastaviti program tako, da odpravi "naravnost", če je tik pred "desno", vendar to ne deluje, če zavijanje desno sledi "naravnost". Nisem mogel najti rešitve, ki bi ustrezala vsem primerom, čeprav predvidevam, da bi lahko robot pogledal na prehojeno razdaljo (z branjem senzorjev vrtenja motorja) in se odločil, ali gre za "naravnost" ali desno obrat. Nisem si mislil, da je ta zaplet vredno narediti za prikaz koncepta AI v tem projektu.
  3. Prednost barvnega senzorja je, da razlikuje med rjavo steno in rdečo bariero, ki sem jo uporabil na izhodu, in robotu omogoča enostaven način odločitve, kdaj je končal labirint.

3. korak: Glavni program

Glavni program
Glavni program

LEGO Mindstorms EV3 ima zelo priročen način programiranja, ki temelji na ikonah. Bloki so prikazani na dnu zaslona v računalniku in jih lahko povlečete in spustite v okno za programiranje, da sestavite program. EV3 Brick je lahko povezan z računalnikom prek kabla USB, Wi-Fi ali Bluetooth, program pa lahko nato prenesete iz računalnika v Brick.

Program je sestavljen iz glavnega programa in več »mojih blokov«, ki so podprogrami. Naložena datoteka vsebuje celoten program, ki je tukaj:

Koraki v glavnem programu so naslednji:

  1. Določite in inicializirajte spremenljivko štetja obratov in matriko.
  2. Počakajte 5 sekund in recite »Pojdi«.
  3. Začni zanko.
  4. Vozite skozi labirint. Ko je izhod dosežen, se zanka zapre.
  5. Na Brick -jevem zaslonu prikažite presečišča, ki ste jih doslej našli v labirintu.
  6. Preverite, ali je treba pot skrajšati.
  7. Prikažite križišča na skrajšani poti.
  8. Vrnite se na korak 4.
  9. Po zanki zapeljite po neposredni poti.

Posnetek zaslona prikazuje ta glavni program.

4. korak: Moji bloki (podprogrami)

Moji bloki (podprogrami)
Moji bloki (podprogrami)

Prikazan je Navigate My Block, ki nadzoruje, kako robot vozi skozi labirint. Tisk je zelo majhen in morda ni berljiv. Je pa dober primer, kako vsestranski in močni so stavki if (imenovani stikala v sistemu LEGO EV3).

  1. Puščica #1 kaže na stikalo, ki preveri, ali infrardeči senzor vidi predmet, ki je oddaljen več kot le določeno razdaljo. Če je tako, se izvede zgornja serija blokov. Če ne, se nadzor prenese na veliko, spodnjo serijo blokov, kjer se nahaja puščica #2.
  2. Puščica #2 kaže na stikalo, ki preveri, kakšno barvo vidi barvni senzor. Obstajajo 3 primeri: brez barve na vrhu, rdeča na sredini in rjava na dnu.
  3. Dve puščici št. 3 kažeta na stikala, ki preverjata, ali ultrazvočni senzor vidi predmet več kot na določeni razdalji. Če je tako, se izvede zgornja serija blokov. V nasprotnem primeru se nadzor prenese na spodnjo serijo blokov.

Moji bloki za skrajšanje poti in vožnjo po neposredni poti so bolj zapleteni in bi bili popolnoma nečitljivi, zato niso vključeni v ta dokument.

5. korak: Začetek gradnje robota: baza

Začetek gradnje robota: baza
Začetek gradnje robota: baza
Začetek gradnje robota: baza
Začetek gradnje robota: baza

Kot smo že omenili, LEGO Mindstorms EV3 ne omogoča več kot enega od vsakega tipa senzorja, povezanega z eno opeko. Uporabil sem naslednje senzorje (namesto treh ultrazvočnih senzorjev): infrardeči senzor, barvni senzor in ultrazvočni senzor.

Spodnji pari fotografij prikazujeta, kako sestaviti robota. Prva fotografija vsakega para prikazuje potrebne dele, druga fotografija pa enake dele, povezane skupaj.

Prvi korak je izdelava podlage robota s pomočjo prikazanih delov. Podstavek robota je prikazan na glavo. Majhen del v obliki črke L na zadnji strani robota je opora za hrbet. Drsi, ko se robot premika. To deluje v redu. Komplet EV3 nima dela tipa valjanja.

6. korak: Vrh osnove, 1

Na vrhu baze, 1
Na vrhu baze, 1
Na vrhu baze, 1
Na vrhu baze, 1

Ta korak in naslednja 2 koraka sta za vrh podnožja robota, barvno tipalo in kable, ki so vsi 10 -palčni (26 cm) kabli.

7. korak: Vrh osnove, 2

Vrh baze, 2
Vrh baze, 2
Na vrhu baze, 2
Na vrhu baze, 2

8. korak: Vrh osnove, 3

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

9. korak: Infrardeči in ultrazvočni senzorji

Infrardeči in ultrazvočni senzorji
Infrardeči in ultrazvočni senzorji
Infrardeči in ultrazvočni senzorji
Infrardeči in ultrazvočni senzorji

Nato sta infrardeči senzor (na levi strani robota) in ultrazvočni senzor (na desni). Tudi 4 zatiči za pritrditev opeke na vrh.

Infrardeči in ultrazvočni senzorji so nameščeni navpično namesto običajne vodoravne. To omogoča boljšo prepoznavo vogalov ali koncev sten.

10. korak: Kabli

Kabli
Kabli

Kabli so povezani z opeko na naslednji način:

  • Vrata B: levi velik motor.
  • Vrata C: desni velik motor.
  • Vrata 2: ultrazvočni senzor.
  • Vrata 3: barvni senzor.
  • Vrata 4: infrardeči senzor.

11. korak: Zadnji korak pri izdelavi robota: dekoracija

Zadnji korak pri izdelavi robota: dekoracija
Zadnji korak pri izdelavi robota: dekoracija
Zadnji korak pri izdelavi robota: dekoracija
Zadnji korak pri izdelavi robota: dekoracija

Krila in plavuti so samo za dekoracijo.

12. korak: Zgradite labirint

Zgradite labirint
Zgradite labirint
Zgradite labirint
Zgradite labirint

Za labirint bi morali zadostovati dve škatli iz valovitega kartona. Stene labirinta sem naredil visoke 5,5 cm (12,5 cm), vendar bi morale 4 cm (10 cm) delovati prav tako, če vam primanjkuje valovitega kartona.

Najprej sem prerezal stene kartonov, 10 cm (25 cm) od dna. Nato sem prerezal stene 5 centimetrov od dna. To zagotavlja več 5-palčnih sten. Prav tako sem prerezal spodnji del škatel, pri čemer sem za stabilnost pritrdil približno 1 cm (2,5 cm) na stene.

Različne kose je mogoče razrezati in lepiti ali lepiti, kjer koli je potrebno za oblikovanje labirinta. Med stranskimi stenami na kateri koli poti z slepo ulico mora biti prostor 11 ali 12 palcev (30 cm). Dolžina ne sme biti manjša od 10 cm (25 cm). Te razdalje so potrebne, da se robot obrne.

Nekatere vogale labirinta bo morda treba okrepiti. Nekatere ravne stene je treba upogniti, če vključujejo poravnan vogal iz kartona. Majhne koščke tankega kartona je treba na ta mesta prilepiti na dno, kot je prikazano.

Izhod ima rdečo pregrado, sestavljeno iz polovice rdeče ovojnice z voščilnico in podlage iz dveh kosov tankega kartona, kot je prikazano.

13. korak: Labirint

Labirint
Labirint

Eno opozorilo je, da labirint ne sme biti velik. Če so zavoji robota pod rahlim kotom od pravega, se odstopanja po nekaj zavojih seštevajo in bi lahko robot naletel na stene. Večkrat sem se moral poigravati z nastavitvami vrtenja zavojev, da sem uspel skozi celo majhen labirint, ki sem ga naredil.

Rešitev tega problema je vključiti rutino poravnave poti, ki bi robota držala na določeni razdalji od leve stene. Tega nisem vključil. Program je dovolj zapleten in zadostuje za prikaz koncepta AI v tem projektu.

Sklepna opomba

To je bil zabaven projekt in odlična učna izkušnja. Upam, da se vam bo zdelo tudi zanimivo.

Priporočena: