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.
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: