Robotyka i druk 3D

Micromouse – jak działa robot rozwiązujący labirynty i jak go zbudować

Spis treści
Micromouse – jak działa robot rozwiązujący labirynty i jak go zbudować

Robot Micromouse to niewielki, w pełni autonomiczny pojazd, którego zadaniem jest samodzielne zmapowanie labiryntu, wyznaczenie optymalnej trasy i jak najszybsze dotarcie od pola startowego do mety. Jego konstrukcja łączy mechanikę, elektronikę, automatykę oraz algorytmy przetwarzania informacji.

Czym jest Micromouse i na czym polegają zawody?

Konkurencja Micromouse powstała pod koniec lat 70. XX wieku. Do dziś cieszy się popularnością na uczelniach technicznych i podczas zawodów robotycznych. Startujące w niej roboty są małe, szybkie oraz wyposażone w czujniki wykrywające ściany, a także algorytmy mapowania i planowania trasy.

Typowy labirynt składa się z siatki pól, na przykład 16 × 16, rozdzielonych ścianami o ściśle określonych wymiarach i tolerancjach. Meta znajduje się zwykle w centrum planszy. Robot musi dotrzeć do celu, zbadać układ ścian, wyznaczyć najlepszą trasę, a następnie pokonać ją w możliwie najkrótszym czasie.

Przebieg zawodów obejmuje zazwyczaj następujące etapy:

  1. ustawienie robota w punkcie startowym, kalibrację czujników i wybór strategii,
  2. wykonanie przejazdu eksploracyjnego, podczas którego robot buduje mapę labiryntu i zapisuje rozmieszczenie ścian,
  3. dalszą eksplorację po znalezieniu mety, poszukiwanie szybszych tras i ewentualny powrót do punktu startowego,
  4. wykonanie jednego lub kilku przejazdów na czas po wyznaczonej trasie.

Każda ingerencja zawodnika, na przykład podniesienie robota po zakleszczeniu, może skutkować doliczeniem karnych sekund. Wynik stanowi najczęściej czas najszybszego przejazdu powiększony o ewentualne kary. Regulamin może również uwzględniać całkowity czas spędzony przez robota w labiryncie.

Jak działa Micromouse – główne zadania robota

Najważniejsze cechy robota Micromouse to:

  • pełna autonomia – robot nie jest sterowany zdalnie i samodzielnie wybiera kierunek jazdy;
  • wykrywanie ścian – czujniki rozpoznają przeszkody, a system zapisuje ich położenie w pamięci;
  • mapowanie i planowanie trasy – oprogramowanie tworzy graf pól labiryntu i minimalizuje koszt przejazdu;
  • precyzyjna kontrola ruchu – napęd różnicowy pozwala regulować prędkość, położenie i kierunek jazdy.

Cykl działania robota można przedstawić w kilku krokach:

  1. pomiar odległości od ścian za pomocą czujników umieszczonych z przodu i po bokach oraz odczyt enkoderów kół,
  2. aktualizacja wewnętrznej mapy labiryntu i oznaczenie dostępnych oraz zablokowanych przejść między polami,
  3. wyznaczenie kosztu poszczególnych pól, na przykład liczby kroków do mety, przy użyciu wypełniania zalewowego, metody Bellmana lub innego algorytmu przeszukiwania grafu,
  4. wybór sąsiedniego pola o najniższym koszcie i zaplanowanie odpowiedniego manewru, takiego jak skręt lub jazda na wprost,
  5. sterowanie silnikami za pomocą sygnału PWM oraz bieżące korygowanie toru jazdy z wykorzystaniem regulatora PID, enkoderów i czujników ścian.

Robot nie musi znać całego labiryntu przed rozpoczęciem przejazdu. Algorytmy korzystają z aktualnie dostępnych danych, a mapa jest stopniowo uzupełniana w trakcie eksploracji.

Algorytmy rozwiązywania labiryntu

Reprezentacja labiryntu

Labirynt jest zazwyczaj reprezentowany jako siatka pól, na przykład 16 × 16. Każde pole może być ograniczone ścianą z przodu, z tyłu, z lewej lub z prawej strony. Informacje o przeszkodach zapisuje się w tablicach albo strukturach danych powiązanych z polami i aktualizuje na podstawie odczytów czujników.

