Laboratorium - PLNXT zapoznanie

Data: 22 kwietnia 2009
Godzina: 15.30
Grupa: Artur Kosztyła, Marcin Krzych
Robot: Gienek

Wstęp

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.

Zadania

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ł.

500^
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.

Przygotowanie do zajęć

Przy stanowisku zastaliśmy robota skonstruowanego zgodnie z instrukcją znajdującą się w QuickStart, wraz z dołączonymi sensorami wyglądającego tak:

Gienek

Panikarz - Kod

:- 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.

Opis

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.

Film pokazujący działanie robota

Napotkane problemy

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:

500

Podsumowanie

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.

pl/dydaktyka/piw/2009/sprawozdania/piw20090422-15a.txt · ostatnio zmienione: 2019/06/27 15:50 (edycja zewnętrzna)
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0