Laboratorium - PLNXT zaawansowane

Data: 29 kwietnia 2009
Godzina: 15.30
Grupa: Artur Kosztyła, Marcin Krzych
Robot: Henio

Wstęp

Celem laboratorium było testowanie możliwości PLNXT przy algorytmach o większej złożoności niż dotychczas.
Korzystaliśmy ze standardowego zestawu PLNXT.

Zadania

Sprzątacz

Zdecydowaliśmy się zaimplementować algorytm „Sprzątacz”, gdyż przy małych modyfikacjach można go później przekształcić w „Co przybyło?”. Nasza implementacja algorytmu znajduje się poniżej.

:- consult('./plnxt.pl').
 
start :-
	nxt_open,
	thread_create(lets_begin_the_party,_,[detached(true)]).
 
lets_begin_the_party :-
	trigger_create(_,detect_obstacle,trash_it),
	go_on_buddy.
 
go_on_buddy :-
	write('Buddy going'), nl,
	nxt_rotate(200, 360). 
 
detect_obstacle :-
	nxt_ultrasonic(X),
	write('distance '), write(X), nl,
	X < 20.
 
trash_it :-
	write('buddy trashing...'), nl,
	nxt_go_cm(300, 20),
	nxt_go_cm(-300, 20),
	write('buddy trashing finished...'), nl,
	trigger_create(_,detect_obstacle,trash_it).
 
stop :-
	trigger_killall,
	nxt_stop,
	nxt_close.

Niestety powyższy algorytm nie wykonywał się poprawnie. Robot wykonywał obrót po czym dopiero zaczynał wykonywać triggery. Efekt jego działania znajduje się na poniższym zrzucie ekranu:

Sprawdzaliśmy również inne kombinacje, jednak one również nie działały poprawnie. Oto przykład:

:- consult('./plnxt.pl').
 
start :-
	nxt_open,
	thread_create(go_on_buddy(0),_,[detached(true)]).	
 
go_on_buddy(Deg) :-
	write('Buddy going'), write(Deg), nl,
	nxt_rotate(200, 10),
	sleep(1),
	trigger_killall,
	trigger_create(_,detect_obstacle,trash_it),
	Deg < 360,
	NewDeg is Deg+10,
	go_on_buddy(NewDeg). 
 
detect_obstacle :-
	nxt_ultrasonic(X),
	write('distance '), write(X), nl,
	X < 20.
 
trash_it :-
	write('buddy trashing...'), nl,
	nxt_go_cm(300, 20),
	nxt_go_cm(-300, 20),
	write('buddy trashing finished...'), nl,
	trigger_create(_,detect_obstacle,trash_it).
 
stop :-
	trigger_killall,
	nxt_stop,
	nxt_close.

oraz zrzut konsoli:

Problemy

Problemem były, podobnie, jak w czasie poprzednich laboratoriów, wątki, które nie chciały się zakończyć. Działo się tak mimo, iż tworzyliśmy w programie tylko jeden wątek, oraz trigger, a przy kończeniu programu wywoływaliśmy predykat trigger_killall.
Widać to na powyższych zrzutach ekranów.

Podsumowanie

W trakcie laboratoriów niestety nie udało nam się w pełni zrealizować algorytmu Sprzątacza ze względu na napotykane przez nas problemy implementacyjne (nie wiemy, czy spowodowane naszą chwilową nieintegralnością z PLNXT, czy z wątkami :-) ).

pl/dydaktyka/piw/2009/sprawozdania/piw20090429-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