System przechowuje również tablicę wag lub dystansów określających liczbę kroków bądź inny koszt dotarcia z danego pola do celu. Na podstawie tych wartości robot wybiera kolejne pola i wyznacza swoją trajektorię.

Wypełnianie zalewowe, czyli metoda Bellmana

Jednym z najpopularniejszych algorytmów stosowanych w robotach Micromouse jest wypełnianie zalewowe, znane również jako flood fill lub metoda wypełniania Bellmana.

Podstawowa zasada działania algorytmu jest następująca:

  • polu docelowemu przypisuje się wagę 0,
  • wszystkim dostępnym sąsiadom przypisuje się wagę 1, ich sąsiadom wagę 2 i tak dalej, z uwzględnieniem wykrytych ścian,
  • proces powtarza się do chwili, gdy wszystkie osiągalne pola otrzymają odpowiednią wagę.

Podczas jazdy robot wybiera sąsiednie pole o najniższej wadze, dzięki czemu stopniowo zbliża się do celu. Po wykryciu nowych ścian może ponownie przeliczyć wartości i dostosować trasę do zaktualizowanej mapy.

Algorytmy grafowe – algorytm Dijkstry i A*

Do wyznaczania najkrótszej lub najszybszej ścieżki można również wykorzystać klasyczne algorytmy grafowe. Algorytm Dijkstry znajduje najtańszą trasę przy dodatnich kosztach krawędzi, które mogą oznaczać liczbę kroków, długość drogi lub przewidywany czas przejazdu.

Algorytm A* przyspiesza przeszukiwanie dzięki heurystyce, na przykład odległości Manhattan. Sprawdza się szczególnie dobrze wtedy, gdy można wiarygodnie oszacować kierunek prowadzący do celu.

Obie metody mogą współpracować z wypełnianiem zalewowym i dodatkowymi optymalizacjami, aby ograniczyć czas obliczeń oraz poprawić jakość wyznaczonej trasy.

Architektura robota Micromouse

Mechanika – napęd różnicowy

Większość robotów Micromouse wykorzystuje napęd różnicowy, czyli dwa niezależnie sterowane koła napędowe umieszczone po bokach konstrukcji. Takie rozwiązanie pozwala na:

  • obrót w miejscu przez sterowanie kołami w przeciwnych kierunkach,
  • precyzyjne regulowanie promienia skrętu dzięki różnicowaniu prędkości kół,
  • zbudowanie prostej, lekkiej i zwartej konstrukcji mechanicznej.

Napęd tworzą najczęściej silniki prądu stałego lub silniki bezszczotkowe BLDC współpracujące z przekładniami. Prędkość i położenie kół mierzy się za pomocą enkoderów inkrementalnych albo magnetycznych.

Korpus robota powinien być możliwie niski, lekki i sztywny. Zwiększa to stabilność podczas dynamicznego przyspieszania i ogranicza drgania, które mogłyby zakłócać pomiary.

Zasilanie

Do zasilania robota Micromouse powszechnie stosuje się lekkie i kompaktowe akumulatory litowo-polimerowe Li-Po. Zapewniają one wysoką gęstość energii oraz możliwość dostarczania dużego prądu podczas przyspieszania.

Stabilne napięcie dla elektroniki zapewniają przetwornice impulsowe lub stabilizatory liniowe dopasowane do mikrokontrolera i układów logicznych. Warto również zastosować oddzielne linie zasilania silników, aby ograniczyć zakłócenia przenoszone do części sterującej.

Niezbędne jest zabezpieczenie akumulatora Li-Po przed nadmiernym rozładowaniem oraz skuteczne filtrowanie zasilania podczas gwałtownych zmian obciążenia wywołanych pracą silników.

Mikrokontroler i elektronika sterująca

Mikrokontroler jest główną jednostką sterującą robotem. Powinien obsługiwać:

  • generowanie sygnałów PWM do sterowania silnikami,
  • pomiary za pomocą przetwornika ADC dla czujników analogowych, takich jak fototranzystory IR,
  • przerwania generowane przez enkodery kół,
  • liczniki czasu służące do synchronizacji zadań,
  • komunikację przez UART, USB lub Bluetooth wykorzystywaną do konfiguracji i diagnostyki.

