Kody źródłowe programów
Alogrytm: Śledzenie lini
Robot umieszczony na planszy testowej dojeżdża do grubej czarnej linii i od tego momentu stara się poruszać wzdłuż tej linii. Po wciśnięciu sensora dotyku kończy pracę.
:- consult('plnxt.pl').
start:-
nxt_open,
nxt_light_LED(activate),
go_on_buddy,
trigger_create(_,pushed,[nxt_stop,nxt_close]).
go_on_buddy :-
nxt_stop,
write('goonbuddy'),
nxt_go(160),
trigger_create(_,lost_line,change_direction).
pushed :-
nxt_touch(Value,force),
Value=1.
find_line :-
nxt_light(Value,force),
Value < 45.
lost_line :-
nxt_light(Value,force),
Value > 45.
change_direction :-
nxt_stop,
trigger_create(_,find_line,go_on_buddy),
write('obrot'),
nxt_rotate(200,-100),
write('koniec obrotu').
Robot początkowo jest ustawiony na czarnej lini i jedzie prosto do przodu.
Gdy zjedzie z lini powoli obraca się w lewo, aż do jej znalezienia. Wtedy kontynuuje jazdę na wprost.
Robot zatrzymuje sie po wykryciu sygnału na czujniku dotyku.
Reportaż wideo
Alogrytm: Sprzątacz
Robot ma za zadanie oczyścić teren w promieniu np. 40 cm od swojej początkowej pozycji. Jeżeli w tym obszarze znajdują się jakieś przeszkody, próbuje je wypchnąć poza niego. Po oczysczeniu całego terenu, wraca do pozycji wyjściowej i kończy pracę.
:- consult('plnxt.pl').
start:-
nxt_open,
nxt_light_LED(activate),
go_on_buddy,
trigger_create(_,pushed,[nxt_stop,nxt_close]).
go_on_buddy :-
nxt_rotate(130, 360),
write('goonbuddy'),
trigger_create(_,lost_line,go_cleaning).
pushed :-
nxt_touch(Value,force),
Value=1.
lost_line :-
write('znalaz!'),nl,
nxt_ultrasonic(Value, force),
Value < 40.
go_cleaning :-
trigger_killall,
trigger_create(_,pushed,[nxt_stop,nxt_close]),
write('gocleaning'),nl,
nxt_stop,
write('doprzodu'),nl,
nxt_go_cm(300, 40),
write('dotylu'),nl,
%WNIOSKI: nie dziala jazda do tylu
nxt_rotate(300,180),
nxt_go_cm(300, 40),
go_on_buddy.
Robot ustawiony jest na środku obszaru, który ma wysprzątać.
Powoli obraca się.
Gdy wykryje obiekt w odległości około 40cm jedzie 40cm na wprost wypychając przedmiot z zadanego obszaru, poczym obraca się i wraca.
Robot zatrzymuje sie po wykryciu sygnału na czujniku dotyku.
Program nie działał poprawnie. Po uruchomieniu robot zapętlał się w funkcji Lost_line
.
Niestety ze względu na brak czasu nie zdążyliśmy dokładnie przetestować programu i znaleźć przyczyny błędu.
Spostrzeżenia, napotkane problemy, wnioski
Przy realizacji alogrytmu Sprzątacz odkrylismy, że nie działa jazda do tyłu.
Wywołanie funkcji nxt_go_cm
z ujemną prędokością zawiesza robota i przestaje on reagować na kolejne komendy.
W programie ominęliśmy ten problem realizując wracanie przez obrócenie się o 180stopni i jazdę do przodu.
Pliki źródłowe