To jest stara wersja strony!
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ą.