Cuprins:

AI în robotul LEGO EV3 Maze-Driving: 13 pași
AI în robotul LEGO EV3 Maze-Driving: 13 pași

Video: AI în robotul LEGO EV3 Maze-Driving: 13 pași

Video: AI în robotul LEGO EV3 Maze-Driving: 13 pași
Video: LEGO®ROBOTICS @ CR8 Kepong - Education EV3 Maze Escape Mini Bot 2024, Iulie
Anonim
Image
Image
Cum se rezolvă un labirint
Cum se rezolvă un labirint

Acesta este un robot simplu, autonom, cu o inteligență artificială. Este conceput pentru a explora un labirint și, atunci când este plasat înapoi la intrare, pentru a conduce până la ieșire și pentru a evita fundăturile. Este mult mai complicat decât proiectul meu anterior, care pur și simplu a condus prin labirint. Aici, robotul trebuie să-și amintească calea pe care a parcurs-o, să îndepărteze fundăturile, să stocheze noua cale și apoi să urmeze noua cale.

Robotul meu anterior este descris aici:

Robotul este construit folosind LEGO Mindstorms EV3. Software-ul EV3 rulează pe un computer și generează un program, care este apoi descărcat pe un microcontroler numit EV3 Brick. Metoda de programare este bazată pe pictograme și la nivel înalt. Este foarte ușor și versatil.

Provizii

PĂRȚI

  1. Set LEGO Mindstorms EV3
  2. Senzor cu ultrasunete LEGO Mindstorms EV3. Nu este inclus în setul EV3.
  3. Carton ondulat pentru labirint. Două cutii de carton ar trebui să fie suficiente.
  4. O mică bucată de carton subțire pentru a ajuta la stabilizarea unor colțuri și pereți.
  5. Adeziv și bandă pentru a conecta bucăți de carton împreună.
  6. Un plic roșu de felicitări pentru a identifica ieșirea labirintului.

INSTRUMENTE

  1. Cuțit utilitar pentru tăierea cartonului.
  2. Rigla din oțel pentru a ajuta procesul de tăiere.

SOFTWARE

Programul este aici:

Pasul 1: Cum se rezolvă un labirint

METODA DE CONDUCERE LA MUZE

Există mai multe metode de navigare într-un labirint. Dacă sunteți interesat să le studiați, acestea sunt descrise foarte bine în următorul articol Wikipedia:

Am ales metoda de urmărire a peretelui din stânga. Ideea este că robotul va păstra un perete pe partea stângă luând următoarele decizii pe măsură ce trece prin labirint:

  1. Dacă este posibil să virați la stânga, faceți acest lucru.
  2. În caz contrar, mergeți drept, dacă este posibil.
  3. Dacă nu poate merge la stânga sau la dreapta, virează la dreapta, dacă este posibil.
  4. Dacă niciuna dintre cele de mai sus nu este posibilă, aceasta trebuie să fie o fundătură. Întoarceți-vă.

O precauție este că metoda ar putea eșua dacă labirintul are o buclă în el. În funcție de amplasarea buclei, robotul ar putea continua să circule în jurul și în jurul buclei. O posibilă soluție pentru această problemă ar fi ca robotul să treacă la regula dreaptă a adeptului de perete dacă își dă seama că merge într-o buclă. Nu am inclus acest rafinament în proiectul meu.

REZOLVAREA MUZEULUI PENTRU A GĂSI UN CALE DIRECT

În timp ce conduce prin labirint, robotul trebuie să memoreze calea pe care o parcurge și să elimine fundăturile. Realizează acest lucru stocând fiecare viraj și intersecție într-o matrice, verificând combinații specifice de viraje și intersecții pe măsură ce merge și înlocuind combinațiile care includ un punct mort. Lista finală de viraje și intersecții este calea directă prin labirint.

Posibilele viraje sunt: Stânga, Dreapta, Spate (într-o fundătură) și Drept (care este o intersecție).

Combinațiile sunt înlocuite după cum urmează:

  • „Stânga, Spate, Stânga” devine „Drept”.
  • „Stânga, Spate, Dreapta” devine „Înapoi”.
  • „Stânga, spate, drept” devine „dreapta”.
  • „Dreapta, înapoi, stânga” devine „Înapoi”.
  • „Drept, Spate, Stânga” devine „Dreapta”.
  • „Drept, înapoi, drept” devine „Înapoi”.

