Sprawozdanie nr 3
Robot: Dyzio
Data: 19.05.2010, godz. 15.30
Autorzy: Andrzej Gryboś, Michał Henslok, Tomasz Jama
Wstęp
Poczatek laboratorium poświęciliśmy na rozwiązanie problemów z łącznością których doświadczyliśmy tydzień temu. Udało nam się je rozwiązać poprzez zamykanie pl i ponowne wpisywanie:
./bin/plnxt_stty <nazwa_robota>
a następnie ponowne uruchomienie powłoki.
Musieliśmy również usunąć polecenie nxt_open z kodu programu i wpisywać je ręcznie przed uruchomieniem.
Oto pierwsza działająca wersja programu panikarz:
:- consult('plnxt.pl').
start :-
nxt_go(100),
nxt_goal(dyzio, go_on_buddy).
go_on_buddy :-
nxt_go(100),
sleep(1), % Chwila przerwy, żeby jedno klaśnięcie nie zostało rozpoznane jako dwa.
trigger_create(_,clap,uciekaj),
trigger_create(_,click,stop),
go_on_buddy.
uciekaj :-
nxt_stop,
nxt_rotate(900, 90),
nxt_go_sec(900, 1),
sleep(1),
go_on_buddy.
% Sprawdzenie, czy natężenie dźwięku przekracza progową wartość.
clap :-
nxt_sound(Value,force),
Value > 50.
click :-
nxt_touch(Value, force),
Value > 0.
stop :-
trigger_killall,
nxt_stop,
nxt_close.
Działające algorytmy
Niestety pierwsza wersja programu działała połowicznie. Robot poruszał się do przodu, ale drugi wątek z triggerami nie działał.
Po przeniesieniu wszystkiego do jednego wątku powstała poniższa, w pełni działająca wersja programu:
:- consult('plnxt.pl').
start :-
nxt_go(100),
sleep(1), % Chwila przerwy, żeby jedno klaśnięcie nie zostało rozpoznane jako dwa.
trigger_create(_,clap,uciekaj),
trigger_create(_,click,stop).
uciekaj :-
nxt_stop,
nxt_rotate(900, 90),
nxt_go_sec(900, 1),
sleep(1),
start.
% Sprawdzenie, czy natężenie dźwięku przekracza progową wartość.
clap :-
nxt_sound(Value,force),
Value > 50.
click :-
nxt_touch(Value, force),
Value > 0.
stop :-
trigger_killall,
nxt_stop,
nxt_close.
Następnie napisaliśmy również w 100% działającą wersję omijacza:
:- consult('plnxt.pl').
start :-
nxt_go(100),
trigger_create(_,clap,stop),
trigger_create(_,odl,omijaj).
omijaj :-
nxt_stop,
nxt_rotate(100, 30),
start.
% Sprawdzenie, czy natężenie dźwięku przekracza progową wartość.
clap :-
nxt_sound(Value,force),
Value > 50.
odl :-
nxt_ultrasonic(Value, force),
Value < 20.
stop :-
nxt_stop,
nxt_close.
Oto zdjęcie robota dla powyższego programu: