Sprawozdanie z laboratorium (zapoznanie z PLNXT)
Robot: Dyzio
Data wykonania: 09.06.2010 godz. 17:00
Autorzy: Przemysław Brzeziński, Michał Gamrat, Łukasz Różycki
Budowa robota
Otrzymaliśmy jak zawsze zbudowanego robota o nazwie Dyzio. Dokonaliśmy kilku drobnych modyfikacji tak aby czujnik światła znajdował się jak najbliżej ziemi, zgodnie z instrukcjami do tego laboratorium.
Implementacja algorytmu
Następnie rozpoczęliśmy poprawianie algorytmu Więzień, który implementowaliśmy na jednym z wcześniejszych laboratoriów. Jak ustaliliśmy z innymi grupami ucieczka po wykryciu koloru czerwonego była bardzo trudna do zrealizowania. Próbowaliśmy wielu różnych sztuczek:
Regulowaliśmy odległość sensora światła od podłoża
Robiliśmy pomiary z zarówno włączonym jak i wyłączonym LEDem
Umieszczaliśmy plansze w różnych miejscach, pod stołem w cieniu, obok stołu, tradycyjnie na stole
Pobieraliśmy próbki testowe poruszającego się robota.
Niestety żaden z tych pomysłów się nie sprawdził. Spróbowaliśmy więc zamienić kolor czerwony jakimś innym. W tym celu wykorzystaliśmy niebieską kartę bankomatową. Jednak i to nie przyniosło żadnego skutku.
Warto tu przytoczyć naszą obserwację: odczytany z czujnika poziom naświetlenia podczas poruszania się był inny niż dla robota stojącego w miejscu! Jest to bardzo ważna informacja, ponieważ kolor biały od czerwonego/niebieskiego różni się bardzo niewiele. Dotatkowy błąd spowodowany wstrząsami poruszającego się robota sprawia, że zadania wydaje się nam nieosiągalne.
Co więcej, podczas jednej z prób pomiarowych kolor biały i czerwony dały identyczne wyniki (!!) zarówno przy włączonej diodzie jak i przy diodzie wyłączonej.
Kod
Poniżej znajduje się kod programu, który wielokrotnie modyfikowaliśmy i ustawialiśmy różne przedziały dla próbek sensora światła
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.
Komunikacja między robotami
Niestety pochłonięci problemem rozwiązania zadania straciliśmy na nie zbyt dużo czasu. Również grupa z którą mieliśmy przeprowadzić komunikacje nie uporała się z implementacją algorytmu więc nie mamy żadnych sensownych źródeł programu.
Wnioski
Pobieranie próbek z poruszającego się robota wprowadza dodatkowy błąd, ponieważ jadący robot się trzęsie. Robot po znalezieniu koloru różnego od białego zatrzymuje się, co powoduje jeszcze większe wstrząsy. Rozwiązanie problemu bez poważnych zmian w konstrukcji robota wydaje się nam niewykonalne.
Zamiana koloru z czerwonego na niebieski niewiele pomogła. Podobnie jak w przypadku czerwonego, próbki światła pobrane na zagięciach planszy czy na szarych liniach powodowały błędne działanie programu
Uwagi