Sprawozdanie 3

Robot: Dyzio
Data wykonania: 19.05.2010 godz. 9:30
Autorzy: Martyka Łukasz, Stereńczak Agata, Szczurek Joanna

Budowa robota

Po przyjściu na zajęcia otrzymaliśmy już zmontowanego robota. Dokonaliśmy pewnych zmian z umocowaniem czujników.

Zadanie 2

Pracę na laboratorium rozpoczęliśmy od poprawienia zadania 2, które nie udało nam się zrealizować tydzień wcześniej. Poprawiony kod programu znajduje się poniżej.

:- consult('plnxt.pl').
 
stop :-
        nxt_stop.

start :-
        nxt_open,
        nxt_light_LED(activate, force),
        trigger_create(_,check_light,change_angle),
        trigger_create(_,check_border,stop),
        nxt_go(100).

small_step :-
        trigger_create(_,check_light,change_angle),
        nxt_go(80), small_step.

change_angle :-
        Angle is 5, 
        nxt_rotate(300, Angle, force), small_step.

check_border :-
        nxt_ultrasonic(Distance, force),
        Distance < 15.  

check_light :-
        nxt_light(Light,force),
        Light < 42.

:- start.
 

Poprawiliśmy zdolność jeżdżenia po linii poprzez poprawienie procedury check_light. Stworzyliśmy także procedurę check_border która sprawdzała odległość robota od przeszkody i wymuszała zatrzymanie.

Przykład algorytmu

Kolejną rzeczą jaką zrobiliśmy, było przeanalizowanie oraz modyfikacja i uruchomienie algorytmu podanego w przykładach, w którym robot reagował na klaśnięcie. Pozwoliło nam to na zapoznanie się z nowymi funkcjami przydatnymi do dalszej pracy. Dobraliśmy taki próg dźwięku (50) aby robot reagował na klaśnięcie a nie na szum w sali.

Sposób działania robota przedstawiony jest na filmiku: Filmik

Panikarz

Ponieważ ten algorytm bardzo nam się spodobał, a wiedzieliśmy iż nie wystarczy nam czasu na zrobienie wszystkich algorytmów, postanowiliśmy go zaimplementować ;)

Robot jeździł powoli, po klaśnięciu zmieniał kierunek i przez 1 sekundę jechał z maksymalną prędkością. Poniżej znajduje się kod programu.

:- consult('plnxt.pl').
 
start :-
        nxt_open,
        nxt_goal(dyzio, go_on_buddy).
 
go_on_buddy :-
        nxt_go(90),
        sleep(1), % Chwila przerwy, żeby jedno klaśnięcie nie zostało rozpoznane jako dwa.
        trigger_create(_,clap,run_forest_run),
        trigger_create(_,touch,stop).
 
run_forest_run :-
        Angle is 60,
        nxt_rotate(300, Angle, force),
        nxt_go_sec(900, 1),
        go_on_buddy.
 
wait_a_second_buddy :-
        nxt_stop,
        sleep(1),
        trigger_create(_,clap,go_on_buddy).
 
% Sprawdzenie, czy natężenie dźwięku przekracza progową wartość.
clap :-
        nxt_sound(Value,force),
        Value > 50.
 
touch :-
        nxt_touch(Istouch, force),
        Istouch is 1.

stop :-
        trigger_killall,
        nxt_stop,
        nxt_close.
 

Owoc naszej pracy prezentuje filmik: Panikarz - Dyzio rozbójnik

Wnioski

Niestety znowu zabrakło nam czasu. Praca z robotem spowodowała nam pewne problemy, gdyż po około 40 minutach zajęć robot odmówił posłuszeństwa - zaczął żyć własnym życiem. Wykonywał polecenia gdy my już zakończyliśmy je z konsoli. Przez parę minut mieliśmy problemy gdyż nie jechał kiedy mu kazaliśmy tylko wykonywał polecenia z dość dużym opóźnieniem i w zwolnionym tempie. Myśleliśmy iż może to być wina rozładowanych baterii ale po sprawdzeniu okazało się że są one sprawne. Problemy z pracą robota mogły powodować niezakończone wątki po wyjściu z SWIPL.

Spakowane pliki

pl/dydaktyka/piw/2010/sprawozdania/piw20100519-09d.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