Laboratorium - Proste algorytmy w PLNXT

22.04.2009, godz. 14.00
grupa: Cheibinger,Czapko,Wnuk
robot: Agatka
version: 1.0

Spostrzeżenia, napotkane problemy, wnioski

1. Nadal każda zmiana w kodzie musiała być poprzedzana sekwencją:

stop.
halt.

i tak dla pewności:

killall pl

Bez tego robot nie reagował na zmiany w konfiguracji.

Implementacja algorytmu

Przykład 1

Przykład kodu z wykorzystaniem pojedynczego wątku. Na uwagę zasługuje fakt, że w zależności od zadanego kąta obrotu manewr ten wymaga więcej lub mniej przestrzeni - patrz 45, 90 oraz 180 stopni, niby oczywiste a jednak byliśmy zaskoczeni.

:- consult('../plnxt/plnxt.pl').
 
start :-
	nxt_open,
	rectangle_loop.
 
rectangle_loop :-
	nxt_go_cm(350,40),
	nxt_rotate(350,90),
	rectangle_loop.

Przykład 2

Zgodnie z instrukcją

stop.

(prawie) natychmiast zatrzymuje robota.

:- consult('../plnxt/plnxt.pl').
 
start :-
	nxt_open,
	thread_create(rectangle_loop,_,[detached(true)]).
 
rectangle_loop :-
	nxt_go_cm(350,20),
	nxt_rotate(350,90),
	rectangle_loop.
 
stop :-
	trigger_killall,
	nxt_stop,
	nxt_close.

Przykład 3

Zgodnie z instrukcją:

Robot jedzie do przodu. Zatrzymuje się po klaśnięciu. Wznawia ruch po ponownym klaśnięciu.

co widać na załączonym filmie: Klaśnięcie

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

Algorytm 1 - Piłka

Niestety nasz robot nie posiadał wbudowanych szczypiec. Zadanie zostało pominiętę.

Algorytm 2 - Omijanie przeszkód

W naszym przypadku robot reagował na czarną linię i natychmiast dokonywał pełnego obrotu Przeszkoda Trochę odbiega to od specyfikacji zadania… ale ktoś popełnił błąd w trakcie translacji wymagań projektowych.

:- consult('../plnxt/plnxt.pl').
 
start :-
	nxt_open,
	thread_create(go_on_buddy,_,[detached(true)]).
 
go_on_buddy :-
	nxt_go(400),
        sleep(1), % Chwila przerwy, żeby jedno klaśnięcie nie zostało rozpoznane jako dwa.
	trigger_create(_,clap,wait_a_second),
	trigger_create(_,light,move).
 
wait_a_second :-	
	nxt_stop,	
        sleep(1),
	trigger_create(_,clap,wait_a_second).
 
move :-
	nxt_stop,
	nxt_rotate(400,180),
        sleep(1),
	nxt_go(400),
	trigger_create(_,light,move).
 
% Sprawdzenie, czy natężenie dźwięku przekracza progową wartość.
clap :-
	nxt_sound(Value,force),
	Value > 80.
 
light :- 
	nxt_light(Value,force),
	write(Value),
	write('\n'),
	Value < 45.
 
stop :-
	trigger_killall,
	nxt_stop,
	nxt_close.

Algorytm 3 - Panikarz

Tutaj już pełna zgodność ze specyfikacją ;) Panikarz

:- consult('../plnxt/plnxt.pl').
 
start :-
	nxt_open,
	thread_create(go_on_buddy,_,[detached(true)]).
 
go_on_buddy :-
	nxt_go(150),
        sleep(1), % Chwila przerwy, żeby jedno klaśnięcie nie zostało rozpoznane jako dwa.
	trigger_create(_,clap,move).
 
move :-
	nxt_stop,		
	nxt_rotate(600,180),        
	nxt_go_cm(600,30),
	sleep(1),
	nxt_go(150),
	trigger_create(_,clap,move).
 
% Sprawdzenie, czy natężenie dźwięku przekracza progową wartość.
clap :-
	nxt_sound(Value,force),
	Value > 70.
 
stop :-
	trigger_killall,
	nxt_stop,
	nxt_close.

Załączniki

Kody źródłowe: Archiwum

pl/dydaktyka/piw/2009/sprawozdania/piw20090422-14b.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