|
|
pl:plnxt:pierwsze_kroki [2009/02/19 06:54] holownia |
pl:plnxt:pierwsze_kroki [2019/06/27 15:50] |
| |
FIXME! | |
import from | |
[[pl:mindstorms:lab:lab215]] | |
| |
===== Test połączenia ===== | |
| |
==== Otwarcie ==== | |
<code prolog> | |
$ pl | |
?- [plnxt]. | |
?- nxt_open. | |
</code> | |
| |
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): | |
<code prolog> | |
?- nxt_voltage_millivolt(Voltage). | |
</code> | |
| |
Powinien pojawić się poziom baterii, jeżeli nie, mamy problem! | |
| |
==== Zamknięcie ==== | |
<code prolog> | |
?- nxt_close. | |
</code> | |
| |
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. | |
<code prolog> | |
:- consult('sciezka_do_plnxt.pl'). | |
| |
start :- | |
nxt_open, | |
nxt_go_cm(400,80), % Jazda 200 cm do przodu z prędkością 400 stopni/sekundę. | |
nxt_go_cm(-400,80), % Jazda 200 cm do tyłu z prędkością 400 stopni/sekundę. | |
nxt_close. | |
| |
:- start. | |
</code> | |
| |
===== Do czego w takim razie przydaje się 'force'? ===== | |
| |
Proszę przetestować proste przykłady programów z wykorzystaniem mechanizmu trigger (FIXME dokumentacja). | |
| |
==== Przykład 1 ==== | |
| |
<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ą. | |
| |
==== Przykład 2 ==== | |
| |
<code prolog> | |
:- 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. | |
</code> | |
| |
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. 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. | |
| |
| |