Sprawozdanie z laboratorium (proste algorytmy w PLNXT)
Robot: Ewka
Data wykonania: 19.05.2010 godz. 17:00
Autorzy: Gabriela Pasek, Michał Paszko, Leszek Piątek
Kod programów
Algorytm1
:- consult('plnxt.pl').
start :-
nxt_open,
nxt_goal(ewka, alg1).
alg1 :-
nxt_go(200),
trigger_create(_,check_line,[nxt_stop,Angle is 120 + random(120),nxt_rotate(100,Angle)]),
alg1.
check_line :-
nxt_light(Value, force),write(Value),nl,
Value < 30.
stop :-
trigger_killall,
nxt_stop,
nxt_close.
Algorytm2
:- consult('plnxt.pl').
start :-
nxt_open,
nxt_goal(ewka, alg2).
alg2 :-
nxt_go(100),
trigger_create(_,check_line,[wroc_na_linie]),
alg2.
check_line :-
nxt_light(Value, force),write(Value),nl,
Value > 30.
wroc_na_linie :-
nxt_stop,
nxt_rotate(100, 10),
trigger_create(_,not(check_line),[alg2]).
stop :-
trigger_killall,
nxt_stop,
nxt_close.
Spakowane pliki: pasek_paszko_piatek_lego_lab3.rar
Spostrzeżenia, napotkane problemy, wnioski
Spotrzeżenia
Napotkane problemy
Pierwszym zauważonym przez nas problemem był brak charakterystycznego dźwięku przy włączaniu brick'a robota Ewka.
Drugim mogącym budzić podejrzenia objawem było dziwnie zachowanie ikonki baterii brick'a, to znaczy kiedy robot był w stanie idle stan baterii wynosił 100%, natomiast kiedy robot wykonywał algorytmy poziom baterii malał do poziomu 40% - 50%, a następnie ustalił się na poziomie 100% po ponownym przejściu do stanu idle.
Problemowym predykatem okazał się dla naszego zespołu predykat nxt_goal, który miał tworzyć nowy wątek i kierować robotem, jednak nie zawsze predykat ten spełniał swoje przeznaczenie - nie wiem co było tego przyczyną.
Niestety po raz kolejny zawiodło połączenie Blutetooth pomiędzy komputerem, a naszym robotem. Na szczęście tym razem udało nam się zaprogramować i wykonać Algorytm1 oraz Algorytm2 z laboratorium. Kiedy przystąpiliśmy do implementacji i częściowego testowania poszczególnych predykatów, połączenie z Ewką przestało istnieć. Wykorzystywaliśmy doświadczenie zdobyte na poprzednim laboratorium, ale nie udało nam się ponownie połączyć z robotem - nie pomagał restart komputera, restart robota, ponowne sparowanie urządzeń oraz usuwanie skojarzonych wcześniej urządzeń.
Wnioski
Uwagi dotyczące funkcjonalności PLNXT
PLNXT często dziwnie zachowuje się, gdy chcemy zakończyć działanie programu. Nie pomaga wywołanie predykatów stop. oraz halt. - ostatecznym rozwiązaniem jest 'zabicie' procesu.
Przy wykonywaniu predykatu nxt_open. PLNXT często zawieszał się.