Różnice

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

Odnośnik do tego porównania

pl:mindstorms:lab:lab_plnxt_podstawy [2010/02/25 12:46]
ikaf
pl:mindstorms:lab:lab_plnxt_podstawy [2019/06/27 15:50]
Linia 1: Linia 1:
-====== Laboratorium (proste algorytmy w PLNXT) ====== 
  
-===== Opis ===== 
- 
-Cel: testowanie możliwości interfeju programistycznego PLNXT z użyciem algorytmów o małej złożoności. 
- 
-Środki: 
-  * zestaw LEGO, 
-  * plansza testowa (opcjonalnie),​ 
-  * adapter BT, 
-  * PLNXT. 
- 
-===== Przygotowanie stanowiska ===== 
- 
-__UWAGA!__ Przed rozpoczęciem ćwiczeń należy starannie przygotować swoje stanowisko pracy [[lab215|zgodnie z instrukcją]]. 
- 
-===== Dokumentacja ===== 
- 
-Warstwa behawioralna:​ {{:​pl:​mindstorms:​lab:​nxt_movement.pdf|nxt_movement.pdf}}\\ 
-Tiggery i timery: {{:​pl:​mindstorms:​lab:​threads.pdf|threads.pdf}} 
- 
-===== Budowa robota ===== 
- 
-Prowadzący powinien udostępnić złożonego robota TriBot lub jego uproszczoną wersję (wg. instrukcji QuickStart). Po wybraniu algorytmu do implementacji (poniżej), proszę zwrócić uwagę, czy robot ma odpowiednie sensory. Jeśli nie, proszę dokonać odpowiednich modyfikacji. 
- 
-===== Program + komendy z konsoli ===== 
- 
-Uruchamiając program w wątku głównym SWI-Prolog, który realizuję pewną sekwencję ruchów, nie pozostawiamy sobie możliwości ingerencji z konsoli (np. zatrzymania działania programu w wybranym przez nas momencie). 
- 
-==== Przykład 1 ==== 
- 
-Robot wykonuje ruch po kwadracie. Główny wątek sekwencjonuje ruchy (przemieszczenie,​ obrót) i nie pozwala na wprowadzenie innego polecenia. Nie ma możliwości zatrzymania NXT. Pozostaje wyłączenie go. Proszę przetestować! Działanie programu rozpoczynamy wpisując start. 
- 
-<code prolog> 
-:- consult('​../​plnxt.pl'​). 
-  
-start :- 
- nxt_open, 
- rectangle_loop. 
-  
-rectangle_loop :- 
- nxt_go_cm(350,​40),​ 
- nxt_rotate(350,​90),​ 
- rectangle_loop. 
-</​code>​ 
-==== Przykład 2 ==== 
- 
-Jazda po kwadracie jest realizowana w osobnym wątku. To pozwala na wprowadzanie dodatkowych poleceń z konsoli. Proszę przetestować! Działanie programu rozpoczynamy,​ jak w przykładzie wyżej (start.); zatrzymujemy - przy w dowolnej chwili przy użyciu predykatu stop. 
- 
-<code prolog> 
-:- consult('​../​plnxt.pl'​). 
-  
-start :- 
- nxt_open, 
- nxt_goal(NAZWA_ROBOTA,​ rectangle_loop). 
-  
-rectangle_loop :- 
- nxt_go_cm(350,​40),​ 
- nxt_rotate(350,​90),​ 
- rectangle_loop. 
-  
-stop :- 
- trigger_killall,​ 
- nxt_stop, 
- nxt_close. 
-</​code>​ 
-===== Szablon programu ===== 
- 
-Bazując na przykładzie wyżej, wygodny szablon do używania plnxt może wyglądać następująco:​ 
- 
-<code prolog> 
-:- consult('​../​plnxt.pl'​). 
-  
-start :- 
- nxt_open, 
- nxt_goal(NAZWA_ROBOTA,​ my_actions). 
-  
-my_actions :- (...). 
-  
-stop :- 
- trigger_killall,​ 
- nxt_stop, 
- nxt_close. 
-</​code>​ 
- 
-Nowy wątek tworzy się zadając mu pewien cel (tutaj //​my_actions/​0//​) oraz ustawiając opcje. Opcja detached powoduje automatyczne odzyskiwanie zasobów używanych przez wątek po zakończeniu jego pracy. 
- 
-===== Przykład algorytmu ===== 
- 
-Wymagane sensory: dotyku, dźwięku. 
-Robot jedzie do przodu. Zatrzymuje się po klaśnięciu. Wznawia ruch po ponownym klaśnięciu.\\ 
-Po wpisaniu //stop.// 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. 
- 
-<code prolog> 
-:- consult('​../​plnxt.pl'​). 
- 
-start :- 
- nxt_open, 
- nxt_goal(NAZWA_ROBOTA,​ 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>​ 
- 
-===== Implementacja algorytmu ===== 
- 
-Proszę zaimplementować jeden lub więcej z poniższych algorytmów:​ 
- 
-==== Piłka ==== 
-Z użyciem planszy testowej.\\ 
-Wymagane sensory: dotyku, światła. 
-Robot umieszczony na planszy testowej w obszarze start łapie piłkę znajdującą się w czerwonym obszarze przed nim i przemieszcza ją poza obszar zamknięty wewnątrz czarnej linii. 
- 
-==== Omijanie przeszkód ==== 
-Wymagane sensory: odległości,​ dźwięku. 
-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. 
- 
-==== Panikarz ==== 
-wymagane sensory: dźwięku, dotyku. 
-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 ===== 
- 
-__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:​2009:​wykaz_sprawozdan|Wykaz sprawozdań]] 
pl/mindstorms/lab/lab_plnxt_podstawy.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