Kody źródłowe programów

Alogrytm: Śledzenie lini

Robot umieszczony na planszy testowej dojeżdża do grubej czarnej linii i od tego momentu stara się poruszać wzdłuż tej linii. Po wciśnięciu sensora dotyku kończy pracę.

:- consult('plnxt.pl').
 
start:-
	nxt_open,
	nxt_light_LED(activate),	
	go_on_buddy,
	trigger_create(_,pushed,[nxt_stop,nxt_close]).
 
go_on_buddy :-
	nxt_stop,
	write('goonbuddy'),
	nxt_go(160),
      	trigger_create(_,lost_line,change_direction).
 
 
pushed :-
	nxt_touch(Value,force),
	Value=1.
 
find_line :-
	nxt_light(Value,force),
	Value < 45.
 
lost_line :-
	nxt_light(Value,force),
	Value > 45.
 
 
 
change_direction :-
	nxt_stop,
	trigger_create(_,find_line,go_on_buddy),
	write('obrot'),
	nxt_rotate(200,-100),
	write('koniec obrotu').	

Robot początkowo jest ustawiony na czarnej lini i jedzie prosto do przodu.
Gdy zjedzie z lini powoli obraca się w lewo, aż do jej znalezienia. Wtedy kontynuuje jazdę na wprost.

Robot zatrzymuje sie po wykryciu sygnału na czujniku dotyku.

Reportaż wideo

Plik dostępny tutaj, tutaj oraz tutaj.

Alogrytm: Sprzątacz

Robot ma za zadanie oczyścić teren w promieniu np. 40 cm od swojej początkowej pozycji. Jeżeli w tym obszarze znajdują się jakieś przeszkody, próbuje je wypchnąć poza niego. Po oczysczeniu całego terenu, wraca do pozycji wyjściowej i kończy pracę.

:- consult('plnxt.pl').
 
start:-
	nxt_open,
	nxt_light_LED(activate),	
	go_on_buddy,
	trigger_create(_,pushed,[nxt_stop,nxt_close]).
 
go_on_buddy :-
	nxt_rotate(130, 360),
	write('goonbuddy'),
    trigger_create(_,lost_line,go_cleaning).
 
 
pushed :-
	nxt_touch(Value,force),
	Value=1.
 
 
lost_line :-
	write('znalaz!'),nl,
	nxt_ultrasonic(Value, force),
	Value < 40.
 
go_cleaning :-
	trigger_killall,
	trigger_create(_,pushed,[nxt_stop,nxt_close]),
	write('gocleaning'),nl,
	nxt_stop,
	write('doprzodu'),nl,
	nxt_go_cm(300, 40),
	write('dotylu'),nl,
 
	%WNIOSKI: nie dziala jazda do tylu
	nxt_rotate(300,180),
	nxt_go_cm(300, 40),
	go_on_buddy.

Robot ustawiony jest na środku obszaru, który ma wysprzątać.
Powoli obraca się. Gdy wykryje obiekt w odległości około 40cm jedzie 40cm na wprost wypychając przedmiot z zadanego obszaru, poczym obraca się i wraca.

Robot zatrzymuje sie po wykryciu sygnału na czujniku dotyku.

Program nie działał poprawnie. Po uruchomieniu robot zapętlał się w funkcji Lost_line. Niestety ze względu na brak czasu nie zdążyliśmy dokładnie przetestować programu i znaleźć przyczyny błędu.

Spostrzeżenia, napotkane problemy, wnioski

Przy realizacji alogrytmu Sprzątacz odkrylismy, że nie działa jazda do tyłu.
Wywołanie funkcji nxt_go_cm z ujemną prędokością zawiesza robota i przestaje on reagować na kolejne komendy.
W programie ominęliśmy ten problem realizując wracanie przez obrócenie się o 180stopni i jazdę do przodu.

Pliki źródłowe

pl/dydaktyka/piw/2009/sprawozdania/piw20090429-17d.txt · ostatnio zmienione: 2019/06/27 15:50 (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