Laboratorium 3

środa 9.30 29 IV 2009

Team w składzie:
Jarosław Luks
Wojciech Kubik
Jakub Kościółek

Wstęp do laboratorium

  • W trakcie laboratorium nr 2 staraliśmy się wykorzystać wiedzę nabytą na poprzednich zajęciach. Tym razem radziliśmy już sobie bezbłędnie z problemami z połączeniem.
  • Celem laboratorium było także stworzenie algorytmów w Prologu, które bazowały na wiedzy zdobytej na poprzednich zajęciach. Głównym zagadnieniem było stworzenie algorytmów wielowątkowych.

Opracowane algorytmy

Panikarz

start :-
	nxt_open,
	nxt_light_LED(activate),
	thread_create(watki,_,[detached(true)]).
 
run_buddy :-
	Value is 100 + random(100),
	nxt_stop,
	nxt_rotate(200, Value),
	watki.
 
watki :-
	nxt_go(200),
	trigger_create(_,czerwone,wychodze),
	trigger_create(_,otoczenie,run_buddy).
 
otoczenie :-
	nxt_light(Value,force),
	Value < 45.
 
wychodze :-
	nxt_stop,
	nxt_go_cm(200, 8),
	trigger_create(_,otoczenie,wychodze2),
	nxt_go(200).
 
czerwone :-
	nxt_light(Value,force),
	Value < 66,
	Value > 61.
 
wychodze2 :-
	nxt_go(200), 
	stop.
 
stop :-
	trigger_killall,
	nxt_stop,
	nxt_close.
  • Efekt działa algorytmu można obejrzeć, pobierając krótki filmik: wiezien :)
  • Tutaj kilka zdjec prezentujacych naszego skazanca

Śledzenie linii

start :-
	nxt_open,
	trigger_create(_,klik,stop),
	thread_create(watki,_,[detached(true)]).
 
watki :-
	nxt_go(200),
	trigger_create(_,linia,jedz).
 
jedz :-
	trigger_create(_,out,powrot),
	nxt_go(200).
 
out :-
	nxt_light(Value,force),
	Value > 45.
 
linia :-
	nxt_light(Value,force),
	Value < 45.
 
 
powrot :-
	trigger_create(_,linia,[nxt_stop,jedz]),
	nxt_rotate(280, 360).
 
klik:-
	nxt_touch(Value, force),
	Value =:= 1.
 
stop :-
	trigger_killall,
	nxt_stop,
	nxt_close.
  • Tutaj kilka zdjec prezentujacych naszego sledczego

Problemy

Problem z czujnikiem światła

  • Bardzo ciężko było dobrać parametr dal poszczególnych kolorów. Gdy tylko robił się cień, lub jakies załamania, robot inaczej rozpoznawał nasycenie i z tego powodu występowały problemy (zatrzymywał się przy zagięciach planszy, lub przejezdzal przez linie).

Problem z wątkami

  • Podobnie jak poprzednio, napotykaliśmy (sporadycznie) na problem wywołania stop. Gdy zatrzymywaliśmy robota predykatem stop, a potem chcieliśmy go ponownie uruchomić predykatem start prowadziło to do unieruchomienia programu i zmuszeni byliśmy do jego zamknięcia ( haniebny CTRL + Z :) ). Skutkowało to pojawianiem się w konsoli błedu:
1 threads wouldn't die


Co oczywiście zmuszało nas do zabicia odpowiedniego procesu i ponownego łączenia się z zestawem.

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