Data wykonania: 21.01.2009, godz. 9.30
Autorzy: Damian Dudziński, Maciej Fabia, Szymon Frenkel
Zastaliśmy już złożonego robota,
korzystał on z dwóch sensorów:
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.
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ń:
Ułatwieniem w konstruowaniu algorytmu byłaby bardziej rozbudowana dokumentacja biblioteki NXT.