1) Pliki z kodami programów wykonanych na zajęciach:
Algorytm 1
Robot porusza się dowolnie wewnątrz obszaru na planszy testowej ograniczonego czarną linią. Nie może poza niego wyjechać! Gdy najedzie na czarną linię, powinien zawrócić. Niekoniecznie o 180 stopni. Np. Angle is 120 + random(120) zunifikuje Angle z liczbą z przedziału od 120 do 240. Można jej użyć jako kąt obrotu robota.
Rozwiązanie
:- consult('plnxt.pl').
start :-
nxt_open,
nxt_light_LED(activate),
trigger_create(_,check_color,odwroc),
nxt_go(300).
check_color :-
nxt_light(Value, force),
Value < 55,
write(Value).
odwroc :-
nxt_rotate(320, 120 + random(120), force),
start.
:- start.
Algorytm 2
Robot przemieszcza się po pomieszczeniu i zmienia kierunek poruszania się, gdy przed sobą napotka przeszkodę.
:- consult('plnxt.pl').
start :-
nxt_open,
trigger_create(_,check_distance,odwroc),
nxt_go(300).
check_distance :-
nxt_ultrasonic(Distance,force),
Distance < 5.
odwroc :-
nxt_rotate(320, 120 + random(120), force),
start.
:- start.
2) Spostrzeżenia, napotkane problemy, wnioski, uwagi na temat PLNXT:
sensor światła wyłącza się automatycznie po jakimś czasie, co powodowało błędne działanie robota (trigger nie był nigdy wyzwalany)
w PLNXT nie ma możliwości ustawienia częstotliwości próbkowania odczyt z sensora światła
po pewnym (dłuższym) czasie robot nie reagował na komendę nxt_stop, jedną z możliwości odzyskania kontroli nad robotem było jego wyłączenie i próba ponownego połączenia
czasami komendy wydawane z powłoki SWIPL nie powodują żadnej reakcji u robota, albo robot reaguje dopiero po dłuższym czasie
w przykładzie:
:- consult('sciezka_do_plnxt.pl').
start :-
nxt_open,
trigger_create(_,check_distance,[nxt_stop,nxt_close]),
nxt_go(300).
check_distance :-
nxt_ultrasonic(Distance,force),
Distance < 15.
SWIPL wyświetla komunikat, że nie może odnaleźć predykatu nxt_close, nie wiemy dlaczego tak się dzieje, ponieważ samo wywołanie tego predykatu działa poprawnie