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