To jest stara wersja strony!


Pierwsze kroki

Test połączenia

Otwarcie

$ pl
?- [plnxt].
?- nxt_open.

Zwróć uwagę na sygnalizację zawarcia połączenia na wyświetlaczu jednostki centralnej.

Wydanie polecenia

Sprawdzenie poziomu baterii (najprostsze polecenie, które korzysta i z zapisu i z odczytu z urządzenia):

?- nxt_voltage_millivolt(Voltage).

Powinien pojawić się poziom baterii, jeżeli nie, mamy problem!

Zamknięcie

?- nxt_close.

Zwróć uwagę na sygnalizację braku połączenia na wyświetlaczu jednostki centralnej.

Praca w powłoce SWIPL

Proszę uruchomić powłokę SWIPL 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.
  • 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 na wykonanie 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.

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

Do czego w takim razie przydaje się 'force'?

Proszę przetestować proste przykłady programów z wykorzystaniem mechanizmu trigger (FIXME dokumentacja).

Przykład 1

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

Przykład 2

:- consult('../plnxt.pl').
 
start:-
	nxt_open,
	go_on_buddy,
	trigger_create(_,pushed,[nxt_stop,nxt_close]).
 
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.
 
% Sprawdzenie, czy sensor dotyku jest wciśnięty.
pushed :-
	nxt_touch(Value,force),
	Value=1.

Robot jedzie do przodu. Zatrzymuje się po klaśnięciu. Wznawia ruch po ponownym klaśnięciu.
Po wciśnięciu sensora dotyku zatrzymuje się i zamyka połączenie.
Proszę odpowiednio dobrać próg natężenia dźwięku.
Zbyt niska wartość może spowodować zapętlenie.
Zbyt wysoka sprawi, że zamiast klaskać, trzeba będzie solidnie „puknąć” sensor.

pl/plnxt/pierwsze_kroki.1235241646.txt.gz · ostatnio zmienione: 2019/06/27 15:59 (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