22.04.2009, godz. 9.30
grupa w składzie: Joanna Koza, Tomasz Michalski, Kamil Mucha
Informatyka Stosowana IV 2008/2009
KA, WEAIiE, AGH
robot GIENEK
Bez problemów.
./bin/plnxt_stty gienek - brak konieczności parowania
plnxt.pl
% Specify the device files. nxt_serial_device(write,'/dev/rfcomm7'). nxt_serial_device(read,'/dev/rfcomm7').
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:
Zadanie to chcieliśmy wykonać na końcu, ale robot nie był wyposażony w szczypce i nie wystarczyło czasu na ich podłączenie.
Algorytm nie został przetestowany.
start :- nxt_open, thread_create(go_slowly,_,[detached(true)]). :- consult('plnxt.pl'), start. go_slowly :- nxt_stop, nxt_go(150), trigger_create(10, clap, stop), trigger_create(_, obstacle, make_turn). make_turn :- nxt_stop, trigger_kill(10), nxt_go(-200), sleep(1), nxt_stop, nxt_rotate(350, 90 + random(90)), sleep(2), go_slowly. clap :- nxt_sound(Value,force), Value > 50. obstacle :- nxt_ultrasonic(D,force), D < 20. stop :- trigger_killall, nxt_stop, nxt_close.
start :- nxt_open, thread_create(go_slowly,_,[detached(true)]), trigger_create(_,touch,stop). :- consult('plnxt.pl'), start. go_slowly :- nxt_stop, nxt_go(110), trigger_create(_,clap,panic). panic :- nxt_stop, nxt_rotate(350,-180 + random(360)), nxt_go(500), sleep(2), go_slowly. % Sprawdzenie, czy natężenie dźwięku przekracza progową wartość clap :- nxt_sound(Value,force), Value > 50. touch :- nxt_touch(V, force), V = 1. stop :- trigger_killall, nxt_stop, nxt_close.
filmik do pobrania:
http://student.agh.edu.pl/~kmucha/piw/akt2-TPP.3GP
nxt_rotate(350,90)
obraca robota o ok. 85 stopni, dlatego nie da się zrealizować idealnego ruchu po kwadracie (jeden z przykładów). Wynikać to może zarówno ze specyfiki samego PLNXT (niedokładne parametry obrotu silników w reakcji na polecenia), jak i z ograniczeń konstrukcyjnych (poślizg opon i/lub zły rozstaw kół).