Spisu treści:

AI w LEGO EV3 Robot prowadzący labirynt: 13 kroków
AI w LEGO EV3 Robot prowadzący labirynt: 13 kroków

Wideo: AI w LEGO EV3 Robot prowadzący labirynt: 13 kroków

Wideo: AI w LEGO EV3 Robot prowadzący labirynt: 13 kroków
Wideo: Kolejne spotkanie z Scratchem. Lekcja dla klas 4-6 2024, Lipiec
Anonim
Image
Image
Jak rozwiązać labirynt
Jak rozwiązać labirynt

To prosty, autonomiczny robot z pewną sztuczną inteligencją. Jest przeznaczony do eksploracji labiryntu, a po umieszczeniu z powrotem przy wejściu, do przejazdu do wyjścia i uniknięcia ślepych zaułków. Jest o wiele bardziej skomplikowany niż mój poprzedni projekt, który po prostu przejechał labirynt. Tutaj robot musi zapamiętać drogę, którą przebył, usunąć ślepe zaułki, zapisać nową ścieżkę, a następnie podążać nową ścieżką.

Mój poprzedni robot jest opisany tutaj:

Robot jest zbudowany przy użyciu LEGO Mindstorms EV3. Oprogramowanie EV3 działa na komputerze i generuje program, który jest następnie przesyłany do mikrokontrolera zwanego klockiem EV3. Metoda programowania jest oparta na ikonach i na wysokim poziomie. Jest bardzo łatwy i wszechstronny.

Kieszonkowe dzieci

CZĘŚCI

  1. Zestaw LEGO Mindstorms EV3
  2. Czujnik ultradźwiękowy LEGO Mindstorms EV3. Nie znajduje się w zestawie EV3.
  3. Tektura falista do labiryntu. Powinny wystarczyć dwa kartoniki.
  4. Mały kawałek cienkiego kartonu, który pomaga ustabilizować niektóre narożniki i ściany.
  5. Klej i taśmę do łączenia kawałków tektury.
  6. Czerwona koperta na kartkę z życzeniami identyfikująca wyjście z labiryntu.

NARZĘDZIA

  1. Nóż uniwersalny do cięcia kartonu.
  2. Linijka stalowa wspomagająca proces cięcia.

OPROGRAMOWANIE

Program jest tutaj:

Krok 1: Jak rozwiązać labirynt

METODA JAZDY LABIRYNTEM

Istnieje kilka metod poruszania się po labiryncie. Jeśli jesteś zainteresowany ich badaniem, są one bardzo dobrze opisane w następującym artykule Wikipedii:

Wybrałem metodę podążania po lewej stronie ściany. Pomysł polega na tym, że robot będzie trzymał ścianę po lewej stronie, podejmując następujące decyzje podczas przechodzenia przez labirynt:

  1. Jeśli możesz skręcić w lewo, zrób to.
  2. W przeciwnym razie idź prosto, jeśli to możliwe.
  3. Jeśli nie może iść w lewo lub prosto, skręć w prawo, jeśli to możliwe.
  4. Jeśli żadne z powyższych nie jest możliwe, musi to być ślepy zaułek. Obróć się.

Jedna uwaga jest taka, że metoda może się nie powieść, jeśli labirynt ma w sobie pętlę. W zależności od umiejscowienia pętli robot może poruszać się wokół pętli i wokół niej. Możliwym rozwiązaniem tego problemu byłoby przełączenie robota na prawą regułę podążania za ścianą, gdyby zorientował się, że porusza się w pętli. Nie uwzględniłem tego udoskonalenia w moim projekcie.

ROZWIĄZYWANIE LABIRYNTU, ABY ZNALEŹĆ BEZPOŚREDNIĄ ŚCIEŻKĘ

Przejeżdżając przez labirynt, robot musi zapamiętać ścieżkę, którą pokonuje i wyeliminować ślepe zaułki. Osiąga to, przechowując każdy zakręt i skrzyżowanie w tablicy, sprawdzając określone kombinacje zakrętów i skrzyżowań w miarę postępu oraz zastępując kombinacje zawierające ślepy zaułek. Ostateczna lista zakrętów i skrzyżowań to bezpośrednia ścieżka przez labirynt.

Możliwe skręty to: w lewo, w prawo, w tył (w ślepym zaułku) i prosty (czyli skrzyżowanie).

Kombinacje otrzymują brzmienie:

  • „Lewo, Tył, Lewo” staje się „Prosto”.
  • „Lewo, Tył, Prawo” staje się „Tył”.
  • „Lewo, Tył, Prosto” staje się „Prawo”.
  • „Prawo, Tył, Lewo” staje się „Tył”.
  • „Prosto, Tył, Lewo” staje się „Prawo”.
  • „Prosto, do tyłu, prosto” staje się „wstecz”.