CUM MANIPULAZĂ ROBOTUL MUZEUL MEU

  1. Când robotul începe să conducă, vede un spațiu în dreapta și stochează Drept în lista din matrice.
  2. Apoi virează la stânga și adaugă Stânga la listă. Lista conține acum: Drept, Stânga.
  3. Cu un impas, se întoarce și adaugă Înapoi la listă. Lista conține acum: Drept, Stânga, Înapoi.
  4. Trecând pe banda pe care a folosit-o de la intrare, adaugă direct la listă. Lista conține acum: Drept, Stânga, Spate, Drept. Recunoaște o combinație și schimbă stânga, spatele, drept la dreapta. Lista conține acum Drept, Drept.
  5. Cu un impas, se întoarce și adaugă Înapoi la listă. Lista conține acum: Drept, Drept, Înapoi.
  6. După virajul la stânga, lista conține Drept, Drept, Înapoi, Stânga. Recunoaște o combinație și schimbă dreapta, spate, stânga în spate. Lista conține acum Straight, Back.
  7. După următoarea viraj la stânga, lista conține Drept, Înapoi, Stânga. Schimbă acea combinație în Dreapta. Lista conține acum doar dreptul.
  8. Trece un spațiu și adaugă direct la listă. Lista conține acum Right, Straight.
  9. După virajul la dreapta, lista conține Dreapta, Dreaptă, Dreapta, care este calea directă.

Pasul 2: Considerații la programarea robotului

CONSIDERAȚII PENTRU ORICE MICROCONTROLLER

Când robotul decide să se întoarcă, ar trebui să facă o viraj larg sau să înainteze o distanță scurtă înainte de a se roti și, după rotire, mergeți înainte o distanță scurtă, fără a verifica senzorul. Motivul primei distanțe scurte este că robotul nu trebuie să se lovească de perete după viraj, iar motivul celei de-a doua distanțe scurte este că, după ce robotul s-a întors, senzorul ar vedea spațiul lung din care tocmai venise, iar robotul ar crede că ar trebui să se întoarcă din nou, ceea ce nu este corect.

Atunci când robotul detectează o intersecție pe dreapta, dar nu este o virare dreaptă, am constatat că este bine ca robotul să avanseze la aproximativ 10 inci (25 cm) fără a-i verifica senzorii.

CONSIDERAȚII SPECIFICE LEGO MINDSTORMS EV3

Deși LEGO Mindstorms EV3 este foarte versatil, nu permite mai mult de unul din fiecare tip de senzor conectat la o cărămidă. Două sau mai multe cărămizi ar putea fi în lanț, dar nu am vrut să cumpăr o altă cărămidă, așa că am folosit următorii senzori (în loc de trei senzori cu ultrasunete): senzor cu infraroșu, senzor de culoare și senzor cu ultrasunete. Acest lucru a funcționat bine.

Dar senzorul de culoare are o rază de acțiune foarte scurtă, de aproximativ 5 cm, ceea ce duce la câteva considerații speciale, așa cum este descris mai jos:

  1. Atunci când senzorul de culoare detectează un perete din față și robotul decide să se întoarcă la dreapta sau să se întoarcă, ar trebui să facă backup mai întâi, pentru a-și oferi suficient spațiu pentru a se întoarce fără să se lovească de perete.
  2. O problemă complicată apare cu unele intersecții „drepte”. Datorită razei scurte de acțiune a senzorului de culoare, robotul nu poate determina dacă simte o intersecție „dreaptă” adecvată sau avansul către o virare la dreapta. Am încercat să rezolv această problemă prin setarea programului pentru a stoca un „Drept” în listă de fiecare dată când robotul o detectează, apoi a eliminat mai multe „Drepte” la rând. Acest lucru remediază situația în care o cotitură la dreapta urmează un „Drept” în labirint, dar nu situația în care există o cotitură la dreapta fără o „Dreaptă” înainte. De asemenea, am încercat să setez programul pentru a elimina un „Drept” dacă este chiar înainte de un „Dreapta”, dar acest lucru nu funcționează dacă un viraj la dreapta urmează un „Drept”. Nu am reușit să găsesc o soluție care să se potrivească tuturor cazurilor, deși presupun că ar fi posibil ca robotul să privească distanța parcursă (citind senzorii de rotație a motorului) și să decidă dacă este un „Drept” sau un drept întoarce. Nu credeam că merită făcută această complicație în scopul demonstrării conceptului de AI în acest proiect.
  3. Un avantaj al senzorului de culoare este că face distincția între maroniul unui perete și roșul barierei pe care l-am folosit la ieșire și oferă o modalitate ușoară de a decide robotul când a terminat labirintul.

