W celu ułatwienia ruchów odczepilismy robotowi „kleszcze” co widać na poniższym zdjęciu.
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.