JAK ROBOT POCHODZI MÓJ Labirynt?

  1. Gdy robot zaczyna jechać, widzi spację po prawej stronie i zapisuje Straight na liście w tablicy.
  2. Następnie skręca w lewo i dodaje Lewo do listy. Lista zawiera teraz: Prosto, Lewo.
  3. W ślepym zaułku odwraca się i dodaje Powrót do listy. Lista zawiera teraz: Prosto, Lewo, Tył.
  4. Mijając pas, którym jechał od wejścia, dodaje Prosto do listy. Lista zawiera teraz: Prosto, Lewo, Tył, Prosto. Rozpoznaje kombinację i zmienia lewo, tył, prosto na prawo. Lista zawiera teraz Prosto, Prawo.
  5. W ślepym zaułku odwraca się i dodaje Powrót do listy. Lista zawiera teraz: Prosto, Prawo, Tył.
  6. Po lewej stronie lista zawiera Prosto, Prawo, Tył, Lewo. Rozpoznaje kombinację i zmienia prawo, tył, lewo na tył. Lista zawiera teraz Straight, Back.
  7. Po następnym skręcie w lewo lista zawiera Prosto, Wstecz, W lewo. Zmienia tę kombinację na prawą. Lista zawiera teraz tylko prawo.
  8. Przekazuje spację i dodaje prosto do listy. Lista zawiera teraz Prawo, Prosto.
  9. Po skręcie w prawo lista zawiera Prawo, Prosto, Prawo, które jest drogą bezpośrednią.

Krok 2: Rozważania podczas programowania robota

UWAGI DOTYCZĄCE KAŻDEGO MIKROKONTROLERA

Gdy robot zdecyduje się skręcić, powinien albo wykonać szeroki skręt, albo przejść krótki odcinek do przodu przed wykonaniem skrętu, a po wykonaniu skrętu ponownie przejść krótki odcinek do przodu bez sprawdzania czujnika. Powodem pierwszego krótkiego dystansu jest to, że robot nie powinien uderzać o ścianę po skręcie, a drugi krótki dystans jest taki, że po skręcie robota czujnik będzie widział długą przestrzeń, z której właśnie przybył, a robot pomyśli, że powinien się ponownie obrócić, co nie jest właściwe.

Kiedy robot wykryje skrzyżowanie po prawej stronie, ale nie jest to skręt w prawo, stwierdziłem, że dobrze jest, gdy robot jedzie do przodu około 10 cali (25 cm) bez sprawdzania czujników.

UWAGI WŁAŚCIWE DLA LEGO MINDSTORMS EV3

Chociaż LEGO Mindstorms EV3 jest bardzo wszechstronny, pozwala na podłączenie nie więcej niż jednego czujnika każdego typu do jednego klocka. Co najmniej dwa klocki można było połączyć łańcuchowo, ale nie chciałem kupować kolejnego, dlatego użyłem następujących czujników (zamiast trzech czujników ultradźwiękowych): czujnika podczerwieni, czujnika koloru i czujnika ultradźwiękowego. Udało się to dobrze.

Ale czujnik koloru ma bardzo krótki zasięg, około 2 cali (5 cm), co prowadzi do kilku specjalnych kwestii, jak opisano poniżej:

  1. Gdy czujnik koloru wykryje ścianę z przodu, a robot zdecyduje się skręcić w prawo lub zawrócić, powinien najpierw się cofnąć, aby zapewnić sobie wystarczająco dużo miejsca na skręcanie bez wpadania na ścianę.
  2. W przypadku niektórych skrzyżowań „prostych” występuje skomplikowany problem. Ze względu na krótki zasięg czujnika koloru robot nie może określić, czy wyczuwa prawidłowe skrzyżowanie „proste”, czy też zbliżanie się do skrętu w prawo. Próbowałem rozwiązać ten problem, ustawiając program tak, aby przechowywał „Prosto” na liście za każdym razem, gdy robot go wykryje, a następnie wyeliminować więcej niż jeden „Prosto” z listy. Naprawia to sytuację, w której skręt w prawo następuje po „prostej” w labiryncie, ale nie sytuację, w której skręt w prawo nie znajduje się przed „prostą”. Próbowałem również ustawić program tak, aby wyeliminować „Prosto”, jeśli jest tuż przed „W prawo”, ale to nie działa, jeśli skręt w prawo następuje po „Prosto”. Nie udało mi się znaleźć rozwiązania pasującego do wszystkich przypadków, chociaż przypuszczam, że robot mógłby spojrzeć na przebytą odległość (odczytując czujniki obrotów silnika) i zdecydować, czy jest to „proste” czy prawidłowe zakręt. Nie sądziłem, że ta komplikacja jest warta wykonania w celu zademonstrowania koncepcji AI w tym projekcie.
  3. Zaletą czujnika koloru jest to, że rozróżnia brąz ściany od czerwieni bariery, z której korzystałem przy wyjściu, i umożliwia robotowi łatwe określenie, kiedy ukończył labirynt.