Pasul 3: Programul principal

Programul principal
Programul principal

LEGO Mindstorms EV3 are o metodă de programare foarte convenabilă bazată pe pictograme. Blocurile sunt afișate în partea de jos a ecranului de pe computer și pot fi glisate și plasate în fereastra de programare pentru a construi un program. EV3 Brick poate fi conectat la computer fie printr-un cablu USB, Wi-Fi sau Bluetooth, iar programul poate fi apoi descărcat de pe computer în Brick.

Programul constă dintr-un program principal și mai multe „Blocurile mele” care sunt subrutine. Fișierul încărcat conține întregul program, care este aici:

Pașii din programul principal sunt după cum urmează:

  1. Definiți și inițializați variabila de numărare a turei și matricea.
  2. Așteptați 5 secunde și spuneți „Du-te”.
  3. Porniți o buclă.
  4. Condu prin labirint. Când se ajunge la ieșire, bucla este ieșită.
  5. Afișați pe ecranul cărămizii, intersecțiile găsite până acum în labirint.
  6. Verificați dacă calea trebuie scurtată.
  7. Afișați intersecțiile pe calea scurtată.
  8. Reveniți la pasul 4.
  9. După buclă, conduceți calea directă.

Captura de ecran arată acest program principal.

Pasul 4: Blocurile mele (Subrutine)

Blocurile mele (Subrutine)
Blocurile mele (Subrutine)

Este afișat Navigate My Block, care controlează modul în care robotul conduce prin labirint. Imprimarea este foarte mică și este posibil să nu fie lizibilă. Dar este un bun exemplu de cât de versatile și puternice sunt declarațiile if (numite Switch-uri în sistemul LEGO EV3).

  1. Săgeata # 1 indică un comutator care verifică dacă senzorul infraroșu vede un obiect la mai mult de o anumită distanță. Dacă da, se execută seria de blocuri de sus. Dacă nu, atunci controlul este trecut la seria mare de jos de blocuri, unde se află săgeata # 2.
  2. Săgeata # 2 indică un comutator care verifică ce culoare vede senzorul de culoare. Există 3 cazuri: fără culoare în partea de sus, roșu în mijloc și maro în partea de jos.
  3. Două săgeți # 3 indică Comutatoare care verifică dacă senzorul cu ultrasunete vede un obiect la mai mult de o anumită distanță. Dacă da, se execută seria de blocuri de sus. Dacă nu, atunci controlul este trecut la seria de jos a blocurilor.

Blocurile mele pentru scurtarea drumului și pentru conducerea traseului direct sunt mai complicate și ar fi total ilizibile, deci nu sunt incluse în acest document.

Pasul 5: Începând să construiți robotul: baza

Începând să construiți robotul: baza
Începând să construiți robotul: baza
Începând să construiți robotul: baza
Începând să construiți robotul: baza

După cum sa menționat anterior, LEGO Mindstorms EV3 nu permite mai mult de unul din fiecare tip de senzor conectat la o singură cărămidă. Am folosit următorii senzori (în loc de trei senzori cu ultrasunete): senzor cu infraroșu, senzor de culoare și senzor cu ultrasunete.

Perechile de fotografii de mai jos arată cum să construiți robotul. Prima fotografie a fiecărei perechi prezintă părțile necesare, iar a doua fotografie prezintă aceleași părți conectate între ele.

Primul pas este de a construi baza robotului, folosind piesele prezentate. Baza robotului este afișată cu susul în jos. Partea mică în formă de L din spatele robotului este un suport pentru spate. Alunecă pe măsură ce robotul se mișcă. Acest lucru funcționează bine. Kitul EV3 nu are o piesă de tip bilă.

Pasul 6: partea de sus a bazei, 1

Partea de sus a bazei, 1
Partea de sus a bazei, 1
Partea de sus a bazei, 1
Partea de sus a bazei, 1

