Info

  • Robot: Dyzio
  • Skład: Michał Gamrat, Przemysław Brzeziński, Łukasz Różycki

Laboratorium

Więzień

Opis

Przed przystąpieniem do programowania wyposażyliśmy robota w sensor z diodą i czujnikiem światła. Zestawienie połączenia przebiegło bez utrudnień - robot poprawnie wykonywał testowe polecenia.

Do wykonania programu „Więzień” rozłożyliśmy matę, oraz dokonaliśmy pomiarów wartości z czujnika światła dla obszarów maty koloru białego, czerwonego i czarnego. Tutaj pojawiła się pierwsza trudność tego zagadnienia: różnica jasności pola białego i czerwonego była bardzo niewielka, co niekiedy powodowało błędne zachowanie robota. Dodatkowym utrudnieniem rozpoznawania kolorów przez sensor było nieregularne światło zewnętrzne - wartości jasności jednego koloru różniły się na przestrzeni planszy. Problem ten próbowaliśmy zniwelować poprzez umieszczenie diody zaraz nad powierzchnią maty. Dzięki temu zewnętrzne oświetlenie nie padało na analizowany przez sensor fragment papieru. Jednak i to rozwiązanie nie przyniosło oczekiwanych rezultatów, ponieważ czerwone pole tak samo odbijało światło tego samego koloru jak pole białe. Wartości były niemal identyczne, dlatego zdecydowaliśmy się powrócić do poprzedniej konfiguracji.

Świadomi powyższego problemu przystąpiliśmy do projektowania algorytmu, którego kod znajduje się poniżej:

Kod

start :-
        nxt_open,
        nxt_light_LED(activate),
        nxt_go(200),
        trigger_create(_,check_distance,obstacle),
        trigger_create(_,klucz,uciekaj).
 
check_distance :-
 
        nxt_light(Value,force),
        Value < 48.
 
klucz :-
        nxt_light(Value, force),
        Value > 61,
        Value < 64.
 
obstacle :-
 
        nxt_stop,
        Angle is 120 + random(120),
        nxt_rotate(300,Angle),
        start.
 
 
uciekaj :-
        nxt_play_tone(1000, 500),
        nxt_stop,        
        trigger_killall,
        ucieczka.
 
ucieczka :-        
        nxt_light_LED(activate),
        nxt_go(150, force),
        trigger_create(_,czy_uciekl,koniec).
 
 
czy_uciekl :-
 
        nxt_light(Value,force),
        Value < 48.
 
koniec :-
        trigger_killall,        
        nxt_play_tone(5000, 500),
        finish.
 
 
 
finish :-
        nxt_stop,
        nxt_light_LED(passivate),
        nxt_close.

Problemy techniczne

Po wczytaniu wersji roboczej naszego programu parę razy wystąpiła konieczność zakończenia procesu powłoki Prolog poleceniem kill, ponieważ robot nie reagował na komendę zakończenia pracy. Po usunięciu procesu należało ponownie zestawić połączenie, następnie skompilować plik plnxt, otworzyć połączenie i zakończyć pracę robota.

Podsumowanie

W tym laboratorium zapoznaliśmy się z mechanizmem wyzwalaczy (trigger), co umożliwiło nam wykonanie bardziej złożonych programów. Dzięki temu mogliśmy zaprojektować bardziej skomplikowane zachowanie robota.

pl/dydaktyka/piw/2010/sprawozdania/piw20100526-17e.txt · ostatnio zmienione: 2019/06/27 15:50 (edycja zewnętrzna)
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0