Laboratorium (zaawansowane algorytmy w PLNXT)

Tym razem, robotem, z którym nam przyszło współpracować, był Henio. W odróżnieniu od Franka, na którym ostatnio przeprowadzaliśmy nasze ćwiczenia, Henio nie stawiał oporu przy próbach połączenia się z komputerem przez Bluetooth, dzięki czemu mogliśmy niezwłocznie przystąpić do opracowywania algorytmów.

Algorytm 1 - Więzień

Z użyciem planszy testowej.
Wymagane sensory: światło.
Robot zaczyna działanie wewnątrz obszaru zaznaczonego grubą czarną linią na planszy testowej. Chce się z tego obszaru wydostać, ale nie może zrobić tego (nie wolno mu przekroczyć czarnej linii), dopóki nie znajdzie „klucza” - czerwonego obszaru symbolizującego piłkę. Po najechaniu na „klucz” sygnalizuje to dźwiękiem i ucieka z obszaru wewnątrz czarnej linii. Po wydostaniu się sygnalizuje ten fakt dźwiękiem i kończy pracę.

:- consult('plnxt.pl').
 
start :-
    nxt_open,
    nxt_light_LED(activate),
    thread_create(go_on_buddy,_,[detached(true)]).
 
go_on_buddy :-
    nxt_go(300),        % jazda do przodu
    trigger_create(_,border,check_border_buddy),
    trigger_create(_,key,check_key).
 
check_border_buddy :-
    nxt_stop,   
        nxt_go_cm(-300,10,force),
        nxt_rotate(360,90),
    go_on_buddy.
 
check_key :-
    nxt_stop,
    trigger_killall,   
    nxt_play_tone(1000,500),    % dzwiek - znalazl klucz
    nxt_go(300),                % jazda do przodu
    trigger_create(_,border,finish).
 
% Sprawdzenie, czy swiatlo jest ok
border :-
    nxt_light(Value,force),
    Value < 50.
 
% Sprawdzenie, czy klucz
key :-
    nxt_light(Value,force),
    Value > 60,
    Value < 62.
 
finish :-
    nxt_go_cm(300,20,force),    % wyjazd poza linie
    nxt_play_tone(1000,500),        % dzwiek poza bariera
    stop.
 
stop :-
    trigger_killall,
    nxt_light_LED(passivate),
    nxt_stop,
    nxt_close.

alg1_wiezien.pl

Algorytm 2 - Sprzątacz

Wymagane sensory: odległość.
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 oczyszczeniu całego terenu, wraca do pozycji wyjściowej i kończy pracę.

:- consult('plnxt.pl').
 
start :-
    nxt_open,
    nxt_light_LED(activate),
    thread_create(go_on_buddy,_,[detached(true)]).
 
go_on_buddy :-
    nxt_rotate(200,720),
    trigger_create(_,place,check_place).
 
check_place :-
    nxt_stop,
        nxt_go_cm(300,15),
        nxt_go_cm(-300,15),
    go_on_buddy.
 
% Sprawdzenie, czy jest element
place :-
    nxt_ultrasonic(Value,force),
    Value < 19.
 
stop :-
    trigger_killall,
    nxt_light_LED(passivate),
    nxt_stop,
    nxt_close.

alg2_sprzatacz.pl

Spostrzeżenia, napotkane problemy, wnioski

Podstawowym problemem w pierwszym algorytmie było takie dobranie parametrów granicznych dla sensora światła, aby białe pole, czarna granica i czerwony klucz zostały odpowiednio rozpoznane. Przeprowadzone próby pokazały, że lepsze wyniki daje odczyt z włączoną lapmką LED, jednak nawet to nie jest w stanie zapewnić stuprocentowej pewności rozpoznania. O ile granica między czarnym i białym była wyraźna, o tyle kolor czerwony sprawił nam niewielkie problemy. Często kwestia rozpoznania zależała od tego, czy badane pole było w cieniu robota. Niemniej udało nam się uzyskać pożądany efekt.

Algorytm sprzątacza nie sprawił takich trudności. Na jego potrzeby zmodyfikowaliśmy nieco naszego robota, dodając z przodu poprzeczną belkę, która wypychała napotkane przeszkody.

pl/dydaktyka/piw/2009/sprawozdania/piw20090429-12c.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