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ł.
pl/dydaktyka/piw/2010/sprawozdania/piw20100609-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