====== Laboratorium - zapoznanie z PLNXT ====== ===== Informacje ===== 08.04.2009, godz. 9.30\\ grupa w składzie: Joanna Jaworek, Eliasz Kańtoch, Piotr Figiel \\ Informatyka Stosowana IV rok \\ Robot: Franek\\ ===== Konstrukcja ===== Dobudowaliśmy do robota czujniki światła i odległości. W pełni funkcjonalnego robota możemy obserwować na rysunku poniżej: ===== Konfiguracja stanowiska do pracy z NXT ===== Przez kilkanaście minut nie udało nam się połączyć z Robotem. Nie pomogło kolejno: resetowanie powłoki i restart robota. Dopiero restart komputera po uzgodnieniu z prowadzącym ćwiczenia umożliwił prawidłowe podłączenie do robota. Przetestowaliśmy funkcjonalność robota za pomocą poleceń dostępnych w dokumentacji: np:\\ ''[plnxt].\\ nxt_open.\\ nxt_rotate(100, 180).\\ nxt_close.'' \\ ===== Implementacja algorytmu ===== Na podstawie dokumentacji opracowaliśmy rozwiązanie 2 problemów. ==== Algorytm 1 ==== Do rozwiązania tego problemu napisaliśmy predykat sprawdz_czy_linia umożliwiącego wykrycie czarnej linii przed robotem. Stworzyliśmy także predykat jedz_wprzod, który definiuje trigger który wyzwalał obrot robota o losowy kąt z przedziału 100-180 stopni gdy robot najedzie na ciemne pole (linię). :- consult('plnxt.pl'). start:- nxt_open, jedz_wprzod. jedz_wprzod :- nxt_go(300), trigger_create(_,sprawdz_czy_linia,obrot). sprawdz_czy_linia :- nxt_light(Value,force), Value < 20. obrot :- nxt_stop, Angle is 100 + random(80), nxt_rotate(350,Angle), jedz_wprzod. ==== Algorytm 2 ==== Do rozwiązania tego problemu skorzystaliśmy z predykatu chceck_distance umożliwiącego wykrycie przeszkody oraz stworzyliśmy predykat jedz_wprzod, który definiuje trigger który wyzwalał obrot robota o losowy kąt z przedziału 100-130 stopni gdy robot w pobliżu wykrył przeszkodę. :- consult('plnxt.pl'). start:- nxt_open, jedz_wprzod. jedz_wprzod :- nxt_go(300), trigger_create(_,check_distance,obrot). obrot :- nxt_stop, Angle is 100 + random(30), nxt_rotate(350,Angle), jedz_wprzod. check_distance :- nxt_ultrasonic(Distance,force), Distance < 15. ===== Problemy ===== Napotkaliśmy trudności podczas testowania kolejnych wersji opracowanych przez nas algorytmów. Nie potrafimy ustalić dlaczego co jakiś czas byliśmy zmuszeni restartować system w celu poprawnego połączenia się z robotem. Stało się to bardzo poważnym utrudnieniem podczas testowania algorytmów. ===== Wnioski ===== * Warstwa nxt_movement okazała się być bardzo pomocnym narzędziem podczas programowania zaawansowanych ruchów robotów typu ruch do przodu, tyłu, skręcanie i obracanie. * Dokumentacja okazała się zgodna z przetestowanymi poleceniami. * Dzięki nxt_movement można stworzyć poruszającego się robota nie tylko omijającego przeszkody ale także reagującego na bodźce świetlne w kilku linijkach kodu. ===== Propozycje rozwoju ===== Naszym zdaniem warstwę nxt_movement można rozszerzyć o akcję jeszcze bardziej wysokopoziomowe np. poruszanie się za intensywnością światła przez robota - nxt_search_light , nxt_search_sound. Interesujące byłoby dodanie ruchu robota po bardziej skomplikowanych trajektoriach typu zygzak nxt_go_ zigzag czy okrąg nxt_go_circle. Robot byłby w stanie wykonywać naprawdę widowiskowe ruchy w kilku linijkach kodu.