Na dzisiejszych zajęciach projektowaliśmy algorytmy przy wykorzystaniu interfejsu programistycznego PLNXT. Interfejs ten jest to API w języku Prolog dla LEGO Mindstorms NXT, przez co przy projektowaniu mogliśmy wykorzystać wiedzę z programowania w języku Prolog zdobytą na poprzednich zajęciach. Do instrukcji laboratorium dołączona była dokumentacja która w bardzo dobry sposób opisywała potrzebne w algorytmach funkcje, więc nie mieliśmy problemu z wydawanie poleceń Irosławowi. Zanim mogliśmy przystąpić do tworzenia algorytmów musieliśmy najpierw połączyć się Irosława z komputerem za pomocą Bluetooth.
Algorytm I
Pierwszy algorytm jaki zleciliśmy do wykonania Irosławowi miał na celu jazdę do przodu z prędkością obrotu kół 300 stopni/sekundę do momentu napotkania przeszkody w odległości 15 cm.
:- consult('/home/student/plnxt/plnxt.pl').
start :-
nxt_open,
trigger_create(_,check_distance,[nxt_stop,nxt_close]),
nxt_go(300).
check_distance :-
nxt_ultrasonic(Distance,force),
Distance < 15.
Plik algorytmu: alg1_l4.pl
Algorytm II
W drugim algorytmie Irosław miał jechać do przodu i reagować na klaśnięcie bądź czujnik dotyku. Klaśnięcie powodowało że robot musiał się zatrzymać, po czym ruszał po ponownym klaśnięciu. Dodatkowo cały algorytm kończył się po naciśnięciu czujnika ruchu, tzn. robot zatrzymywał się i zamykał połączenie.
:-consult('/home/student/plnxt/plnxt.pl').
start:-
nxt_open,
go_on_buddy,
trigger_create(_,pushed,[nxt_stop,nxt_close]).
go_on_buddy :-
nxt_go(200),
sleep(1),
trigger_create(_,clap,wait_a_second_buddy).
wait_a_second_buddy :-
nxt_stop,
sleep(1),
trigger_create(_,clap,go_on_buddy).
% Sprawdzenie klaśnięcia.
clap :-
nxt_sound(Value,force),
Value > 15.
% Sprawdzenie czujnika dotyku.
pushed :-
nxt_touch(Value,force),
Value=1.
Plik algorytmu: alg2_l4.pl
Algorytm III
Trzeci algorytm polegał na jeździe z omijaniem przeszkód. Jarosław miał poruszać się z prędkością 300 stopni/sekundę, po czym napotykając na przeszkodę powinien wycofać się ominąć ją po czym obrócić się do początkowego kierunku i rozpocząć ponownie jazdę.
:-consult('/home/student/plnxt/plnxt.pl').
start :-
nxt_open,
trigger_create(_,check_distance,wycofaj),
nxt_go(300).
check_distance :-
nxt_ultrasonic(Distance,force),
Distance < 15.
wycofaj:-
nxt_stop,
nxt_rotate(400,90),
nxt_go_cm(900,30),
nxt_rotate(400,-90),
nxt_go(300).
Plik algorytmu: alg3_l4.pl
Algorytm IV
Ostatni algorytm był bardzo prosty. Chcieliśmy sprawdzić prędkość i wytrzymałość Irosława. Kazaliśmy mu wykonać kilka szybkich obrotów i dojechać do krawędzi urwiska.
:-consult('/home/student/plnxt/plnxt.pl').
start :-
nxt_open,
nxt_rotate(900,1890),
nxt_go_cm(900,30), % Jazda 200 cm do tyłu z prędkością 400 stopni/sekundę.
nxt_close.
Plik algorytmu: alg4_l4.pl
Irosław wykonał zadanie bezproblemowo
Poniżej zamieszczamy jego poczynania.
Irosław Szalony