====== Sprawozdanie z laboratorium nr 3 ====== * Robot: **Ewka** * Data wykonania: **19.05.2010 godz. 9:30** * Autorzy: **Jakub Gorzała, Oskar Jankiewicz, Łukasz Kowalski** ---- ===== Budowa robota ===== Udostępniony został nam w pełni rozbudowany robot Ewka, uzbrojony we wszystkie dostępne sensory - TriBot. ===== Konfiguracja środowiska pracy ===== Podczas pracy na laboratorium ponownie pojawił się problem z komunikacją z robotem poprzez bluetooth. Początkowo udało się nawiązać połączenie z robotem, lecz podczas próby wykonania pierwszego algorytmu komunikacja została zerwana i ponowne próby połączenia nie dawały efektu. Po upływie ponad połowy czasu zajęć udało się nawiązać połączenie - kluczem do sukcesu była zmiana nazwy urządzenia w preferencjach bluetooth'a. ===== Implementacja algorytmów ===== **Przykład 1** Pierwszy program realizuje sekwencje ruchu robota po kwadracie. Program jest uruchamiany w jednym wątku i stosowana jest w nim rekurencja. :- consult('plnxt.pl'). start :- nxt_open, rectangle_loop. rectangle_loop :- nxt_go_cm(350,40), nxt_rotate(350,90), rectangle_loop. **Przykład 2** Drugi przykład realizuje te same działania co przykład pierwszy, lecz umożliwia działanie wielowątkowe. Przetestować to można uruchamiając algorytm przy pomocy //start//, co powoduje uruchomienie sie programu w tle, a my mamy dostęp do konsoli. Użycie predykatu //stop// powoduje zatrzymanie się robota. :- consult('plnxt.pl'). start :- nxt_open, nxt_goal(ewka, rectangle_loop). rectangle_loop :- nxt_go_cm(350,40), nxt_rotate(350,90), rectangle_loop. stop :- trigger_killall, nxt_stop, nxt_close. **Przykład algorytmu** Przykład rozbudowanego algorytmu wykorzystującego sensor dźwięku. Robot zatrzymuje się po klaśnięciu. Po ponownym klaśnięciu wznawia ruch. Predykat //stop// zadany z konsoli powoduje zatrzymanie się robota i zamknięcie połączenia. :- consult('plnxt.pl'). start :- nxt_open, nxt_goal(ewka, go_on_buddy). go_on_buddy :- nxt_go(200), sleep(1), % Chwila przerwy, żeby jedno klaśnięcie nie zostało rozpoznane jako dwa. trigger_create(_,clap,wait_a_second_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 > 15. stop :- trigger_killall, nxt_stop, nxt_close. Przedstawione przykłady są kopiami kodu ze strony laboratorium. Brak czasu, spowodowany problemami z połączeniem bluetooth uniemożliwił nam podjęcie pracy nad własnymi algorytmami. Mamy nadzieje, że na następnych laboratoriach nie pojawi się już problem z komunikacja i będziemy mogli cały czas wykorzystać na tworzenie algorytmów. ===== Spostrzeżenia i wnioski ===== Środowisko PLNXT umożliwia dużo większą kontrole nad robotem niż proste oprogramowanie udostępniane przez firmę LEGO. Algorytmy budowane przy pomocy języka proglog mogą być bardziej skomplikowane i wykorzystywać w pełni możliwości robota. Jako wniosek nasuwa się propozycja uwzględnienia w opisie laboratorium podpowiedzi dotyczącej problemów z komunikacja. Rozwiązaniem tego problemu może okazać się zmiana nazwy urządzenia bluetooth w preferencjach z domyślnej - robo0-2 na dowolną inną.