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
Bez problemów.
./bin/plnxt_stty irek - brak konieczności parowania
plnxt.pl
% Specify the device files. nxt_serial_device(write,'/dev/rfcomm9'). nxt_serial_device(read,'/dev/rfcomm9').
Konfiguracja działa poprawnie.
Uwaga! Wątki PLNXT nie działały u nas prawidłowo - dotyczy to najprawdopodobniej polecenia
trigger_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:
Problem ten pojawił się już podczas poprzedniego laboratorium.
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.
filmiki:
poszukiwanie
ucieczka
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.
filmik:
sprzątanie