Wymagania te spełniają między innymi mikrokontrolery z rodzin ARM Cortex-M i AVR, a także układy stosowane na platformach Arduino. Kluczowe znaczenie mają liczba kanałów PWM i ADC, dostępne interfejsy oraz wydajność obliczeniowa wystarczająca do sterowania ruchem i planowania trasy.

System sensoryczny – jak robot „widzi” labirynt

Czujniki ścian – typowe rozwiązanie IR

Najczęściej stosowanym rozwiązaniem są czujniki podczerwieni złożone z diod IR oraz fototranzystorów lub fotodiod.

Przykładowy cykl pomiarowy modułu IR przebiega następująco:

  1. robot mierzy napięcie na fototranzystorze przy wyłączonej diodzie IR, rejestrując wpływ światła otoczenia,
  2. włącza diodę IR skierowaną na ścianę i ponownie wykonuje pomiar,
  3. oblicza różnicę między odczytami, a następnie wykrywa obecność ściany lub szacuje odległość od niej.

Czujniki przednie wykrywają przeszkody znajdujące się na torze jazdy, natomiast boczne pomagają centrować robota w korytarzu i rozpoznawać skrzyżowania. Dzięki temu robot może określać swoje położenie i precyzyjnie poruszać się względem ścian.

Inne czujniki – enkodery i IMU

Enkodery kół dostarczają informacji o przebytej drodze i prędkości. Konstrukcję można również wyposażyć w moduł IMU zawierający akcelerometr i żyroskop, które mierzą przyspieszenia oraz prędkość kątową.

Połączenie danych z enkoderów i modułu IMU umożliwia:

  • dokładniejszą kontrolę prędkości i pozycji,
  • częściowe kompensowanie poślizgu kół oraz odchylenia od zadanej trajektorii,
  • poprawę dokładności orientacji w miejscach, w których robot nie może wykorzystać ścian jako punktu odniesienia.

Oprogramowanie – warstwy systemu

Oprogramowanie robota Micromouse warto podzielić na logiczne warstwy:

  1. warstwa abstrakcji sprzętu – steruje GPIO, PWM i ADC oraz obsługuje przerwania, liczniki czasu i urządzenia peryferyjne mikrokontrolera;
  2. sterowniki urządzeń – odpowiadają za silniki, enkodery, czujniki IR i moduły komunikacyjne;
  3. warstwa lokalizacji i mapowania – oblicza aktualną pozycję oraz orientację robota, zapisuje ściany i aktualizuje mapę;
  4. planowanie trasy – wykorzystuje wypełnianie zalewowe, algorytm Dijkstry, A* lub inne metody grafowe do wyznaczania optymalnej ścieżki;
  5. sterowanie ruchem – generuje trajektorie obejmujące odcinki proste i skręty, a następnie realizuje je za pomocą regulatorów PID;
  6. logika zadania – zarządza kalibracją, eksploracją, powrotem do startu, przygotowaniem przejazdu na czas, szybkim przejazdem i reakcją na błędy.

Skuteczne oprogramowanie Micromouse wymaga wyraźnego rozdzielenia warstw, prawidłowego zarządzania czasem rzeczywistym oraz odpowiedniego ustalenia priorytetów zadań.

Jak zbudować własnego robota Micromouse – praktyczny przewodnik

Budowę robota warto podzielić na kolejne etapy: określenie wymagań, przygotowanie mechaniki i elektroniki, uruchomienie podstawowego sterowania oraz stopniowe rozwijanie algorytmów.

1. Założenia projektowe

Przed rozpoczęciem prac należy określić najważniejsze założenia:

  • zgodność z regulaminem – trzeba sprawdzić dopuszczalne wymiary robota, wyposażenie i zasady obowiązujące podczas wybranych zawodów Micromouse;
  • priorytety konstrukcji – robot powinien być najpierw niezawodny i powtarzalny, a dopiero później maksymalnie szybki;
  • stopień złożoności – na początek najlepiej wybrać klasyczny napęd różnicowy oraz czujniki IR zamiast bardziej skomplikowanych rozwiązań.

Dobrą praktyką jest zbudowanie modułowego labiryntu testowego z pojedynczych segmentów. Umożliwia on szybką zmianę układu ścian i sprawdzanie algorytmów w różnych warunkach.

