Arbitraż

Cel ćwiczenia

Zaprogramowanie arbitrażu zachowań jako maszyny stanów skończonych.

Wstęp teoretyczny

W poprzednich ćwiczeniach zaprogramowano robota, który potrafi dotrzeć do celu (punktu o zadanych współrzędnych) oraz takiego, który omija przeszkody. Prawidłowo napisany program realizuje trzy zachowania:

  • jazda do celu: go_to_goal

  • omijanie przeszkód: avoid_obstacles

  • zatrzymanie u celu: hold.

W bieżącym ćwiczeniu wszystkie te zachowania należy połączyć. Do dyspozycji mamy dwie metody arbitrażu (wyboru) zachowań: przełączanie (hard switching) oraz łączenie (blending). Do realizacji obu zastosujemy prostą maszynę stanów skończonych.

Hard switching

Robot inicjalizuje się w stanie go_to_goal. Jadąc do celu jednocześnie mierzy odległość od przeszkody oraz estymuje swoje położenie. Gdy robot niebezpiecznie zbliży się do przeszkody, tzn. odległość od przeszkody jest mniejsza, niż pewna zadana wartość \(d_o\) (guard at_obstacle), robot porzuca jazdę do celu i zaczyna jechać od przeszkody (jest w stanie avoid_obstacles). W momencie, gdy robot oddali się od przeszkody na bezpieczną odległość \(d_o+\varepsilon\) (guard obstacle_cleared), przełącza się z powrotem do zachowania go_to_goal. Jednocześnie w obu tych stanach, jeśli odległość od celu jest mniejsza, niż np. połowa szerokości robota \(L\) (guard at_goal), robot przechodzi do zachowania Hold i program kończy swoje działanie. Pełną maszynę stanów przedstawia poniższy schemat.

../_images/State_machine_switch.png

Blending

Blending polega na łączeniu obu zachowań. Wektor sterujący robota jest sumą ważoną wektorów \(u_{gtg}\) oraz \(u_{ao}\). Waga \(\alpha\) jest albo zadana na stałe, albo jest np. funkcją odległości od przeszkody (jak w przykładach omawianych na wykładzie). Wektory przed sumowaniem należy znormalizować. Wypadkowy wektor sterujący ma postać:

\[u_{blend} = \alpha\frac{u_{gtg}}{||u_{gtg}||} + (1-\alpha)\frac{u_{ao}}{||u_{ao}||}\]

Blending w programie jest implementowany jako oddzielny stan. Maszyna stanów składa się z tylko dwóch stanów (blending oraz hold) oraz jednego przejścia między nimi (guard at_goal).

Kompletna maszyna stanów

Kompletna maszyna stanów realizuje wszystkie wymienione wcześniej zachowania. Robot startuje w stanie go_to_goal, przy pewnej odległości od przeszkody (guard at_obstacle i powrotny obstacle_cleared) przechodzi do stanu blend. Jeśli robot realizujący zachowanie blend znajdzie się niebezpiecznie blisko przeszkody (guard unsafe oraz powrotny safe), to przełącza się do zachowania avoid_obstacles. W każdym z tych zachowań jeśli robot dojedzie do celu, to przełącza się do stanu hold i program kończy działanie. Pełną maszynę stanów przedstawia poniższy diagram.

../_images/State_machine_full.png

Modyfikacja avoid_obstacles

W poprzednim ćwiczeniu wyznaczanie wektora dla zachowania avoid_obstacles różniło się od tego, które było omawiane na wykładzie. Aby otrzymać “czysty” wektor skierowany od przeszkody należy kod z poprzedniego ćwiczenia zmodyfikować. Najprościej można to zrobić odejmując od wartości odczytywanej przez każdy z czujników odpowiednią wartość maksymalną. Wtedy wektor od czujnika nie widzącego przeszkody będzie zerowy, a dla czujnika widzącego przeszkodę wektor będzie skierowany przeciwnie a jego wartość będzie rosła ze zbliżaniem się do przeszkody.

Wykonanie ćwiczenia

W ćwiczeniu wykorzystany jest robot educator z trzema czujnikami odległości.

  1. Zaprogramuj robota, który będzie potrafił dojechać do zadanego celu omijając przeszkody. Zadanie można wykonać na kilka sposobów:

    1. Robot realizuje strategię hard switching.

    2. Robot realizuje blending.

    3. Robot realizuje kompletną maszynę stanów.

  2. Przetestuj robota na przykładowym torze (np. wykorzystując markery z poprzednich ćwiczeń.

  3. Na końcu zajęć wszystkie roboty powinny wziąć udział w wyścigu. Roboty startują w drzwiach laboratorium (A/0/06) i powinny korytarzem dojechać do drzwi A/0/06’. Roboty powinny ominąć przeszkody ustawione w korytarzu. Współrzędne startu: \((0,0)\), współrzędne celu: \((0, -350)\) (odległości w centymetrach).

  4. Wyniki wyścigu (czas przejazdu i odległość od celu - środka drzwi) zapisz w arkuszu.

Opis sprawozdania

Sprawozdanie z ćwiczenia powinno zawierać:

  1. Listingi programów (pliki .py i/lub .ev3) z optymalnymi wartościami parametrów.

  2. Tabela wyników.

  3. Wnioski – dyskusja wyników.