====== Wstęp ====== Celem laboratorium było poznanie możliwości interfejsu programistycznego PLNXT poprzez stworzenie prostych algorytmów sterujących zachowaniem robota. ====== Stanowisko ====== Na stanowisku czekał na nas złożony robot Henio: {{:pl:dydaktyka:piw2009:sprawozdania:piw20090408-17b_foto1.jpg|}} **Problemy:** Podczas laboratorium ponownie napotkaliśmy problemy związane z komunikacją Czesława z komputerem. Aby z powrotem odzyskać połączenia po jednokrotnym uruchomieniu algorytmu niezbędny był restart powłoki SWIPL. ====== Przebieg laboratorium ====== W pierwszym etapie przetestowaliśmy z powodzeniem programy umieszczone w instrukcji do laboratorium: * Robot wykonuje ruch po kwadracie. * Jazda po kwadracie jest realizowana w osobnym wątku. Następnie na podstawie podanego szablonu programu opracowaliśmy wykonaliśmy następujące zadania: ===== Panikarz ===== Lekko zmodyfikowany względem instrukcji o dodatkowe paniczne ruchy. % % Robot porusza z małą prędkością do przodu. Po zarejestrowaniu klaśnięcia % (lub innego odpowiednio głośnego dźwięku) robot w 2 cyklach odtwarza dźwięk, % obraca się o losowy kąt i jedzie do przodu z większą losową prędkością. % Po tych dwóch cyklach panicznego zachowania powraca ponownie do powolnego % poruszania się do przodu. % % PLNXT - API w języku Prolog dla LEGO Mindstorms NXT :- consult('plnxt.pl'). start :- nxt_open, thread_create(stroll,_,[detached(true)]), trigger_create(_,pat,stop). stroll :- nxt_go(200), sleep(1), trigger_create(_,clap,run_away). run_away :- Rotate is 270 + random(180), Rotate2 is 270 + random(180), Speed is 500 + random(200), Speed2 is 400 + random(200), nxt_stop, nxt_play_tone(Speed,5*Speed), nxt_rotate(Speed, Rotate), nxt_go_cm(Speed,20), nxt_play_tone(Speed,5*Speed2), nxt_rotate(Speed, Rotate2), nxt_go_cm(Speed2,30), stroll. clap :- nxt_sound(Value,force), Value > 40. pat :- nxt_touch(Value, force), Value=:=1. stop :- trigger_killall, nxt_stop, nxt_close. ===== Omijanie przeszkód ===== % % Zadanie 2: % Robot porusza z małą prędkością do przodu. Po wykryciu przeszkody w podanej % odległości omija ją wykonując sekwencję ruchów gwarantującą poruszanie się po % trasie zgodnej z przedstawionym poniżej schematem (R-robot, PP-przeszkoda). % ______ % | | % R-| PP |-> % % PLNXT - API w języku Prolog dla LEGO Mindstorms NXT :- consult('plnxt.pl'). start :- nxt_open, thread_create(stroll,_,[detached(true)]). stroll :- nxt_go(200), sleep(1), trigger_create(_,obstacle,roadblock). roadblock :- nxt_stop, passround, stroll. passround :- Length is 20, Length2 is Length * 2, nxt_rotate(300, -90), nxt_go_cm(250,25), nxt_rotate(300, 90), nxt_go_cm(250,50), nxt_rotate(300, 90), nxt_go_cm(250,25), nxt_rotate(300, -90), stroll. obstacle :- nxt_ultrasonic(Distance,force), Distance < 20. stop :- trigger_killall, nxt_stop, nxt_close. ====== Spostrzeżenia, napotkane problemy, wnioski ====== * Budowa i ciężar robota przy mniejszych prędkościach powodowały blokadę kółka tylnego (podpierającego). Podczas większych obrotów blokowało się i zatrzymywało obrót. * Często przy sekwencji większej ilości ruchów (np.: przód, obrót, tył, obrót) robot zachowywał się nieprzewidywalne i wykonywał jedynie niektóre ruchy lub z zupełnie innymi parametrami niż podano. * Odnośnie poprzedniego punktu przy sekwencyjnym wykonywaniu wielu ruchów parametry (prędkości, kąty obrotu, długość zadanej drogi w cm) podane w kodzie źródłowym nie odpowiadały temu co wykonywał robot. ====== Załączniki ====== ===== Zdjęcia ===== Podczas testowania zaimplementowanych zadań wykonaliśmy następujące zdjęcia Henia. {{:pl:dydaktyka:piw2009:sprawozdania:piw20090408-17b_foto1.jpg|}} ===== Programy ===== Dodatkowo dołączamy spakowane pliki wykonane na laboratorium. {{:pl:dydaktyka:piw2009:sprawozdania:piw20090408-17b.zip|}} ====== Informacyjnie ====== Sprawozdanie opracowane przez: * Jacka Dymczaka * Piotra Kanię * Mateusza Urbanika