====== 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.