Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

pl:mindstorms:lab:lab_plnxt_zapoznanie [2008/12/16 22:24]
holownia
pl:mindstorms:lab:lab_plnxt_zapoznanie [2019/06/27 15:50]
Linia 1: Linia 1:
-====== Laboratorium (zapoznanie z PLNXT) ====== 
  
-===== Opis ===== 
- 
-Cel: zapoznanie z interfejsem programistycznym PLNXT i budowa prostych algorytmów. 
- 
-Środki: 
-  * zestaw LEGO, 
-  * adapter BT, 
-  * PLNXT. 
- 
-===== Wstęp ===== 
- 
-PLNXT to API w języku Prolog dla LEGO Mindstorms NXT. 
- 
-Praca nad PLNXT jest wciąż w toku. **Państwa uwagi w sprawozdaniach (także krytyczne) będą dla nas cenne.** 
- 
-API jest podzielone na następujące wartswy: 
-    * najniższa warstwa (nxt_actions),​ 
-    * średnia warstwa (nxt_sensomoto),​ 
-    * najwyższa warstwa (nxt_movement). 
- 
-==== Warstwa nxt_actions ==== 
- 
-Warstwa odpowiada za komunikację z NXT. Mamy do dyspozycji predykaty poruszające silnikami, odczytującymi dane z sensorów, itp. W tej warstwie można zastosować różne systemy komunikacji. Na zajęciach będziemy używać komunikacji po porcie szeregowym z wykorzystaniem protokołu komunikacji LEGO. 
- 
-==== Warstwa nxt_sensomoto ==== 
- 
-Warstwa bazuje na nxt_actions. To, co zostało zaimplementowane w niższej warstwie, w tej jest obudowane w logikę (np. sprawdzanie,​ czy wartość prędkości jest dopuszczalna). 
- 
-==== Warstwa nxt_movement ==== 
- 
-**Warstwa, z której Państwo będziecie bezpośrednio korzystać.** Warstwa dostarcza predykaty realizujące złożoną pracę silników: ruch pojazdu do przodu, do tyłu, skręcanie, obracanie. 
- 
-Dokumentacja:​ {{:​pl:​mindstorms:​lab:​nxt_movement.pdf|nxt_movement.pdf}} 
- 
-===== Budowa robota ===== 
- 
-Należy zbudować robota opisanego w instrukcji QuickStart i dołączyć sensory. 
- 
-===== Przygotowanie środowiska ===== 
- 
-  * zapisz plik {{:​pl:​mindstorms:​lab:​plnxt-20081217.tar.gz|plnxt-20081217.tar.gz}} na dysku w folderze FIXME 
-  * rozpakuj: tar xvzf plnxt-20081217.tar.gz 
-  * przejdź do katalogu plnxt: cd plnxt 
- 
-===== Praca w powłoce SWIPL ===== 
- 
-Proszę uruchomić powłokę SWIPL (polecenie xpce) i załadować plik plnxt.pl ([plnxt].), a następnie: 
-  * Otworzyć połączenie:​ nxt_open. 
-  * Wykonać serię wybranych z dokumentacji poleceń (przemieszczanie,​ odczyt sensorów). Np.: 
-    * nxt_go(300). % Jazda do przodu z prędkością 300 stopni/​sekundę. 
-    * nxt_stop. 
-    * nxt_go_cm(400,​80). % Jazda do przodu z prędkościa 400 stopni/​sekundę. Zatrzymanie po 80 cm. 
-    * nxt_touch(Value). % Odczyt sensora dotyku. 
-    * nxt_sound(Value). % Odczyt sensora dźwięku. 
-    * nxt_light(Value). % Odczyt sensora światła. 
-    * nxt_light_LED(activate). % Włączenie diody sensora światła. 
-    * nxt_light(Value). 
-    * nxt_light_LED(passivate). 
-    * nxt_ultrasonic(Value). 
-    * nxt_rotate(350,​360). % Obrót w prawo o 360 stopni z prędkością 350 stopni/​sekundę. 
-    * nxt_play_tone(500,​2000). % Wydanie dźwięku o częstotliwości 500 Hz i czasie trwania 2000 ms. 
-    * nxt_voltage_millivolt(Voltage). % Odczyt napięcia baterii. 
-  * Zamknąć połączenie:​ nxt_close. 
- 
-===== Programy w pliku ===== 
- 
-Większość predykatów ma swoją wersję z opcją '​force'​ (np. nxt_go(400,​force).),​ która wymusza natychmiastowe wykonanie polecenia.\\ 
-Brak tej opcji sprawia, że polecenie oczekuje na wykonanie do zatrzymania robota.\\ 
-To pozwala na pisanie sekwencyjnych programów, jak przykład niżej. 
- 
-Proszę skopiować poniższy kod do pliku i załadować w SWIPL. 
-<code prolog> 
-:- consult('​sciezka_do_plnxt.pl'​). 
- 
-start :- 
- nxt_open, 
- nxt_go_cm(400,​80),​ % Jazda 200 cm do przodu z prędkością 400 stopni/​sekundę. 
- nxt_go_cm(-400,​80),​ % Jazda 200 cm do tyłu z prędkością 400 stopni/​sekundę. 
- nxt_close. 
- 
-:- start. 
-</​code>​ 
- 
-===== Do czego w takim razie przydaje się '​force'?​ ===== 
- 
-Proszę przetestować proste przykłady programów z wykorzystaniem mechanizmu trigger (dokumentacja:​ {{:​pl:​mindstorms:​lab:​threads.pdf|threads.pdf}}). 
- 
-==== Przykład 1 ==== 
- 
-<code prolog> 
-:- consult('​sciezka_do_plnxt.pl'​). 
- 
-start :- 
- nxt_open, 
- trigger_create(_,​check_distance,​[nxt_stop,​nxt_close]),​ 
- nxt_go(300). 
- 
-check_distance :- 
- nxt_ultrasonic(Distance,​force),​ 
- Distance < 15. 
-</​code>​ 
-Trigger będzie wyzwolony, gdy check_distance będzie prawdziwe. Wtedy zostanie wykonane zatrzymanie robota i zamknięcie połączenia.\\ 
-Zatem jest to prosty program: robot porusza się do przodu do napotkania przeszkody.\\ 
-Pomiar odległości odbywa się cyklicznie. Bez opcji '​force'​ odbyłby się po zatrzymaniu silników (w tym przypadku "​nigdy"​).\\ 
-Robota czekałoby bolesne spotkanie z przeszkodą. 
- 
-==== Przykład 2 ==== 
- 
-<code prolog> 
-:- consult('​../​plnxt.pl'​). 
- 
-start:- 
- nxt_open, 
- go_on_buddy,​ 
- trigger_create(_,​pushed,​[nxt_stop,​nxt_close]). 
- 
-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. 
- 
-% Sprawdzenie,​ czy sensor dotyku jest wciśnięty. 
-pushed :- 
- nxt_touch(Value,​force),​ 
- Value=1. 
-</​code>​ 
- 
-Robot jedzie do przodu. Zatrzymuje się po klaśnięciu. Wznawia ruch po ponownym klaśnięciu.\\ 
-Po wciśnięciu sensora dotyku zatrzymuje się i zamyka połączenie.\\ 
-Proszę odpowiednio dobrać próg natężenia dźwięku. W laboratorium może być głośno.\\ 
-Zbyt niska wartość może spowodować zapętlenie.\\ 
-Zbyt wysoka sprawi, że zamiast klaskać, trzeba będzie solidnie "​puknąć"​ sensor. 
- 
-===== Implementacja algorytmu ===== 
- 
-Proszę zaimplementować jeden lub więcej z poniższych algorytmów:​ 
- 
-==== Omijanie przeszkód ==== 
- 
-Robot przemieszcza się do przodu. Po napotkaniu przeszkody zatrzymuje się i próbuje ją ominąć. W fazie przemieszczania do przodu (tylko w tej fazie) robot zatrzymuje się i zamyka połączenie po klaśnięciu. 
- 
-==== Unikanie przeszkód ==== 
- 
-Robot przemieszcza się do przodu. Po napotkaniu przeszkody cofa się, obraca w innym kierunku i wznawia przemieszczanie do przodu. W fazie przemieszczania do przodu (tylko w tej fazie) robot zatrzymuje się i zamyka połączenie po klaśnięciu. 
- 
-==== Panikarz ==== 
- 
-Robot przemieszcza się powoli. Po klaśnięciu zmienia kierunek i szybko ucieka przez jakiś czas (wtedy nie jest podatny na klaśnięcie),​ po czym uspokaja się i znowu jedzie powoli. Zatrzymuje się i zamyka połączenie po wciśnięciu sensora dotyku. 
- 
-===== Zakończenie ===== 
- 
-Rozmontować robota, wkladając wszystkie części do [[pl:​mindstorms:​lab:​wyposazenie#​rozlozenie_klockow_w_przegrodach|odpowiednich przegródek w pudełku]] 
- 
-__UWAGA__! Należy to robić powoli i ostrożnie - połamanie klocków przy rozmontowywniu jest latwiejsze niż przy montażu. :-( 
- 
-===== Sprawozdanie ===== 
- 
-W przypisanej grupie przestrzeni nazw stworzyć stronę, na której umieścić: 
-  * kod Państwa programów, 
-  * spostrzeżenia,​ napotkane problemy, wnioski, 
-  * uwagi dotyczące funkcjonalności PLNXT. 
- 
-[[pl:​mindstorms:​studenci:​przedmioty:​jsi:​sprawozdania2008|Wykaz sprawozdań]] 
pl/mindstorms/lab/lab_plnxt_zapoznanie.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