Data: 22 kwietnia 2009
Godzina: 15.30
Grupa: Artur Kosztyła, Marcin Krzych
Robot: Gienek
Celem laboratorium było testowanie PLNXT w algorytmach o małej złożoności.
W czasie zajęć korzystaliśmy z zestawu Lego NXT łączącego się z komputerem za pomocą interfejsu BT oraz interfejsu programistycznego PLNXT.
Wszystkie przedstawione w opisie laboratorium na wiki przykłady zostały przeanalizowane i sprawdzone na robocie.
W tej fazie laboratorium nie napotkaliśmy żadnych problemów z funkcjonowaniem programów, jedynie, jak na załączonym zrzucie ekranu pojawił się problem z niezabitymi wątkami po wykonaniu programu reagującego na klaśnięcia.
W przykładzie z zatrzymywaniem i ruszaniem robota na klaśnięcie ustaliliśmy próg dźwięku na 50. Dopiero ta wartość pozwoliła nam wyeliminować hazardy pochodzące z otoczenia pracowni.
Co ciekawe robot rozpoznawał lekkie uderzenie dłonią w stół jako klaśnięcie i również wtedy reagował.
Jak widać, 2 wątki nie umarły po wykonaniu programu. Nastąpiło to po próbie wyjścia z konsoli po zakończeniu wykonania programu przez predykat stop
.
Przy stanowisku zastaliśmy robota skonstruowanego zgodnie z instrukcją znajdującą się w QuickStart, wraz z dołączonymi sensorami wyglądającego tak:
:- consult('./plnxt.pl'). start :- nxt_open, thread_create(touch,_,[detached(true)]), thread_create(go_on_buddy,_,[detached(true)]). go_on_buddy :- nxt_go(200), sleep(1), trigger_create(_,clap,run_away). touch :- nxt_touch(X), write(X), X > 0, stop. run_away :- nxt_stop, nxt_rotate(600,120), nxt_go_cm(900, 30), go_on_buddy. % Sprawdzenie, czy natężenie dźwięku przekracza wartość progową clap :- nxt_sound(Value,force), Value > 50. stop :- trigger_killall, nxt_stop, nxt_close.
Zadaniem robota było przemieszczanie się do przodu aż do momentu klaśnięcia. Wtedy robot obracał się o losowy kąt i szybko uciekał. Po pewnym czasie uspokajał się i kontynuował podróż normalnym wolnym tempem.
Zachowanie taki zostało opisane powyższym kodem, przy którego użyciu robot wykonywał zadanie i zachowywał się poprawnie.
Napotkaliśmy jednak na problemy z wątkami, opisane poniżej.
W czasie pracy nad ostatecznym kształtem algorytmu Panikarz, dla poniższego kodu:
:- consult('./plnxt.pl'). start :- nxt_open, thread_create(go_on_buddy,_,[detached(true)]). go_on_buddy :- nxt_go(200), sleep(1), trigger_create(_,clap,run_away), trigger_create(_,touch,stop). touch :- nxt_touch(X), X = 1. run_away :- nxt_stop, nxt_rotate(600,120), nxt_go_cm(900, 30), go_on_buddy. % Sprawdzenie, czy natężenie dźwięku przekracza wartość progową clap :- nxt_sound(Value,force), Value > 50. stop :- trigger_killall, nxt_stop, nxt_close.
pojawiały się następujące WARNINGi:
Problemy z niszczeniem triggerów wydają się być mniejsze, niż tydzień temu, jednak pojawiły się problemy z niszczeniem wątków. Przy dłuższym wykonywaniu programu ich ilość rośnie, a środowisko zdaje się nie radzić sobie z ich zabijaniem/usuwaniem/kończeniem. Skutkowało to zrywaniem komunikacji z robotem, co wymuszało restart środowiska SWIPL.