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:

  • zestaw LEGO,
  • plansza testowa (opcjonalnie),
  • adapter BT,
  • PLNXT.

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

Gienek

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

film - zapisz film oglądaj

Brak uploadu lokalnego, oddano po terminie. — Igor Wojnicki 2009/05/20 12:45

pl/dydaktyka/piw/2009/sprawozdania/piw20090422-12b.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