Acest pas și următorii 2 pași sunt pentru partea superioară a bazei robotului, senzorul de culoare și cablurile, care sunt toate cabluri de 10 inch (26 cm).

Pasul 7: partea de sus a bazei, 2

Partea de sus a bazei, 2
Partea de sus a bazei, 2
Partea de sus a bazei, 2
Partea de sus a bazei, 2

Pasul 8: partea de sus a bazei, 3

Partea de sus a bazei, 3
Partea de sus a bazei, 3
Partea de sus a bazei, 3
Partea de sus a bazei, 3

Pasul 9: Senzori cu infraroșu și ultrasunete

Senzori cu infraroșu și ultrasunete
Senzori cu infraroșu și ultrasunete
Senzori cu infraroșu și ultrasunete
Senzori cu infraroșu și ultrasunete

În continuare, sunt senzorul cu infraroșu (în partea stângă a robotului) și senzorul cu ultrasunete (în dreapta). De asemenea, cei 4 pini pentru atașarea cărămizii deasupra.

Senzorii cu infraroșu și ultrasunete sunt localizați vertical în loc de orizontală normală. Aceasta oferă o mai bună identificare a colțurilor sau capetelor pereților.

Pasul 10: Cabluri

Cabluri
Cabluri

Cablurile se conectează la Brick după cum urmează:

  • Port B: motor mare stâng.
  • Portul C: motor mare dreapta.
  • Portul 2: senzor cu ultrasunete.
  • Portul 3: senzor de culoare.
  • Portul 4: senzor infraroșu.

Pasul 11: Pasul final în construirea robotului: decorare

Pasul final în construirea robotului: decor
Pasul final în construirea robotului: decor
Pasul final în construirea robotului: decor
Pasul final în construirea robotului: decor

Aripile și aripioarele sunt doar pentru decorare.

Pasul 12: Construiește un labirint

Construiește un labirint
Construiește un labirint
Construiește un labirint
Construiește un labirint

Două cutii de carton ondulat ar trebui să fie suficiente pentru labirint. Am realizat pereții labirintului cu o înălțime de 12 cm (5 inci), dar 10 cm ar trebui să funcționeze la fel de bine dacă nu aveți carton ondulat.

În primul rând, am tăiat în jurul pereților cutiilor, la 25 cm de jos. Apoi am tăiat în jurul pereților la 5 centimetri de jos. Aceasta oferă mai mulți pereți de 5 inci. De asemenea, am tăiat în jurul fundului cutiilor, lăsând aproximativ 1 inch (2,5 cm) atașat la pereți pentru stabilitate.

Diversele bucăți pot fi tăiate și lipite sau lipite ori de câte ori este nevoie pentru a forma labirintul. Ar trebui să existe un spațiu de 11 sau 12 inci (30 cm) între pereții laterali pe orice cale cu fundătură. Lungimea nu trebuie să fie mai mică de 10 inci (25 cm). Aceste distanțe sunt necesare pentru ca robotul să se întoarcă.

Este posibil ca unele colțuri ale labirintului să fie întărite. De asemenea, unii pereți drepți trebuie să fie împiedicați să se îndoaie dacă includ un colț de carton îndreptat. Bucățile mici de carton subțire ar trebui lipite pe partea inferioară în acele locuri, așa cum se arată.

Ieșirea are o barieră roșie formată dintr-o jumătate de plic roșu de felicitare și o bază realizată din 2 bucăți de carton subțire, așa cum se arată.

Pasul 13: Labirintul

Labirintul
Labirintul

O precauție este că labirintul nu trebuie să fie mare. Dacă virajele robotului sunt la un unghi ușor față de cel corespunzător, discrepanțele se adună după câteva viraje și robotul ar putea rula în pereți. A trebuit să mă lăut de mai multe ori cu setările de rotații ale turei pentru a obține o unitate de succes chiar și prin micul labirint pe care l-am făcut.

O modalitate de a rezolva această problemă este de a include o rutină de îndreptare a căilor care ar menține robotul la o distanță specifică de peretele din stânga. Nu am inclus asta. Programul este suficient de complicat așa cum este și este suficient pentru a demonstra conceptul AI în acest proiect.

OBSERVAȚIE CONCLUZIVĂ

Acesta a fost un proiect distractiv și o experiență minunată de învățare. Sper că vi se pare și interesant.

Recomandat: