====== 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}}