==== 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?640|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. :- 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. :- 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. 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. :- 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. Poniżej umieściliśmy kod algorytmu Panikarza. :- 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. 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}}