Both sides previous revision
Poprzednia wersja
Nowa wersja
|
Poprzednia wersja
|
pl:dydaktyka:piw:2010:sprawozdania:piw20100519-09b [2010/05/25 22:44] piw10 |
pl:dydaktyka:piw:2010:sprawozdania:piw20100519-09b [2019/06/27 15:50] (aktualna) |
===== Budowa robota ===== | ===== Budowa robota ===== |
Udostępniony został nam w pełni rozbudowany robot Ewka, uzbrojony we wszystkie dostępne sensory - TriBot. | Udostępniony został nam w pełni rozbudowany robot Ewka, uzbrojony we wszystkie dostępne sensory - TriBot. |
| |
| |
===== Konfiguracja środowiska pracy ===== | ===== 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 ===== | ===== Implementacja algorytmów ===== |
Jako, że nie udało nam się porozumieć z robotem trudno udokumentować nasze dokonania programistyczne... Sama propozycja implementacji algorytmu jest łudząco podobna do tej z przykładu nr 2 zaprezentowanego na stronie laboratorium: | |
| **Przykład 1** |
| |
| Pierwszy program realizuje sekwencje ruchu robota po kwadracie. Program jest uruchamiany w jednym wątku i stosowana jest w nim rekurencja. |
<code> | <code> |
:- consult('sciezka_do_plnxt.pl'). | :- consult('plnxt.pl'). |
| |
start :- | start :- |
nxt_open, | nxt_open, |
trigger_create(_,check_color,[get_angle(Angle),nxt_rotate(250,Angle,force)]), | rectangle_loop. |
nxt_go(250). | |
| rectangle_loop :- |
| nxt_go_cm(350,40), |
| nxt_rotate(350,90), |
| rectangle_loop. |
| </code> |
| |
get_angle(Angle) :- | **Przykład 2** |
Angle is 120 + random(120). | |
| |
check_color :- | 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. |
nxt_light(Value, force), | |
Value < X. // gdzie X jest arbitralnie dobranym progiem dla potraktowania koloru jako czarny - wartość bliska 0. | <code> |
| :- 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. |
</code> | </code> |
Implementacji drugiego algorytmu nie podejmowaliśmy się bez możliwości wypróbowania. | |
| **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. |
| |
| <code> |
| :- 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. |
| </code> |
| |
| |
| 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 ===== | ===== Spostrzeżenia i wnioski ===== |
Implementacja funkcjonalności robota za pomocą api PLNXT wydaje się dalece bardziej interesująca, niż korzystanie z graficznego edytora LEGO. Przede wszystkim jest to narzędzie, które pozwala wreszcie poczuć kontrolę nad robotem i wykorzystać mechanizm dedukcyjny prologu w celu nadania maszynie inteligencji. Samo laboratorium stanowiło próbę praktycznego wykorzystania umiejętności programowania w logice. | Ś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ą. |
| |
===== Uwagi odnośnie PLNXT ===== | |
Uważamy, że projekt podąża w odpowiednim kierunku. Dość dobra dokumentacja, intuicyjność nazw funkcji i łatwość ich wykorzystania sprawiają, że w środowisku pracuję się łątwo i przyjemnie, o ile w ogóle jesteśmy upoważnieni by wystawiać takie opinie, nie mając okazji przetestowania efektów naszej pracy w praktyce ;-) | |