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 13:15]
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:​ FIXME 
- 
-===== Budowa robota ===== 
- 
-Należy zbudować robota opisanego w instrukcji QuickStart i dołączyć potrzebne sensory. 
- 
-===== Praca w powłoce SWIPL ===== 
- 
-Proszę uruchomić powłokę SWIPL i załadować plik plnxt.pl, a następnie: 
-  * Otworzyć połączenie:​ nxt_open. 
-  * Wybrać polecenie z dokumentacji:​ np. nxt_go_cm(400,​80). 
-  * Wykonać serię wybranych poleceń (przemieszczanie,​ odczyt sensorów). 
-  * Zamknąć połączenie:​ nxt_close. 
- 
-===== Programy w pliku ===== 
- 
-Większość predykatów ma swoją wersję z opcją '​force',​ która wymusza natychmiastowe wykonanie polecenia. Brak tej opcji sprawia, że polecenie oczekuje na wykonanie do zatrzymania robota. 
- 
-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,​200,​force),​ % Jazda 200 cm do przodu z prędkością 400 stopni/​sekundę. 
- nxt_go_cm(-400,​200,​force),​ % Jazda 200 cm do tyłu z prędkością 400 stopni/​sekundę. 
- nxt_stop, 
- nxt_close. 
- 
-:- start. 
-</​code>​ 
-Taki program nie ma większego sensu. Robot wykona kolejno polecenia jedno po drugim. W efekcie będzie stał w miejscu. 
- 
- 
-Bez opcji force polecenia są sekwencjonowane:​ 
-<code prolog> 
-:- consult('​sciezka_do_plnxt.pl'​). 
- 
-start :- 
- nxt_open, 
- nxt_go_cm(400,​200),​ % Jazda 200 cm do przodu z prędkością 400 stopni/​sekundę. 
- nxt_go_cm(-400,​200),​ % Jazda 200 cm do tyłu z prędkością 400 stopni/​sekundę. 
- nxt_stop, 
- nxt_close. 
- 
-:- start. 
-</​code>​ 
-Po zakończeniu jazdy do przodu robot zacznie jechać spowrotem. 
- 
-===== Do czego w takim razie przydaje się '​force'?​ ===== 
- 
-Proszę przetestować prosty program z wykorzystaniem mechanizmu trigger (dokumentacja FIXME): 
-<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ć 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