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.

pl/dydaktyka/piw/2009/sprawozdania/piw20090422-17a.txt · ostatnio zmienione: 2019/06/27 15:50 (edycja zewnętrzna)
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0