1) Kody programów wykonanych na zajęciach:

Algorytm 1

Panikarz - wymagane sensory: dźwięku, dotyku. Robot przemieszcza się powoli. Po klaśnięciu zmienia kierunek i szybko ucieka przez jakiś czas (wtedy nie jest podatny na klaśnięcie), po czym uspokaja się i znowu jedzie powoli. Zatrzymuje się i zamyka połączenie po wciśnięciu sensora dotyku.

Rozwiązanie

:- consult('../plnxt.pl').
 
start :-
	nxt_open,
	thread_create(go_on_buddy,_,[detached(true)]),
	trigger_create(_,sensor,stop).
 
go_on_buddy :-
	nxt_go(200),
        sleep(1), % Chwila przerwy, żeby jedno klaśnięcie nie zostało rozpoznane jako dwa.
	trigger_create(_,clap,run_away_buddy).
 
run_away_buddy :-
	nxt_rotate(350,180),
	nxt_play_tone(800, 2000),
	nxt_go(800),
        sleep(2),
	nxt_stop,
	go_on_buddy.
 
 
% Sprawdzenie, czy natężenie dźwięku przekracza progową wartość.
clap :-
	nxt_sound(Value,force),
	Value > 50.
 
sensor :-
	nxt_touch(Value, force),
	Value = 1,
	stop.
 
stop :-
	trigger_killall,
	nxt_stop,
	nxt_close.

Algorytm 2

Omijanie przeszkód - wymagane sensory: odległości, dźwięku. Robot przemieszcza się do przodu. Po napotkaniu przeszkody zatrzymuje się i próbuje ją ominąć. W fazie przemieszczania do przodu (tylko w tej fazie) robot zatrzymuje się i zamyka połączenie po klaśnięciu.

:- consult('../plnxt.pl').
 
start :-
	nxt_open,
	thread_create(go_on_buddy,_,[detached(true)]),
	trigger_create(_,sensor,stop).
 
go_on_buddy :-
	nxt_go(200),       
	trigger_create(_, distance, move_around).
 
move_around :-
	nxt_stop,
	D = 10,
	nxt_rotate(350,90),
	nxt_go_cm(350,D),
	nxt_rotate(350,-90),
	nxt_go_cm(350,D),
	nxt_rotate(350,-90),
	nxt_go_cm(350,D),
	nxt_rotate(350,90),
	go_on_buddy.
 
distance :-
	nxt_ultrasonic(D, force),
	D < 5.
 
 
% Sprawdzenie, czy natężenie dźwięku przekracza progową wartość.
clap :-
	nxt_sound(Value,force),
	Value > 50.
 
sensor :-
	nxt_touch(Value, force),
	Value = 1,
	stop.
 
stop :-
	trigger_killall,
	nxt_stop,
	nxt_close.

2) Spostrzeżenia, napotkane problemy, wnioski, uwagi na temat PLNXT:

  • w przykładzie 1. pomimo tego, że nie było możliwości zatrzymania robota, można było to zrobić przy użyciu kombinacji klawiszy Ctrl + C i a
  • po ponownym włączeniu robota po czynnościach opisanych w poprzednim punkcie, robot zaczął jeździć tylko w kółko
  • po kolejnym włączeniu robota jego zachowanie było jeszcze bardziej chaotyczne - być może było to spowodowane działającymi w tle starymi wątkami
  • w przykładzie 2. robot na początku w ogóle nie skręcał, dopiero po ponownym uruchomieniu xpce i załadowaniu pliku działał normalnie
  • w wykonanych przez nas przykładach zauważyliśmy, że w celu zmiany parametrów ruchu robota przy użyciu triggera potrzebne jest użycie predykatu nxt_stop, bez niego nic się nie zmienia
pl/dydaktyka/piw/2009/sprawozdania/piw20090422-15d.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