Alogrytm: Śledzenie lini

Robot umieszczony na planszy testowej dojeżdża do grubej czarnej linii. Od tego momentu jedzie wzdłuż tej linii. Jeżeli wykryje brak linii, zatrzymuje się i obraca się w losowym kierunku. Tak długo się obraca, aż znajdzie czarną linię. Przerywa wtedy szukanie linii i zaczyna wzdłuż niej jechać.

Problem występuje głównie w przypadku szukania linii. Skoro jest to losowe szukanie, może obracać się w złą stronę i w konsekwencji oddalać się od niej. Wtedy, co raz nam się zdarzyło, obrócił się o 180% i zaczął jechać wzdłuż czarnej linii w przeciwnym kierunku.

Robot zatrzymuje się po wykryciu sygnału na czujniku dotyku.

:- consult('plnxt.pl').
 
start :-
    nxt_open,
    thread_create(first_run,_,[detached(true)]).
 
first_run :-
    % dodac TID
    nxt_light_LED(activate),
    trigger_create(_,white_check,search_for_line),
%    trigger_create(_,black_check,line_found),
    trigger_create(_,press,stop),
    go_on_buddy.
 
go_on_buddy :-
    nxt_play_tone(1500,500),
    nxt_go(150),
    sleep(1).
 
press :-
    nxt_touch(Value,force),
    Value > 0.
 
white_check :-
    nxt_light(Value,force),
    Value > 45.
 
black_check :-
    nxt_light(Value,force),
    Value < 45.
 
search_for_line :-
    nxt_stop,
    nxt_play_tone(1000,1000),
    trigger_create(_,black_check,line_found),
     nxt_rotate(150,-15),
    nxt_rotate(150,30).
 
line_found :-
    % trigger_kill(TID),
    nxt_stop,
    nxt_play_tone(1500,1000),
    % dodac TID
    trigger_create(_,white_check,search_for_line),
    go_on_buddy.
 
stop :-
    trigger_killall,
    nxt_stop,
    nxt_close.
 
 
start.

Alogrytm: Sprzątacz

Robot ustawiony jest na środku obszaru, który ma posprzątać. Powoli obraca się w jednym kierunku i jednocześnie sprawdza czujnikiem odległości, czy nie ma przeszkód przed nim. Jeżeli taką wykryje zaczyna jechać w jej kierunku 40cm wypychając ją poza ustalony obszar i wraca.

Robot zatrzymuje się po wykryciu sygnału na czujniku dotyku.

:- consult('plnxt.pl').
 
start:-
    nxt_open,
    go_on_buddy,
    trigger_create(_,pushed,[nxt_stop,nxt_close]).
 
go_on_buddy :-
    nxt_turn(200,720),
    % wpisujac 360 stopni robot obraca sie o 180   
        sleep(0.1), % Chwila przerwy, żeby jedno klaśnięcie nie zostało rozpoznane jako dwa.
    trigger_create(Checkdistance,check_distance,[nxt_stop, nxt_go_cm(600,8), nxt_go_cm(-600,8)]).
 
clean_buddy :-
    trigger_killall,
    nxt_stop,
    nxt_go_cm(600,8),
    sleep(0.1),
    nxt_play_tone(1500,1000),
    nxt_go_cm(-600,8),
    go_on_buddy.
 
% Sprawdzenie, czy sensor dotyku jest wciśnięty.
pushed :-
    nxt_touch(Value,force),
    Value=1.
 
check_distance :-
    nxt_ultrasonic(Distance,force),
    Distance < 40.

Używaliśmy dyrektywy nxt_play_tone aby rozpoznać który fragment kodu jest wykonywany.

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