Kontynuowaliśmy naszą pracę z poprzedniego laboratorium. Został nam do zaimplementowania ostatni algorytm. Sensory odległości i dźwięku były zamontowane, zatem rozpoczęliśmy prace. Na początku sprawdziliśmy połączenie z robotem i wykonaliśmy ruch do przodu - wszystko sprawne. Poniżej przedstawiamy efekt naszej pracy:
% :- consult('plnxt.pl').
:- dynamic(odleglosc/2).
start :-
write('-- start 0.0 --'),
abolish(odleglosc/2),
nxt_goal(ewka, zapamietuj(0)).
clap :-
nxt_sound(Value,force),
Value > 30,
write('clap!\n').
zapamietuj(360) :-
trigger_create(_, clap, sprawdzaj_start),!.
zapamietuj(Kat) :-
stop,
nxt_rotate(30, 10),
nxt_ultrasonic(V),
write('zapamietuj: Kat '),write(Kat),write(' '),write(V),write('\n'),
assert(odleglosc(Kat,V)),
Kat2 is Kat + 10,
zapamietuj(Kat2).
sprawdzaj_start :-
stop,
sprawdzaj(0, 0, 0).
sprawdzaj(360, _, _) :- !.
sprawdzaj(_, Zapamietana, Odczytana) :-
Zapamietana - 5 > Odczytana,!,
write('NOWOSC!\n'),
stop,
nxt_go_cm(200,Odczytana-1).
sprawdzaj(Kat, _, _) :-
stop,
nxt_rotate(30, 10),
nxt_ultrasonic(V),
odleglosc(Kat,Zapamietana),
write('sprawdzaj: Kat '),write(Kat),write(' zapamietana '),write(Zapamietana),write(' odczytana '),write(V),write('\n'),
Kat2 is Kat + 10,
sprawdzaj(Kat2, Zapamietana, V),!.
stop :-
trigger_killall,
nxt_stop.
Tutaj przedstawiamy krótkie działanie, mianowicie robot obraca się tylko kawałek, a następnie po klaśnięciu sprawdza czy położenie jest takie samo. Oczywiście przy pierwszym odczycie obiektu powinien go wykryć i tak też się dzieje http://www.youtube.com/watch?v=HeH6luFyy6A
A tutaj jest pełny obrót Ewki, niestety 36 obrotów po 10 stopni nie dało pełnego obrotu - błąd dokładności sterowania silnikami http://www.youtube.com/watch?v=zSj07QgmdMA