====== 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: [[http://student.agh.edu.pl/~kjakub/LEGO/MOV04922.MPG|wiezien :)]]
* Tutaj kilka zdjec prezentujacych naszego skazanca
{{:pl:dydaktyka:piw2009:sprawozdania:DSC04909m.JPG|}}
{{:pl:dydaktyka:piw2009:sprawozdania:DSC04907m.JPG|}}
===== Ś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
{{:pl:dydaktyka:piw2009:sprawozdania:DSC04910m.JPG|}}
{{:pl:dydaktyka:piw2009:sprawozdania:DSC04912m.JPG|}}
{{:pl:dydaktyka:piw2009:sprawozdania:DSC04913m.JPG|}}
{{:pl:dydaktyka:piw2009:sprawozdania:DSC04914m.JPG|}}
====== 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.