==== Sprawozdanie z laboratorium nr 5 ===== ---- Data wykonania: **21.01.2009, godz. 9.30** Autorzy: **Damian Dudziński, Maciej Fabia, Szymon Frenkel** ---- === Realizacja === Zastaliśmy już złożonego robota, korzystał on z dwóch sensorów: * czujnika sonarowego, * czujnika dotyku; zatem mogliśmy od razu przystąpić do realizacji algorytmu. Zaimplementowaliśmy algorytm "sprzątacza", w którym robot miał za zadanie usunąć wszystkie przeszkody znajdujące się w odległości nie większej niż określona. Aby to zrealizować obracał się on wokół własnej osi, a po wykryciu przeszkody przez czujnik sonarowy wstrzymywał ruch obrotowy, wykonywał ruch w kierunku przeszkody wypychając ją poza obszar do wysprzątania, a potem wracał na wcześniejszą pozycję i kontynuował ruch obrotowy, aż do sprawdzenia całego obszaru wokół siebie. Czujnik dotyku służył za awaryjny wyłącznik robota, który uaktywniał się także, gdy przesuwana przeszkoda była zbyt ciężka dla robota. :- consult('plnxt.pl'). start:- nxt_open, krecenie, trigger_create(_,pushed,[nxt_stop,nxt_close]). krecenie :- nxt_rotate(150,360), sleep(1), % Chwila przerwy trigger_create(_,przeszkoda,wypychanie). wypychanie :- nxt_stop, nxt_go_cm(300,40), sleep(10), nxt_go_cm(-300,40), sleep(10). trigger_create(_,_,krecenie). % Sprawdzenie, czy znaleziono przeszkodę przeszkoda :- nxt_ultrasonic(Value,force), Value < 20. % Sprawdzenie, czy sensor dotyku jest wciśnięty. pushed :- nxt_touch(Value,force), Value=1. :- start. {{:pl:mindstorms:studenci:przedmioty:jsi:jsi2008:sprzatacz.pl|}} === Problemy === Niestety, szczególnie na początku zajęć, kilkukrotnie nieoczekiwanie robot przestawał wykonywać wysyłane mu polecenia i konieczne było jego wyłączenie i nawiązywanie komunikacji od nowa. W czasie testowania algorytmu okazywało się również, że jednak polecenia biblioteki NXT nie zawsze działają według naszych oczekiwań: * funkcja odczytująca stan czujnika dotyku "nxt_touch(Value,force)" przez pewien czas zwracała wartości "181" i "1023" zamiast binarnych, * przy użyciu funkcji obracającej robota "nxt_rotate(150,360)" realny kąt obrotu nie zgadzał się z żądanym, * funkcja nxt_go_cm nie działała, gdy otrzymywała ujemny argument "Speed" - robot nie poruszał się do tyłu. Natomiast funkcja nxt_go reagowała prawidłowo. === Wnioski === Ułatwieniem w konstruowaniu algorytmu byłaby bardziej rozbudowana dokumentacja biblioteki NXT.