====== 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 ====== * Zadanie Więźnia jest bardzo ciekawe lecz bardzo trudne do zrealizowania. Zamiast szukania klucza sensorem światła może warto byłoby pomyśleć o innym rozwiązaniu np. postawienia przeszkody którą robot by wykrywał, dotykał (tak jakby wzięcie klucza w ręce) a następnie dopiero uciekał.