Różnice

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

Odnośnik do tego porównania

Both sides previous revision Poprzednia wersja
Nowa wersja
Poprzednia wersja
pl:mindstorms:lab:lab_plnxt_zapoznanie [2008/12/16 13:15]
holownia
pl:mindstorms:lab:lab_plnxt_zapoznanie [2019/06/27 15:50] (aktualna)
Linia 9: Linia 9:
   * adapter BT,   * adapter BT,
   * PLNXT.   * PLNXT.
 +
 +===== Przygotowanie stanowiska =====
 +
 +__UWAGA!__ Przed rozpoczęciem ćwiczeń należy starannie przygotować swoje stanowisko pracy [[lab215|zgodnie z instrukcją]].
  
 ===== Wstęp ===== ===== Wstęp =====
Linia 33: Linia 37:
 **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. **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+Dokumentacja: ​{{:​pl:​mindstorms:​lab:​nxt_movement.pdf|nxt_movement.pdf}}
  
 ===== Budowa robota ===== ===== Budowa robota =====
  
-Należy zbudować robota opisanego w instrukcji QuickStart i dołączyć ​potrzebne ​sensory.+Należy zbudować robota opisanego w instrukcji QuickStart i dołączyć sensory. 
 + 
  
 ===== Praca w powłoce SWIPL ===== ===== Praca w powłoce SWIPL =====
  
-Proszę uruchomić powłokę SWIPL i załadować plik plnxt.pl, a następnie:+Proszę uruchomić powłokę SWIPL (polecenie xpce) i załadować plik plnxt.pl ​([plnxt].), a następnie:
   * Otworzyć połączenie:​ nxt_open.   * Otworzyć połączenie:​ nxt_open.
-  * Wybrać polecenie ​z dokumentacji: ​np. nxt_go_cm(400,​80). +  * Wykonać serię wybranych ​z dokumentacji ​poleceń (przemieszczanie,​ odczyt sensorów). Np.: 
-  Wykonać serię wybranych poleceń ​(przemieszczanieodczyt sensorów).+    * 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.   * Zamknąć połączenie:​ nxt_close.
- 
 ===== Programy w pliku ===== ===== 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.+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. Proszę skopiować poniższy kod do pliku i załadować w SWIPL.
Linia 57: Linia 76:
 start :- start :-
  nxt_open,  nxt_open,
- nxt_go_cm(400,​200,force), % Jazda 200 cm do przodu z prędkością 400 stopni/​sekundę. + nxt_go_cm(400,​80), % Jazda 80 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_go_cm(-400,​80), % Jazda 80 cm do tyłu z prędkością 400 stopni/​sekundę.
- nxt_stop,+
  nxt_close.  nxt_close.
  
 :- start. :- start.
 </​code>​ </​code>​
-Taki program nie ma większego sensu. Robot wykona kolejno polecenia jedno po drugim. W efekcie będzie stał w miejscu. 
  
 +===== Do czego w takim razie przydaje się '​force'?​ =====
  
-Bez opcji force polecenia są sekwencjonowane: +Proszę przetestować proste przykłady programów z wykorzystaniem mechanizmu trigger (dokumentacja{{:pl:​mindstorms:​lab:​threads.pdf|threads.pdf}}).
-<code prolog>​ +
-:- consult('​sciezka_do_plnxt.pl').+
  
-start :- +==== Przykład ​====
- 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> <code prolog>
 :- consult('​sciezka_do_plnxt.pl'​). :- consult('​sciezka_do_plnxt.pl'​).
Linia 102: Linia 106:
 Robota czekałoby bolesne spotkanie z przeszkodą. Robota czekałoby bolesne spotkanie z przeszkodą.
  
-===== Implementacja algorytmu ===== 
  
-Proszę zaimplementować jeden lub więcej z poniższych algorytmów:​ 
  
-==== Omijanie przeszkód ​====+===== Implementacja algorytmu =====
  
-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.+Proszę zaimplementować poniższe algorytmy:
  
-==== Unikanie przeszkód ​====+==== 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)//"​.
  
-Robot przemieszcza się do przoduPo 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.+==== 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ć ​poinformować o problemie sygnałem dźwiękowym. Po usunięciu przeszkody robot powinien kontynuować jazdę.
  
-==== Panikarz ​====+===== Zakończenie =====
  
-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.+__UWAGA__! Prosze ​nie rozmontowywać robota!
  
-===== Zakończenie =====+**__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!
  
-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 ===== ===== Sprawozdanie =====
Linia 131: Linia 133:
   * uwagi dotyczące funkcjonalności PLNXT.   * uwagi dotyczące funkcjonalności PLNXT.
  
-[[pl:mindstorms:studenci:przedmioty:jsi:​sprawozdania2008|Wykaz sprawozdań]]+[[pl:dydaktyka:piw:2010:wykaz_sprawozdan|Wykaz sprawozdań]]
pl/mindstorms/lab/lab_plnxt_zapoznanie.1229429720.txt.gz · ostatnio zmienione: 2019/06/27 15:57 (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