====== Laboratorium (zaawansowane algorytmy w PLNXT) ====== Tym razem, robotem, z którym nam przyszło współpracować, był Henio. W odróżnieniu od Franka, na którym ostatnio przeprowadzaliśmy nasze ćwiczenia, Henio nie stawiał oporu przy próbach połączenia się z komputerem przez Bluetooth, dzięki czemu mogliśmy niezwłocznie przystąpić do opracowywania algorytmów. ===== Algorytm 1 - Więzień ===== Z użyciem planszy testowej.\\ Wymagane sensory: światło.\\ Robot zaczyna działanie wewnątrz obszaru zaznaczonego grubą czarną linią na planszy testowej. Chce się z tego obszaru wydostać, ale nie może zrobić tego (nie wolno mu przekroczyć czarnej linii), dopóki nie znajdzie „klucza” - czerwonego obszaru symbolizującego piłkę. Po najechaniu na „klucz” sygnalizuje to dźwiękiem i ucieka z obszaru wewnątrz czarnej linii. Po wydostaniu się sygnalizuje ten fakt dźwiękiem i kończy pracę. :- consult('plnxt.pl'). start :- nxt_open, nxt_light_LED(activate), thread_create(go_on_buddy,_,[detached(true)]). go_on_buddy :- nxt_go(300), % jazda do przodu trigger_create(_,border,check_border_buddy), trigger_create(_,key,check_key). check_border_buddy :- nxt_stop, nxt_go_cm(-300,10,force), nxt_rotate(360,90), go_on_buddy. check_key :- nxt_stop, trigger_killall, nxt_play_tone(1000,500), % dzwiek - znalazl klucz nxt_go(300), % jazda do przodu trigger_create(_,border,finish). % Sprawdzenie, czy swiatlo jest ok border :- nxt_light(Value,force), Value < 50. % Sprawdzenie, czy klucz key :- nxt_light(Value,force), Value > 60, Value < 62. finish :- nxt_go_cm(300,20,force), % wyjazd poza linie nxt_play_tone(1000,500), % dzwiek poza bariera stop. stop :- trigger_killall, nxt_light_LED(passivate), nxt_stop, nxt_close. {{:pl:dydaktyka:piw2009:sprawozdania:alg1_wiezien.pl}} ===== Algorytm 2 - Sprzątacz ===== Wymagane sensory: odległość.\\ Robot ma za zadanie oczyścić teren w promieniu np. 40 cm od swojej początkowej pozycji. Jeżeli w tym obszarze znajdują się jakieś przeszkody, próbuje je wypchnąć poza niego. Po oczyszczeniu całego terenu, wraca do pozycji wyjściowej i kończy pracę. :- consult('plnxt.pl'). start :- nxt_open, nxt_light_LED(activate), thread_create(go_on_buddy,_,[detached(true)]). go_on_buddy :- nxt_rotate(200,720), trigger_create(_,place,check_place). check_place :- nxt_stop, nxt_go_cm(300,15), nxt_go_cm(-300,15), go_on_buddy. % Sprawdzenie, czy jest element place :- nxt_ultrasonic(Value,force), Value < 19. stop :- trigger_killall, nxt_light_LED(passivate), nxt_stop, nxt_close. {{:pl:dydaktyka:piw2009:sprawozdania:alg2_sprzatacz.pl|}} ===== Spostrzeżenia, napotkane problemy, wnioski ===== Podstawowym problemem w pierwszym algorytmie było takie dobranie parametrów granicznych dla sensora światła, aby białe pole, czarna granica i czerwony klucz zostały odpowiednio rozpoznane. Przeprowadzone próby pokazały, że lepsze wyniki daje odczyt z włączoną lapmką LED, jednak nawet to nie jest w stanie zapewnić stuprocentowej pewności rozpoznania. O ile granica między czarnym i białym była wyraźna, o tyle kolor czerwony sprawił nam niewielkie problemy. Często kwestia rozpoznania zależała od tego, czy badane pole było w cieniu robota. Niemniej udało nam się uzyskać pożądany efekt.\\ \\ Algorytm sprzątacza nie sprawił takich trudności. Na jego potrzeby zmodyfikowaliśmy nieco naszego robota, dodając z przodu poprzeczną belkę, która wypychała napotkane przeszkody.