Robot: Gienek
Grupa: środa 12.30
Autorzy: Jakubas , Kozera, Płaszowski
Wstęp
Cel: testowanie możliwości interfeju programistycznego PLNXT z użyciem algorytmów o małej złożoności.
Środki:
Kod programu
:- consult('../plnxt/plnxt.pl').
start :-
nxt_open,
trigger_create(_,pushed_button,[stop]),
walking.
walking :-
trigger_create(_,clap,[run_forest_run]),
nxt_go(150).
run_forest_run :-
nxt_stop,
nxt_rotate(300,90),
sleep(1),
nxt_go(300),
sleep(2),
nxt_stop,
walking.
% Sprawdzenie, czy natężenie dźwięku przekracza progową wartość.
clap :-
nxt_sound(Value,force),
Value > 40.
pushed_button :-
nxt_touch(Value),
Value is 1.
stop :-
nxt_stop,
sleep(1),
trigger_killall,
sleep(2),
nxt_stop,
nxt_close.
Spostrzeżenia, napotkane problemy, wnioski.
Przygotowanie stanowiska pracy
Po pierwsze okazało się, że nasz dotychczasowy towarzysz nauki - Henio - zdezerterował. Nie było go nigdzie. W efekcie do dzisiejszej misji przydzielony został Gienek (aka. nr 7).
Kolejnym problemem okazała się niemożliwość połączenia z robotem. Po bliższych oględzinach stacji roboczej okazało się, że problem jest eksplicite trywialny - brak adaptera Bluetooth. Na szczęście pobliskie stanowisko po prawej stronie posiadało takie urządzenie.
Realizacja algorytmu Paniki
Spostrzeżenia
Okazuje się, że dość ciężko jest dobrać odpowiedni próg natężenia dźwięku na jaki robot powinien reagować. Bardzo często robot reagował na 'szum' występujący w tle np.: rozmowy innych grup. Metodą prób i błędów doszliśmy do wniosku że optymalna wartość to 40. Zakłócenia są pomijane, trzeba tylko dobrze klaskać ;)
Napotkane problemy
Problem: brak Henia
Rozwiązanie
Problem: brak adaptera USB
Rozwiązanie
translokacja adaptera z zaprzyjaźnionej stacji roboczej
Problem: nieśmiertelny wątek
Rozwiązanie
W początkowej wersji programu, staraliśmy się wykorzystać wątek, tak jak było to podane w przykładzie
thread_create(go_on_buddy,_,[detached(true)]).
Okazało się, że podczas kończenia aplikacji wątek ten nie zostawał niszczony co powodowało powstanie błędu:
Warning: [Thread 3] Thread running "trigger_start(nxt_is_stopped, thread_send_message(2, resume), 1)" died due to failure
Jest to problem podobny do problemu z triggerami z poprzednich zajęć. Wtedy rozwiązaliśmy problem dzięki funkcji trigger_killall, która niszczyła wszystkie triggery (wywoływana podczas kończenia działania programu). W dokumentacji nie zleźliśmy informacji o istnieniu analogicznej funkcji, która niszczyła by wątki. Rozwiązanie polegało zatem na napisaniu programu bez używania wątków. Problem ten się powtarza zawsze i jest to kwestia po stronie API.
Wnioski
Istnieje problem z wątkami - analogiczny do problemu z triggerami na jaki zwróciliśmy uwagę na poprzednich zajęciach.
Uwagi
Istnieje problem z wątkami - analogiczny do problemu z triggerami na jaki zwróciliśmy uwagę na poprzednich zajęciach.
Załączniki
Link do zdjęć
Link do filmu