|
|
pl:mindstorms:studenci:przedmioty:jsi:jsi2008:jsi20090114-09b [2009/01/19 02:19] jsi08 |
pl:mindstorms:studenci:przedmioty:jsi:jsi2008:jsi20090114-09b [2019/06/27 15:50] |
==== Laboratorium (zapoznanie z PLNXT)==== | |
W celu ułatwienia ruchów odczepilismy robotowi "kleszcze" co widać na poniższym zdjęciu. | |
{{:pl:mindstorms:studenci:przedmioty:jsi:jsi2008:jsi20090114-09b.jpg|robot po dołączenou czujników i drobnej modyfikacji}} | |
| |
Na szczęście zastaliśmy zbudowanego Henia :) | |
| |
Przygotowanie stanowiska nie sprawiło nam problemu dzięki dobrej instrukcji. Pierwsze co zrobiliśmy to wypróbowanie przykładowych programów. | |
| |
<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> | |
| |
<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> | |
Wszystko przebiegało zgodnie z planem, ale zauważyliśmy następujący problem. Po skompilowaniu drugiego kodu, robot wykonał swoje zadanie, jednak ponowne wykonanie [start.] jest niemożliwe. Musieliśmy wyłączyć powłokę SWIPL i skompilować kod ponownie. | |
| |
| |
Biorąc przykład drugi za bazę, napisaliśmy program umożliwiający omijanie przeszkody. | |
<code prolog> | |
:- consult('plnxt.pl'). | |
| |
start:- | |
nxt_open, | |
go_on_buddy, | |
trigger_create(_,pushed,[nxt_stop,nxt_close]). | |
| |
go_on_buddy :- | |
nxt_go(250), | |
sleep(0.1), % Chwila przerwy, żeby jedno klaśnięcie nie zostało rozpoznane jako dwa. | |
trigger_create(_,check_distance,detour_buddy). | |
| |
detour_buddy :- | |
nxt_stop, | |
nxt_turn(400, -180), | |
nxt_go_sec(400, 2), | |
nxt_turn(400, 180), | |
nxt_go_sec(400, 5), | |
nxt_turn(400, 180), | |
nxt_go_sec(400, 2), | |
nxt_turn(400, -180), | |
go_on_buddy. | |
| |
% Sprawdzenie, czy sensor dotyku jest wciśnięty. | |
pushed :- | |
nxt_touch(Value,force), | |
Value=1. | |
| |
check_distance :- | |
nxt_ultrasonic(Distance,force), | |
Distance < 15. | |
| |
</code> | |
| |
Poniżej umieściliśmy kod algorytmu Panikarza. | |
| |
<code prolog> | |
:- consult('plnxt.pl'). | |
| |
start:- | |
nxt_open, | |
go_on_buddy, | |
trigger_create(_,pushed,[nxt_stop,nxt_close]). | |
| |
go_on_buddy :- | |
nxt_go(250), | |
sleep(0.1), % Chwila przerwy, żeby jedno klaśnięcie nie zostało rozpoznane jako dwa. | |
trigger_create(_,clap,panic_buddy). | |
| |
panic_buddy :- | |
nxt_stop, | |
random(-180,180, Direction), | |
nxt_rotate(400, Direction), | |
nxt_go_sec(800, 1), | |
trigger_create(_,clap,go_on_buddy). | |
| |
% Sprawdzenie, czy natężenie dźwięku przekracza progową wartość. | |
clap :- | |
nxt_sound(Value,force), | |
Value > 30. | |
| |
% Sprawdzenie, czy sensor dotyku jest wciśnięty. | |
pushed :- | |
nxt_touch(Value,force), | |
Value=1. | |
</code> | |
| |
Zdarzało się ze komputer nie mógł się połączyć przez Bluetooth z robotem. Nie wiemy co może być przyczyną, ale wyłączenie i włączenie robota rozwiązywało problem. | |
| |
====załącznik==== | |
{{:pl:mindstorms:studenci:przedmioty:jsi:jsi2008:jsi20090114-09b.tar.gz|filmy}} | |