2. Projekt mechaniki

Projektowanie mechaniki można podzielić na następujące kroki:

  1. zaprojektowanie płyty głównej, na przykład z laminatu FR4, która będzie jednocześnie nośnikiem elektroniki i elementem konstrukcyjnym,
  2. dobór kół, silników i przekładni zapewniających odpowiednią prędkość maksymalną oraz precyzję pokonywania krótkich odcinków,
  3. rozmieszczenie czujników IR tak, aby ich pola widzenia obejmowały przestrzeń przed robotem oraz ściany po jego bokach,
  4. przygotowanie bezpiecznego mocowania akumulatora Li-Po i łatwo dostępnego złącza do ładowania.

Środek masy powinien znajdować się możliwie nisko, a rozstaw kół musi zapewniać stabilność podczas gwałtownego przyspieszania, skręcania i hamowania.

3. Projekt elektroniki

Elektronikę warto podzielić na cztery podstawowe bloki:

  • zasilanie – wejście z akumulatora Li-Po, przetwornice dla układów logicznych i napędu oraz zabezpieczenie przed nadmiernym rozładowaniem;
  • mikrokontroler – układ z odpowiednią liczbą kanałów PWM i ADC, złączami do programowania i diagnostyki oraz wejściami dla enkoderów i czujników;
  • sterowniki silników – mostki H regulujące kierunek i prędkość silników prądu stałego oraz odpowiednio poprowadzone linie masy i zasilania;
  • czujniki – diody IR, fototranzystory lub fotodiody z układami wzmacniającymi i filtrującymi, a opcjonalnie także moduł IMU komunikujący się przez magistralę I²C lub SPI.

W pierwszej wersji robota warto wyprowadzić dodatkowe piny dla diod LED lub portu komunikacyjnego. Ułatwi to diagnostykę, na przykład przez przesyłanie mapy do komputera za pomocą interfejsu UART.

4. Oprogramowanie krok po kroku

Zalecana kolejność prac nad oprogramowaniem wygląda następująco:

  1. uruchomienie podstawowych funkcji mikrokontrolera, takich jak zegary, GPIO, UART i liczniki czasu,
  2. wdrożenie sterowania silnikami za pomocą PWM oraz prostych poleceń jazdy do przodu, skręcania i zatrzymywania,
  3. uruchomienie odczytu czujników IR i enkoderów, przeprowadzenie kalibracji oraz ustalenie progów wykrywania ścian,
  4. implementacja regulatora PID kontrolującego prędkość i pozycję kół,
  5. utworzenie reprezentacji pól labiryntu oraz mapy zapisującej wykryte ściany,
  6. implementacja algorytmu wypełniania zalewowego i przeprowadzenie testów w niewielkim labiryncie, na przykład 4 × 4,
  7. dodanie bardziej zaawansowanych algorytmów, takich jak Dijkstra lub A*, optymalizacja trasy i uruchomienie przejazdu na czas.

Przydatnym narzędziem jest interfejs wizualizujący mapę na komputerze. Może on odbierać dane z robota i prezentować sposób, w jaki system rozpoznaje układ labiryntu.

Typowe problemy i dobre praktyki

Podczas budowy i programowania robota Micromouse najczęściej pojawiają się następujące problemy:

  • zakłócenia zasilania generowane przez silniki – mogą wpływać na pomiary ADC, dlatego należy zastosować skuteczną filtrację i odpowiednio rozdzielić linie zasilania;
  • nieprawidłowa kalibracja czujników IR – źle dobrane progi wykrywania prowadzą do błędnych pomiarów, dlatego warto porównywać odczyty przy włączonej i wyłączonej diodzie;
  • niedokładność enkoderów lub poślizg kół – powodują błędy lokalizacji, które można częściowo kompensować za pomocą modułu IMU i regularnego korygowania pozycji względem ścian;
  • błędy w mapowaniu – algorytm powinien działać poprawnie mimo niepełnych danych i konsekwentnie aktualizować mapę podczas eksploracji.

Dobrze zaprojektowany Micromouse może wielokrotnie pokonywać labirynt po zoptymalizowanej trasie dzięki zapamiętaniu układu ścian, skutecznemu planowaniu i precyzyjnej kontroli ruchu.