Różnice

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

Odnośnik do tego porównania

pl:mindstorms:lab:lab_plnxt_zapoznanie [2010/05/11 00:05]
snowaczyk
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. 
- 
-===== Przygotowanie stanowiska ===== 
- 
-__UWAGA!__ Przed rozpoczęciem ćwiczeń należy starannie przygotować swoje stanowisko pracy [[lab215|zgodnie z instrukcją]]. 
- 
-===== 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. 
- 
- 
- 
-===== 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 z wykonaniem 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 80 cm do przodu z prędkością 400 stopni/​sekundę. 
- nxt_go_cm(-400,​80),​ % Jazda 80 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 ==== 
- 
-<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ą. 
- 
- 
- 
-===== Implementacja algorytmu ===== 
- 
-Proszę zaimplementować poniższe algorytmy: 
- 
-==== Algorytm 1 ==== 
-Robot porusza się dowolnie wewnątrz obszaru ograniczonego czarną linią (można wykorzystać planszę testową). Nie może poza niego wyjechać! Gdy najedzie na czarną linię, powinien zawrócić -- niekoniecznie o 180 stopni, żeby było ciekawiej. Podpowiedź:​ można użyć formuły typu "//​Angle is 120 + random(120)//"​. 
- 
-==== Algorytm 2 ==== 
-Robot podąża wzdłuż czarnej linii (można wykorzystać planszę testową). Nie może jej zgubić! Gdy napotka przeszkodę,​ powinien się zatrzymać i poinformować o problemie sygnałem dźwiękowym. Po usunięciu przeszkody robot powinien kontynuować jazdę. 
- 
-===== Zakończenie ===== 
- 
-__UWAGA__! Prosze nie rozmontowywać robota! 
- 
-**__UWAGA__**! Jeżeli należycie Państwo do ostatniej tego dnia grupy ćwiczeniowej,​ należy //​wyciągnąć baterie z robota// i przekazać je prowadzącemu do naładowania! 
- 
- 
- 
-===== 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:​dydaktyka:​piw:​2010:​wykaz_sprawozdan|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