Krok 3: Program Główny

Program główny
Program główny

LEGO Mindstorms EV3 ma bardzo wygodną metodę programowania opartą na ikonach. Bloki są wyświetlane na dole ekranu komputera i można je przeciągać i upuszczać w oknie programowania, aby zbudować program. Klocek EV3 Brick można podłączyć do komputera za pomocą kabla USB, Wi-Fi lub Bluetooth, a następnie pobrać program z komputera do klocka.

Program składa się z programu głównego i kilku „Moich bloków”, które są podprogramami. Wgrany plik zawiera cały program, który znajduje się tutaj:

Kroki w programie głównym są następujące:

  1. Zdefiniuj i zainicjuj zmienną liczącą turę oraz tablicę.
  2. Poczekaj 5 sekund i powiedz „Idź”.
  3. Rozpocznij pętlę.
  4. Przejedź przez labirynt. Po osiągnięciu wyjścia pętla zostaje opuszczona.
  5. Wyświetl na ekranie klocka skrzyżowania znalezione do tej pory w labiryncie.
  6. Sprawdź, czy ścieżka powinna zostać skrócona.
  7. Wyświetl przecięcia w skróconej ścieżce.
  8. Wróć do kroku 4.
  9. Za pętlą jedź bezpośrednią ścieżką.

Zrzut ekranu pokazuje ten główny program.

Krok 4: Moje bloki (podprogramy)

Moje bloki (podprogramy)
Moje bloki (podprogramy)

Pokazana jest funkcja Nawiguj po moim bloku, która kontroluje sposób poruszania się robota przez labirynt. Nadruk jest bardzo mały i może być nieczytelny. Ale to dobry przykład na to, jak wszechstronne i potężne są instrukcje if (nazywane przełącznikami w systemie LEGO EV3).

  1. Strzałka #1 wskazuje przełącznik, który sprawdza, czy czujnik podczerwieni widzi obiekt dalej niż w określonej odległości. Jeśli tak, to wykonywana jest górna seria bloków. Jeśli nie, to kontrola jest przekazywana do dużego, dolnego szeregu bloków, gdzie znajduje się strzałka #2.
  2. Strzałka #2 wskazuje przełącznik, który sprawdza, jaki kolor widzi czujnik koloru. Są 3 przypadki: brak koloru na górze, czerwony na środku i brązowy na dole.
  3. Dwie strzałki #3 wskazują przełączniki, które sprawdzają, czy czujnik ultradźwiękowy widzi obiekt dalej niż w określonej odległości. Jeśli tak, to wykonywana jest górna seria bloków. Jeśli nie, to kontrola jest przekazywana do dolnej serii bloków.

Moje bloki do skracania ścieżki i jazdy drogą bezpośrednią są bardziej skomplikowane i całkowicie nieczytelne, dlatego nie są zawarte w tym dokumencie.

Krok 5: Rozpoczęcie budowy robota: podstawa

Rozpoczęcie budowy robota: baza
Rozpoczęcie budowy robota: baza
Rozpoczęcie budowy robota: baza
Rozpoczęcie budowy robota: baza

Jak wspomniano wcześniej, LEGO Mindstorms EV3 pozwala na podłączenie nie więcej niż jednego czujnika każdego typu do jednego klocka. Użyłem następujących czujników (zamiast trzech czujników ultradźwiękowych): czujnik podczerwieni, czujnik koloru i czujnik ultradźwiękowy.

Poniższe pary zdjęć pokazują, jak zbudować robota. Pierwsze zdjęcie każdej pary pokazuje potrzebne części, a drugie zdjęcie pokazuje te same części połączone ze sobą.

Pierwszym krokiem jest zbudowanie podstawy robota z przedstawionych części. Podstawa robota jest odwrócona. Mała część w kształcie litery L z tyłu robota stanowi podparcie dla pleców. Ślizga się, gdy robot się porusza. To działa dobrze. Zestaw EV3 nie posiada części typu tocząca się kula.

