Laboratorium - zaawansowane algorytmy w PLNXT

29.04.2009, godz. 9.30
grupa w składzie: Joanna Koza, Tomasz Michalski, Kamil Mucha
Informatyka Stosowana IV 2008/2009
KA, WEAIiE, AGH

robot IREK

Robot

załączone sensory światła (koloru), dźwięku (mikrofon), dotyku i odległości

Konfiguracja stanowiska do pracy z NXT

Połączenie robota oraz pobranie PLNXT

Bez problemów.

Ustawienie parametrów portu i sparowanie

./bin/plnxt_stty irek - brak konieczności parowania

Konfiguracja PLNXT

plnxt.pl

% Specify the device files.
nxt_serial_device(write,'/dev/rfcomm9').
nxt_serial_device(read,'/dev/rfcomm9').

Sprawdzenie konfiguracji

Konfiguracja działa poprawnie.

Implementacja algorytmu

Uwaga! Wątki PLNXT nie działały u nas prawidłowo - dotyczy to najprawdopodobniej polecenia

trigger_killall

Po pierwszym jego wywołaniu (np. używając predykat „stop”), kolejne stworzenie wątku poleceniem

thread_create

(np. używając predykat „start”) sprawia, że wątku nie można już „zabić”. Chcąc więc przerwać działanie programu, należy opuścić powłokę PL i uruchomić ją ponownie - jest to niewygodne i czasochłonne. Opisana sytuacja została uchwycona na poniższym zrzucie ekranu:

Problem ten pojawił się już podczas poprzedniego laboratorium.

Więzień

start :-
	nxt_open,
	thread_create(search,_,[detached(true)]),
	trigger_create(_,touch,stop).
:- 
	consult('plnxt.pl'), 
	start.
 
%poszukiwanie czerwonego obszaru
search :-
	nxt_stop,
	trigger_create(_,red,escape),
	nxt_go(140).
 
%obrót po znalezieniu czarnej linii
rotate :-
	nxt_stop,
	nxt_rotate(350, 90 + random(90)),
	sleep(2),
	search.	
 
%ucieczka po znalezieniu czerwonego klucza
escape :-
	nxt_play_tone(440,100),
	nxt_stop,
	nxt_go(500), sleep(3), nxt_stop.
 
%rozpoznanie czarnego koloru
black :-
	nxt_light(Value,force),
	write(Value),nl,
	Value < 28.
 
%rozpoznanie czerwonego koloru
red :-
	nxt_light(Value,force),
	write(Value),nl,
	Value < 33,
	Value > 26,
	sleep(0.1),
	nxt_light(Value2,force),
	write('2: '),write(Value2),nl,
	Value2 < 33,
	Value2 > 26.
 
touch :-
	nxt_touch(V, force),
	V = 1.
 
stop :-
	trigger_killall,
	nxt_stop,
	nxt_close, halt. 

filmiki:
poszukiwanie
ucieczka

Sprzątacz

start :-
	nxt_open,
	thread_create(search,_,[detached(true)]),
	trigger_create(_, found, clean),
	trigger_create(_, touch, stop).
:- 
	consult('plnxt.pl'), 
	start.
 
%poszukiwanie przedmiotu - obrót wokół własnej osi
search :-
	write('search'), nl,
	nxt_stop,
	nxt_rotate(150, 36000),
	sleep(5).
 
%sprzątanie - ruch do przodu (popchnięcie przedmiotu) i powrót
clean :-
	write('clean'), nl,
	nxt_stop,
	nxt_go(300),
	sleep(3),
	write('back'),nl,
	nxt_stop,
	nxt_go(-300),
	sleep(3),
	trigger_create(_, found, clean),
	search.
 
%sprawdzanie, czy jest przedmiot w promieniu 15 cm
found :-
	nxt_ultrasonic(V, force),
	write(V), nl,
	V < 15.
 
%wąłączenie robota
touch :-
	nxt_touch(V, force),
	V = 1.
 
stop :-
	nxt_play_tone(220,500),
	trigger_killall,
	nxt_stop,
	nxt_close. 

filmik:
sprzątanie

Uwagi i wnioski

  • zrealizowanie zadań „więzień” czy „śledzenie linii” w warunkach naszego laboratorium jest niezwykle trudne. Sensor światła odczytuje wartości w zakresie 0 - 100, jest to więc znormalizowana skala szarości. Różnice między kolorami (zwłaszcza ciemnymi, np. czerwonym i czarnym) są nieduże (biały - ok. 40, czarny - ok. 25, czerwony ok. 30), a sytuację dodatkowo pogarsza kierunkowe oświetlenie sali laboratoryjnej (brak jednakowego oświetlenia planszy testowej, światło pochodzące od okna sprawia, że inne obiekty oraz sam robot rzucają cienie na planszę), rozróżnianie kolorów jest więc trudne. Kontrastu nie poprawia niestety światło diody LED sensora, ponieważ kolor światła jest czerwony, co jeszcze pogarsza sytuację.

Załączniki

pl/dydaktyka/piw/2009/sprawozdania/piw20090429-09a.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