====== Laboratorium - zaawansowane algorytmy w PLNXT ====== 29.04.2009, godz. 9.30\\ grupa w składzie: Joanna Koza, Tomasz Michalski, Kamil Mucha\\ Informatyka Stosowana IV 2008/2009\\ KA, WEAIiE, AGH\\ \\ robot IREK\\ ===== Robot ===== załączone sensory światła (koloru), dźwięku (mikrofon), dotyku i odległości\\ {{:pl:dydaktyka:piw2009:sprawozdania:akt3-irek.jpg|}} ===== Konfiguracja stanowiska do pracy z NXT ===== ==== Połączenie robota oraz pobranie PLNXT ==== Bez problemów. ==== Ustawienie parametrów portu i sparowanie ==== //./bin/plnxt_stty irek// - brak konieczności parowania ==== Konfiguracja PLNXT ==== **plnxt.pl**\\ % Specify the device files. nxt_serial_device(write,'/dev/rfcomm9'). nxt_serial_device(read,'/dev/rfcomm9'). ==== Sprawdzenie konfiguracji ==== Konfiguracja działa poprawnie. ===== Implementacja algorytmu ===== Uwaga! Wątki PLNXT nie działały u nas prawidłowo - dotyczy to najprawdopodobniej poleceniatrigger_killall Po pierwszym jego wywołaniu (np. używając predykat "stop"), kolejne stworzenie wątku poleceniem thread_create (np. używając predykat "start") sprawia, że wątku nie można już "zabić". Chcąc więc przerwać działanie programu, należy opuścić powłokę PL i uruchomić ją ponownie - jest to niewygodne i czasochłonne. Opisana sytuacja została uchwycona na poniższym zrzucie ekranu:\\ {{:pl:dydaktyka:piw2009:sprawozdania:akt2-error.jpg|}} Problem ten pojawił się już podczas poprzedniego laboratorium. ==== Więzień ==== start :- nxt_open, thread_create(search,_,[detached(true)]), trigger_create(_,touch,stop). :- consult('plnxt.pl'), start. %poszukiwanie czerwonego obszaru search :- nxt_stop, trigger_create(_,red,escape), nxt_go(140). %obrót po znalezieniu czarnej linii rotate :- nxt_stop, nxt_rotate(350, 90 + random(90)), sleep(2), search. %ucieczka po znalezieniu czerwonego klucza escape :- nxt_play_tone(440,100), nxt_stop, nxt_go(500), sleep(3), nxt_stop. %rozpoznanie czarnego koloru black :- nxt_light(Value,force), write(Value),nl, Value < 28. %rozpoznanie czerwonego koloru red :- nxt_light(Value,force), write(Value),nl, Value < 33, Value > 26, sleep(0.1), nxt_light(Value2,force), write('2: '),write(Value2),nl, Value2 < 33, Value2 > 26. touch :- nxt_touch(V, force), V = 1. stop :- trigger_killall, nxt_stop, nxt_close, halt. {{:pl:dydaktyka:piw2009:sprawozdania:akt3-prison.jpg|}} filmiki:\\ [[http://student.agh.edu.pl/~kmucha/piw/akt3-prison-black.avi|poszukiwanie]]\\ [[http://student.agh.edu.pl/~kmucha/piw/akt3-prison-red.AVI|ucieczka]] ==== Sprzątacz ==== start :- nxt_open, thread_create(search,_,[detached(true)]), trigger_create(_, found, clean), trigger_create(_, touch, stop). :- consult('plnxt.pl'), start. %poszukiwanie przedmiotu - obrót wokół własnej osi search :- write('search'), nl, nxt_stop, nxt_rotate(150, 36000), sleep(5). %sprzątanie - ruch do przodu (popchnięcie przedmiotu) i powrót clean :- write('clean'), nl, nxt_stop, nxt_go(300), sleep(3), write('back'),nl, nxt_stop, nxt_go(-300), sleep(3), trigger_create(_, found, clean), search. %sprawdzanie, czy jest przedmiot w promieniu 15 cm found :- nxt_ultrasonic(V, force), write(V), nl, V < 15. %wąłączenie robota touch :- nxt_touch(V, force), V = 1. stop :- nxt_play_tone(220,500), trigger_killall, nxt_stop, nxt_close. {{:pl:dydaktyka:piw2009:sprawozdania:akt3-clean.jpg|}} filmik:\\ [[http://student.agh.edu.pl/~kmucha/piw/akt3-clean.AVI|sprzątanie]] ===== Uwagi i wnioski ===== * zrealizowanie zadań "więzień" czy "śledzenie linii" w warunkach naszego laboratorium jest niezwykle trudne. Sensor światła odczytuje wartości w zakresie 0 - 100, jest to więc znormalizowana skala szarości. Różnice między kolorami (zwłaszcza ciemnymi, np. czerwonym i czarnym) są nieduże (biały - ok. 40, czarny - ok. 25, czerwony ok. 30), a sytuację dodatkowo pogarsza kierunkowe oświetlenie sali laboratoryjnej (brak jednakowego oświetlenia planszy testowej, światło pochodzące od okna sprawia, że inne obiekty oraz sam robot rzucają cienie na planszę), rozróżnianie kolorów jest więc trudne. Kontrastu nie poprawia niestety światło diody LED sensora, ponieważ kolor światła jest czerwony, co jeszcze pogarsza sytuację. ===== Załączniki ===== {{:pl:dydaktyka:piw2009:sprawozdania:lab3_koza_michalski_mucha.zip|Kody źródłowe}}