Laboratorium (zapoznanie z PLNXT)

W celu ułatwienia ruchów odczepilismy robotowi „kleszcze” co widać na poniższym zdjęciu. 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.txt · ostatnio zmienione: 2017/07/17 08:08 (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