To jest stara wersja strony!


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.

:- 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.

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:

:- 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.

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):

:- 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.

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 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.

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