====== Sprawozdanie z laboratorium - proste algorytmy w PLNXT ====== Celem laboratorium było testowanie możliwości interfeju programistycznego PLNXT z użyciem algorytmów o małej złożoności. ==== IMPLEMENTACJA ==== Na laboratoriach zaimplementowaliśmy dwa z trzech proponowanych algorytmów. === Algorytm 1 - Omijanie przeszkód === **Opis rozwiązania** Robot przemieszcza się do przodu. Po napotkaniu przeszkody zatrzymuje się, cofa do tyłu oraz obraca o 90 stopni zgodnie z ruchem wskazówek zegara, następnie jedzie do przodu losową odległość, obraca o -90 stopni, jedzie do przodu próbując ponownie ominąć przeszkodę. W fazie jazdy do przodu robot zatrzymuje się i zamyka połączenie po klaśnięciu. **Implementacja:** :- consult('plnxt.pl'). start :- nxt_open, thread_create(go_on_buddy,_,[detached(true)]). go_on_buddy :- nxt_go(200), trigger_create(Idclap,clap,stop), sleep(1), % Chwila przerwy, żeby jedno klaśnięcie nie zostało rozpoznane jako dwa. trigger_create(_,check_distance,[nxt_stop, omin]). % Sprawdzenie, czy natężenie dźwięku przekracza progową wartość. clap :- nxt_sound(Value,force), Value > 70. check_distance :- nxt_ultrasonic(Distance,force), Distance < 15. omin :- trigger_kill(Idclap), nxt_go_cm(-200,6), nxt_rotate(400, 90), nxt_go_cm(300,7 + random(15)), nxt_rotate(400, -90), go_on_buddy. stop :- trigger_killall, nxt_stop, nxt_close. **Link do filmu prezentującego robota w akcji:** [[http://student.agh.edu.pl/~kacper/omijacz.mp4]] === Algorytm 2 - Panikarz === **Opis rozwiązania** Robot przemieszcza się powoli. Po kliknięciu zmienia kierunek o losowy kąt, szybko ucieka przez losowy czas, po czym uspokaja się i jedzie powoli. Zatrzymuje się i zamyka połączenie po wciśnięciu sensora dotyku. **Implementacja:** :- consult('plnxt.pl'). start :- nxt_open, thread_create(go_on_buddy,_,[detached(true)]). go_on_buddy :- nxt_go(200), sleep(1), % Chwila przerwy, żeby jedno klaśnięcie nie zostało rozpoznane jako dwa. trigger_create(_,clap,wait_a_second_buddy), trigger_create(_,klik,stop). wait_a_second_buddy :- nxt_stop, nxt_rotate(550,120 + random(120)), nxt_go_cm(800,2 + random(25),force), go_on_buddy. % Sprawdzenie, czy natężenie dźwięku przekracza progową wartość. clap :- nxt_sound(Value,force), Value > 65. stop :- trigger_killall, nxt_stop, nxt_close. klik :- nxt_touch(Value,force), Value > 0. **Link do filmu prezentującego robota w akcji:** [[http://student.agh.edu.pl/~kacper/panikarz.mp4]] ===== Ogólne uwagi do laboratorium ===== Podczas prac nad algorytmem nr 2 (panikarz) mieliśmy dużo problemy z doborem odpowiedniego progu głośności dla czujnika natężenia dźwięku robota. Jest to spowodowana dużym i bardzo zmiennym poziomem natężenia dźwięku w sali.