Sprawozdanie z laboratorium - proste algorytmy w PLNXT
Celem laboratorium było testowanie możliwości interfeju programistycznego PLNXT z użyciem algorytmów o małej złożoności.
IMPLEMENTACJA
Na laboratoriach zaimplementowaliśmy dwa z trzech proponowanych algorytmów.
Algorytm 1 - Omijanie przeszkód
Opis rozwiązania
Robot przemieszcza się do przodu. Po napotkaniu przeszkody zatrzymuje się, cofa do tyłu oraz obraca o 90 stopni zgodnie z ruchem wskazówek zegara, następnie jedzie do przodu losową odległość, obraca o -90 stopni, jedzie do przodu próbując ponownie ominąć przeszkodę. W fazie jazdy do przodu robot zatrzymuje się i zamyka połączenie po klaśnięciu.
Implementacja:
:- consult('plnxt.pl').
start :-
nxt_open,
thread_create(go_on_buddy,_,[detached(true)]).
go_on_buddy :-
nxt_go(200),
trigger_create(Idclap,clap,stop),
sleep(1), % Chwila przerwy, żeby jedno klaśnięcie nie zostało
rozpoznane jako dwa.
trigger_create(_,check_distance,[nxt_stop, omin]).
% Sprawdzenie, czy natężenie dźwięku przekracza progową wartość.
clap :-
nxt_sound(Value,force),
Value > 70.
check_distance :-
nxt_ultrasonic(Distance,force),
Distance < 15.
omin :-
trigger_kill(Idclap),
nxt_go_cm(-200,6),
nxt_rotate(400, 90),
nxt_go_cm(300,7 + random(15)),
nxt_rotate(400, -90),
go_on_buddy.
stop :-
trigger_killall,
nxt_stop,
nxt_close.
Link do filmu prezentującego robota w akcji:
http://student.agh.edu.pl/~kacper/omijacz.mp4
Algorytm 2 - Panikarz
Opis rozwiązania
Robot przemieszcza się powoli. Po kliknięciu zmienia kierunek o losowy kąt, szybko ucieka przez losowy czas, po czym uspokaja się i jedzie powoli. Zatrzymuje się i zamyka połączenie po wciśnięciu sensora dotyku.
Implementacja:
:- consult('plnxt.pl').
start :-
nxt_open,
thread_create(go_on_buddy,_,[detached(true)]).
go_on_buddy :-
nxt_go(200),
sleep(1), % Chwila przerwy, żeby jedno klaśnięcie nie zostało rozpoznane jako dwa.
trigger_create(_,clap,wait_a_second_buddy),
trigger_create(_,klik,stop).
wait_a_second_buddy :-
nxt_stop,
nxt_rotate(550,120 + random(120)),
nxt_go_cm(800,2 + random(25),force),
go_on_buddy.
% Sprawdzenie, czy natężenie dźwięku przekracza progową wartość.
clap :-
nxt_sound(Value,force),
Value > 65.
stop :-
trigger_killall,
nxt_stop,
nxt_close.
klik :-
nxt_touch(Value,force),
Value > 0.
Link do filmu prezentującego robota w akcji:
http://student.agh.edu.pl/~kacper/panikarz.mp4
Ogólne uwagi do laboratorium
Podczas prac nad algorytmem nr 2 (panikarz) mieliśmy dużo problemy z doborem odpowiedniego progu głośności dla czujnika natężenia dźwięku robota. Jest to spowodowana dużym i bardzo zmiennym poziomem natężenia dźwięku w sali.