Sprawozdanie 2
Skład zespołu
Łukasz Masłowski
Krzysztof Rączka
Radosław Chmielarz
1. Wstęp
Celem laboratorium było testowanie możliwości interfejsu programistycznego PLNXT z użyciem algorytmów o małej złożoności.
Laboratorium polegało na zapoznaniu się z dwoma przykładowymi programami, a następnie zaimplementowaniu własnych programów sprawdzających funkcjonalność biblioteki PLNXT
2. Przykładowe programy
W czasie laboratorium posłużyliśmy się robotem, udostępnionym w ramach stanowiska przy którym pracowaliśmy.
Przy pierwszych dwóch przykładowych programach nie napotkaliśmy na żadne problemy, dopiero przy ostatnim przykładzie pojawiły się problemy z biblioteką PLNXT.
Przy uruchomieniu poniższego kodu ( start. )
:- consult('../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 > 15.
stop :-
trigger_killall,
nxt_stop,
nxt_close.
w momencie gdy chcieliśmy zatrzymać robota otrzymaliśmy komunikaty:
?- stop.
Warning: [Thread 3] Thread running "trigger_start(nxt_is_stopped, thread_send_message(2, resume), 1)" died due to failure
Yes
?- Warning: [Thread 3] Thread running "trigger_start(nxt_is_stopped, thread_send_message(2, resume), 1)" died due to failure
Po tym błędzie nie udało się nam ponownie uruchomić przykładu. Dopiero uruchomienie na nowo powłoki pl pozwoliło dalej kontynuować prace w ramach laboratorium.
3. Nasze implementacje
W ramach tego laboratorium mieliśmy zaimplementować jeden lub więcej z podanych programów.
Wybraliśmy 2 przykładowe, dzięki którym testowaliśmy bibliotekę PLNXT.
3.1 Panikarz
Opis programu
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.
Nasz kod
start :-
nxt_open,
thread_create(go_on_buddy,_,[detached(true)]).
go_on_buddy :-
nxt_go(300),
trigger_create(_,clap,run_forest_run),
trigger_create(_, touch, stop)..
run_forest_run :-
nxt_stop,
Angle is 40 + random(120),
nxt_rotate(400,Angle),
nxt_go_cm(700,60),
go_on_buddy.
% sprawdzenie, czy sensor dotyku został naciśnięty
touch :-
nxt_touch(Touch, force),
Touch = 1.
% Sprawdzenie, czy natężenie dźwięku przekracza progową wartość.
clap :-
nxt_sound(Value,force),
Value > 40.
stop :-
trigger_killall,
nxt_stop,
nxt_close.
3.2 Omijanie przeszkód
Opis
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.
Nasz kod
:- consult('plnxt.pl').
start :-
nxt_open,
thread_create(go_on_buddy,_,[detached(true)]).
% podstawowy ruch robota
go_on_buddy :-
nxt_go(400),
trigger_create(_,clap,stop),
trigger_create(_,obstacle,ommit).
% ominięcie przeszkody
ommit :-
nxt_stop,
Angle is 40 + random(120),
nxt_rotate(400,Angle),
go_on_buddy.
% Sprawdzenie, czy natężenie dźwięku przekracza progową wartość.
clap :-
nxt_sound(Value,force),
Value > 60.
% sprawdzenie czy z przodu znajduje się przeszkoda
obstacle :-
nxt_ultrasonic(Distance, force),
Distance < 15.
stop :-
trigger_killall,
nxt_stop,
nxt_close.
4 Podsumowanie
Podczas laboratorium kilkukrotnie zawiesiła się nam powłoka pl, przez co zmuszeni byliśmy do jej ponownego uruchomienia. Pojawiły się również problem z komunikacją z robotem, a konkretnie to jej nie było ( nie pojawiały się żadne komunikaty o błędach ). Postępując jednak w myśl podstawowej zasady informatyka: „Jeśli coś nie działa to wyłącz i włącz. ” Udało się nam uruchomić i przetestować opisane wyżej programy.
5 O co rozszerzyć laboratorium ?
Wszystkie programy, które mieliśmy sami zaimplementować są niemal identyczne, różnią się tylko tym w jaki sposób robot odbiera sygnały z zewnątrz. Proponujemy, aby były one nieco bardziej rozbudowane i aby nieco się między sobą różniły, dzięki temu praca na laboratorium będzie znacznie ciekawsza
6 Pliki