Krok 6: Góra podstawy, 1

Góra podstawy, 1
Góra podstawy, 1
Góra podstawy, 1
Góra podstawy, 1

Ten krok i kolejne 2 kroki dotyczą górnej części podstawy robota, czujnika koloru i kabli, które są wszystkimi 10-calowymi (26 cm) kablami.

Krok 7: Góra podstawy, 2

Góra podstawy, 2
Góra podstawy, 2
Góra podstawy, 2
Góra podstawy, 2

Krok 8: Góra podstawy, 3

Wierzchołek podstawy, 3
Wierzchołek podstawy, 3
Wierzchołek podstawy, 3
Wierzchołek podstawy, 3

Krok 9: Czujniki podczerwieni i ultradźwiękowe

Czujniki podczerwieni i ultradźwiękowe
Czujniki podczerwieni i ultradźwiękowe
Czujniki podczerwieni i ultradźwiękowe
Czujniki podczerwieni i ultradźwiękowe

Dalej są czujnik podczerwieni (po lewej stronie robota) i czujnik ultradźwiękowy (po prawej). Również 4 szpilki do mocowania klocka na górze.

Czujniki podczerwieni i ultradźwiękowe są umieszczone pionowo zamiast normalnego poziomego. Zapewnia to lepszą identyfikację narożników lub końców ścian.

Krok 10: Kable

Kable
Kable

Kable łączą się z klockiem w następujący sposób:

  • Port B: lewy duży silnik.
  • Port C: prawy duży silnik.
  • Port 2: czujnik ultradźwiękowy.
  • Port 3: czujnik koloru.
  • Port 4: czujnik podczerwieni.

Krok 11: Ostatni krok w budowie robota: Dekoracja

Ostatni krok w budowie robota: dekoracja
Ostatni krok w budowie robota: dekoracja
Ostatni krok w budowie robota: dekoracja
Ostatni krok w budowie robota: dekoracja

Skrzydła i płetwy służą wyłącznie do dekoracji.

Krok 12: Zbuduj labirynt

Zbuduj labirynt
Zbuduj labirynt
Zbuduj labirynt
Zbuduj labirynt

Dwa kartony z tektury falistej powinny wystarczyć na labirynt. Wykonałem ściany labiryntu o wysokości 5 cali (12,5 cm), ale 4 cale (10 cm) powinny działać równie dobrze, jeśli brakuje Ci tektury falistej.

Najpierw wycinam ścianki kartonów, 10 cali (25 cm) od dołu. Następnie przeciąłem ściany 5 cali od dołu. Zapewnia to kilka 5-calowych ścian. Ponadto wycinam dna kartonów, pozostawiając około 2,5 cm przymocowane do ścian, aby zapewnić stabilność.

Poszczególne elementy można wyciąć i skleić lub przykleić taśmą w dowolnym miejscu, aby utworzyć labirynt. Pomiędzy ścianami bocznymi na każdej ścieżce ze ślepym zaułkiem powinna być przestrzeń 30 cm. Długość nie powinna być mniejsza niż 10 cali (25 cm). Te odległości są potrzebne, aby robot mógł się zawrócić.

Niektóre narożniki labiryntu mogą wymagać wzmocnienia, a niektóre proste ściany muszą być zabezpieczone przed wygięciem, jeśli zawierają wyprostowany narożnik kartonu. W tych miejscach od spodu należy przykleić małe kawałki cienkiej tektury, jak pokazano na rysunku.

Wyjście ma czerwoną barierkę składającą się z połowy czerwonej koperty na kartkę z życzeniami i podstawy wykonanej z 2 kawałków cienkiego kartonu, jak pokazano.

Krok 13: Labirynt

Labirynt
Labirynt

Jedna uwaga jest taka, że labirynt nie powinien być duży. Jeśli obroty robota są pod niewielkim kątem od właściwego, rozbieżności sumują się po kilku obrotach i robot może wpaść na ściany. Musiałem kilka razy bawić się ustawieniami obrotów zakrętów, aby uzyskać udaną jazdę nawet przez mały labirynt, który zrobiłem.

Sposobem na obejście tego problemu jest włączenie procedury prostowania ścieżki, która utrzymywałaby robota w określonej odległości od lewej ściany. Nie włączyłem tego. Program jest już na tyle skomplikowany, że wystarczy do zademonstrowania koncepcji AI w tym projekcie.

UWAGA KOŃCOWA

To był fajny projekt i wspaniałe doświadczenie edukacyjne. Mam nadzieję, że tobie też się spodoba.

Zalecana: